บทความนี้นำเสนอวิธีการสร้าง API สำหรับตรวจจับวัตถุด้วย YOLOv5 โดยการส่งรูปผ่านทาง LINE Chat Bot จากนั้นจะได้รับผลลัพธ์การตรวจจับวัตถุเป็นรูปที่มีการตีกรอบว่ามีวัตถุอะไรอยู่ในรูปบ้าง?
โดยมีขั้นตอนทั้งหมดดังต่อไปนี้
1. สมัคร LINE Developer
2. ติดตั้งสภาพแวดล้อมต่างๆที่จำเป็น
3. เริ่มการทำงานของ API
4. ติดตั้ง Ngrok
5. ตั้งค่า Webhook ของ LINE
6. ทดสอบตรวจจับวัตถุผ่าน LINE
เริ่มจากเข้าไปที่ https://developers.line.biz/console จากนั้นเข้าสู่ระบบด้วย LINE account
Provider ใช้เป็นกลุ่มของ Chatbot ซึ่งปกตินิยมตั้งเป็นชื่อตัวเอง ชื่อบริษัท ชื่อทีม หรือชื่อกลุ่มอะไรก็ได้ที่ต้องการ โดยการกดที่ Create
ตั้งชื่อ Provider จากนั้นกด Create
*** 1 Account สามารถสร้าง Provider ได้สูงสุด 10 Providers ครับผม
Channel ใช้แทน Chatbot ของเรา เริ่มจากกด Create a Messaging API channel
ตั้งค่าต่างๆจากนั้นกด Create
ปิด Auto-reply messages และ Greeting messages กด Edit
จากนั้นต้งค่าดังรูปต่อไปนี้
จากนั้นดาวน์โหลด code จาก https://github.com/thannob/line-yolo-api
โดยการทำงานหลักจะอยู่ที่ไฟล์ line-yolo-api.pyโดยมีรายละเอียดคร่าวๆดังต่อไปนี้
บรรทัดที่ 1–39 : นำเข้าไลบารี่ต่างๆ
บรรทัดที่ 45–55 : โหลดและตั้งค่า channel_secret และ channel_access_token
บรรทัดที่ 60–82 : ตั้งค่าและโหลดแบบจำลอง YOLOv5
บรรทัดที่ 98-118 : เป็น endpoint หลัก คือ ('callback')
บรรทัดที่ 121-139 : เป็นส่วนที่ทำงานเมื่อผู้ใช้ส่งข้อความมาแบบ text โดยในที่นี้จะตอบกลับเหมือนเดิมกับข้อความที่ส่งมา ยกเว้นพิมพ์คำว่า ‘profile’ จะตอบกลับเป็น profile name
บรรทัดที่ 164-249 : เป็นส่วนที่ทำงานเมื่อผู้ใช้ส่งรูปมาจะทำการตรวจจับวัตถุบนรูปจากนั้นตอบกลับมาเป็นรูปที่มีผลลัพธ์การตรวจจับโดยแสดงการตีกรอบชนิดของวัตถุ (80 ชนิด) พร้อมตัวเลขแสดงความคล้าย
$ pip install virtualenv
$ cd line-yolo-api
$ virtualenv line-yolo-api-venv
● Windows:
$ line-yolo-api-venv\Scripts\activate.bat
● Mac และ Linux:
$ source line-yolo-api-venv/bin/activate
● Windows:
ติดตั้ง pytorch โดยดูรายละเอียดดัง link ต่อไปนี้ https://pytorch.org/
จากนั้น ติดตั้ง packages ต่างๆที่จำเป็นด้วยคำสั่งต่อไปนี้
$ pip install -r requirements-windows.txt
● Mac และ Linux:
$ pip install -r requirements.txt
สร้างไฟล์ .env วางไว้ในตำแหน่งต่อไปนี้
โดยมีคำสั่งดังนี้
LINE_CHANNEL_SECRET='<<Your Line Channel Secret>>'
LINE_CHANNEL_ACCESS_TOKEN='<<Your Line Channel Access Token>>'
ให้ไปคัดลอก Channel secret และ Channel access token โดยกลับไปที่ website LINE Developer อีกครั้ง
จากนั้นไปที่ Basic settings > Channel secret ดังรูป
และ คัดลอก Channel access token โดยไปที่ Messaging API > Channel access token > กด issue ดังรูป
ที่ line-yolo-api จากนั้นเริ่มการทำงานของ API ในตัวอย่างนี้ใช้เป็น Flask โดยใช้คำสั่งต่อไปนี้
$ python line-yolo-api.py
จะปรากฎผลลัพธ์ดังรูป
เนื่องจาก API ที่สร้างตอนนี้สามารถเรียกใช้งานได้เฉพาะเครื่องของเราเองเท่านั้น ดังนั้นพอให้สามารถเรียกใช้งาน API โดยผ่าน internet จากภายนอก เราจึงจำเป็นจะต้องใช้เครื่องมือเสริม คือ Ngrok สำหรับสร้าง public URL และเป็น https ด้วย
สามารถดาวน์โหลดได้ที่ https://ngrok.com/download
จากนั้นเปิด Command Prompt หรือ Terminal และให้เปลี่ยนตำแหน่งไปที่ Nrgok.exe จากนั้นสั่งคำสั่งต่อไปนี้
$ ngrok http 8000
จากนั้นจะปรากฎหน้าจอดังต่อไปนี้
เท่านี้ API ของเราก็สามารถเรียกได้จากภายนอกเรียบร้อยแล้วครับ โดยสามารถเข้าถึงได้จาก Forwarding URL (เส้นสีแดง)
ตั้งค่า Webhook ของ LINE ให้ชี้มาที่ API ของเรา โดยนำ Forwarding URLข้างต้นที่เป็น https กลับไปกรอกใน website ของ LINE
โดยไปที่ Messageing API > Webhook settings
จากนั้นกรอก
● Webhook URL เติมด้วย endpoint (‘/callback’) > กด Update > กด Verify > Success
● และ enable Use webhook ดังรูป
ต่อมาให้ทำการ Add Friend เป็นเพื่อนกับ Chatbot ที่สร้างขึ้น อาจจะใช้ QR code อยู่ในหน้า Messaging API ก็ได้ครับ
จากนั้นทดสอบส่งรูป ผมทดลองกับรูปน้องดังนี้
https://pixabay.com/photos/pets-cute-cat-dog-cute-wallpaper-3715733/
ผลลัพธ์ตอบกลับมาใช้ได้เลยนะครับ สามารถตรวจจับน้องๆได้ถูกต้อง สุดยอดไปเลยครับ ^^
เรียบร้อยครับ บทความนี้จะยังไม่ได้ลงรายละเอียดด้านเทคนิคนะครับ ไว้ว่างๆจะมาอธิบายให้อีกครั้งครับผม
สุดท้ายนี้หวังว่าบทความนี้จะทำให้เห็นภาพรวมการทำตรวจจับวัตถุด้วย YOLOv5 ผ่าน LINE
● สร้าง API ตรวจจับวัตถุด้วย YOLOv5 ผ่าน LINE (ตอนที่ 2 deploy ด้วย Docker ขึ้น Heroku Cloud) โดย Karn Yongsiriwit
บทความโดย อ.ผศ.ดร.ธรรณพ อารีพรรค
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต