บทความนี้เป็นแล็บหนึ่งในการเรียนการสอนวิชาปัญญาประดิษฐ์เพื่อประยุกต์ใช้การสร้าง QR Code จากไลบรารี segno การถอดรหัส QR Code จากไลบนรารี OpenCV การตรวจสอบข้อความว่าเป็น URL หรือไม่ และการเปิดเว็บบราวเซอร์เพื่อเข้าถึง URL ที่ถอดรหัสได้ด้วยไลบรารี webbrowser
ไลบรารี segno
ไลบรารี segno · PyPI เป็นไลบรารีที่พัฒนาเพื่อใช้กับภาษาไพธอนโดยทำงานตามมาตรฐาน ISO/IEC 18004:2015(E) อันเป็นเรื่องของ “QR Code bar code symbology specification”
การติดตั้งจะต้องสั่งงานดังนี้
pip install segno
การใช้งานมีรูปแบบการใช้งานพื้นฐานประกอบด้วย 3 สิ่ง คือ การเรียกใช้ไลบรารี การสร้างข้อมูล QR Code ด้วยคำสั่ง make_qr() และบันทึกข้อมูล QR Code ลงไฟล์ด้วยคำสั่ง save() ดังนี้
import segno
hello_qr=segno.make_qr(“ข้อความ”)
hello_qr.save(“ชื่อไฟล์.png” , scale=ขนาดภาพ, border=ขนาดกรอบ)
ไลบรารี webbrowser
โมดูล webbrowser เป็นไลบรารีที่อยู่ภายใต้ภาษาไพธอนที่ดูแลโค้ดโดย Georg Brandl และเมธอดหรือคำสั่งสำหรับใช้งานประกอบด้วย
open( URL, new=0, autoraise=True )
open_new( URL )
open_new_tab( URL )
โดยทั้ง 3 เมธอดรับ URL เพื่อเปิดหน้าเว็บที่ระบุ แต่แตกต่างที่ open() ประกอบด้วย 3 พารามิเตอร์ คือ URL, new เป็น 0 หมายถึงเป็นการเกิดจากบราวเซอร์ที่เปิดไว้แล้ว (แต่ถ้ายังไม่เปิดบราวเซอร์จะเปิดหน้าบราวเซอร์ขึ้นมาใหม่) แต่ถ้ากำหนดเป็น 1 จะเป็นการระบุให้เปิดหน้าเว็บบราวเซอร์ใหม่ ส่วน autoraise เป็น True หมายถึงให้ทำการหน้าเว็บนั้นแสดงเป็นหน้าต่างบนสุด
ทำตั่ง open_new() เป็นการเปิดหน้าบราวเซอร์ใหม่แม้มีบราวเซอร์เปิดอยู่แล้ว และ open_new_tab() เป็นการเปิดหน้าเว็บในแท็บใหม่บนบราวเซอร์ที่เปิดไว้แล้ว
กรณีศึกษา
พัฒนาโปรแกรมสร้าง QR Code จากข้อความ
ตัวอย่างแรกเป็นการใช้ไลบรารี segno เพื่อสร้าง QR Code จำนวน 2 ไฟล์ โดยไฟล์แรกเป็นข้อความ “I’m JarutEx” และไฟล์ที่ 2 เป็น URL ของเว็บ “https://www.jarutex.com” ด้วยการใช้คำสั่ง make_qr() หลังจากนั้นทำการบันทึกลงไฟล์ภาพด้วยคำสั่ง save() ดังนี้
import segno
my_id=segno.make_qr("I'm JarutEx")
my_assignment1 = segno.make_qr("https://www.jarutex.com")
my_id.save("my_id.png",scale=10,border=2)
my_assignment1.save("my_assignment1.png",scale=10,border=2)
ตัวอย่างผลลัพธ์ที่ได้จากการสร้า QR Code ชื่อ my_id.png และ my_assignment1.png
พ้ฒนาโปรแกรมอ่านไฟล์ภาพ QR Code
เพื่อถอดรหัส และตรวจสอบข้อมูลที่อ่านได้ว่าเป็นข้อความหรือ URL โดยแสดงข้อความที่อ่านได้ และถ้าพบว่าเป็น URL จะเปิดเว็บบราวเซอร์เพื่อเปิดเข้าหน้าเว็บที่ระบุมาจาก QR Code
การอ่านไฟล์ภาพใช้คำสั่ง imread() จากไลบรารี OpenCV ดังนี้
img = cv2.imread( 'my_id.png' )
img2 = cv2.imread("my_assignment1.png")
เมื่อได้ข้อมูลภาพเก็บในตัวแปร img และ img2 ขั้นตอนต่อไปเป็นการถอดรหัส QR Code ด้วยการใช้คำสั่ง detectAndDecode() ของไลบรารีย่อยของ OpenCV ชื่อ QRCodeDetector() ดังนี้
qrCodeDetector = cv2.QRCodeDetector()
text = qrCodeDetector.detectAndDecode(img)[0]
text2 = qrCodeDetector.detectAndDecode(img2)[0]
ส่วนของการตรวจสอบ URL
def FindURL(string):
x=string.split()
res=[]
for i in x:
if i.find("https:")==0 or i.find("http:")==0:
res.append(i)
return res
โปรแกรมการทำงาน
import cv2
import webbrowser
def FindURL(string):
x=string.split()
res=[]
for i in x:
if i.find("https:")==0 or i.find("http:")==0:
res.append(i)
return res
img = cv2.imread( 'my_id.png' )
img2 = cv2.imread("my_assignment1.png")
qrCodeDetector = cv2.QRCodeDetector()
text = qrCodeDetector.detectAndDecode(img)[0]
text2 = qrCodeDetector.detectAndDecode(img2)[0]
if len(FindURL(text))==0:
print(text)
else:
webbrowser.open(text)
if len(FindURL(text2))==0:
print(text2)
else:
webbrowser.open(text2)
ตัวอย่างผลลัพธ์ของการทำงานเป็นดังนี้
สรุป
จากตัวอย่างในครั้งนี้จะพบว่าการสร้าง QR Code สามารถกระทำได้สะดวกจากการใช้ภาษาไพธอนผ่านทางไลบรารี segno ที่สามารถกำหนดขนาดของภาพและกรอบได้ นอกจากนี้ยังมีตัวอย่าง FindURL() ที่เขียนด้วยการตรวจหาคำ http: และ https: ในสตริงที่ถอดรหัสจาก OpenCV ถ้าไม่พบจะคืนค่าเป็นค่าว่าง เมื่อนำมาตรวจสอบจะทำให้สามารถแยกได้ว่า QR Code นั้นเป้นข้อความธรรมดาหรือ URL และถ้าเป็น URL จะเปิดหน้าเว็บด้วยไลบรารี webbrowser.open()
นอกจากนี้จะพบว่า สามารถนำไปประยุกต์เข้ากับการใช้ Text-to-Speech และ Speech-To-Text เพื่อเพิ่มความสะดวกในการใช้งาน หรือเพิ่มข้นตอนการยืนยันการเปิดหน้าเว็บเพื่ป้องกันกรณีของความไม่ปลอดภัยในการเข้าเว็บ เป็นต้น
สุดท้ายนี้ขอให้สนุกกับการเขียนโปรแกรมครับผม
อ้างอิง
(C) 2020-2024, โดย อ.ดนัย เจษฎาฐิติกุล/อ.จารุต บุศราทิจ
ปรับปรุงเมื่อ 2024-02-14