สร้าง API ตรวจจับวัตถุด้วย YOLOv5 ผ่าน LINE (ตอนที่ 1 deploy บนเครื่องตนเอง)

บทความนี้นำเสนอวิธีการสร้าง API สำหรับตรวจจับวัตถุด้วย YOLOv5 โดยการส่งรูปผ่านทาง LINE Chat Bot จากนั้นจะได้รับผลลัพธ์การตรวจจับวัตถุเป็นรูปที่มีการตีกรอบว่ามีวัตถุอะไรอยู่ในรูปบ้าง?

โดยมีขั้นตอนทั้งหมดดังต่อไปนี้

1. สมัคร LINE Developer

2. ติดตั้งสภาพแวดล้อมต่างๆที่จำเป็น

3. เริ่มการทำงานของ API

4. ติดตั้ง Ngrok

5. ตั้งค่า Webhook ของ LINE

6. ทดสอบตรวจจับวัตถุผ่าน LINE

สมัคร LINE Developer

เริ่มจากเข้าไปที่ https://developers.line.biz/console จากนั้นเข้าสู่ระบบด้วย LINE account

สร้าง Provider

Provider ใช้เป็นกลุ่มของ Chatbot ซึ่งปกตินิยมตั้งเป็นชื่อตัวเอง ชื่อบริษัท ชื่อทีม หรือชื่อกลุ่มอะไรก็ได้ที่ต้องการ โดยการกดที่ Create

ตั้งชื่อ Provider จากนั้นกด Create

*** 1 Account สามารถสร้าง Provider ได้สูงสุด 10 Providers ครับผม

สร้าง Channel

Channel ใช้แทน Chatbot ของเรา เริ่มจากกด Create a Messaging API channel

ตั้งค่าต่างๆจากนั้นกด Create

disable Auto-reply messages และ Greeting messages

ปิด Auto-reply messages และ Greeting messages กด Edit

จากนั้นต้งค่าดังรูปต่อไปนี้

ติดตั้งสภาพแวดล้อมต่างๆที่จำเป็น

ดาวน์โหลดจาก GitHub

จากนั้นดาวน์โหลด 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 ชนิด) พร้อมตัวเลขแสดงความคล้าย

ติดตั้ง virtualenv

$ pip install virtualenv

สร้าง virtual environment ชื่อ line-yolo-api-venv

$ cd line-yolo-api
$ virtualenv line-yolo-api-venv

เปิดใช้ virtual environment

● Windows:

$ line-yolo-api-venv\Scripts\activate.bat

● Mac และ Linux:

$ source line-yolo-api-venv/bin/activate

ติดตั้ง packages ที่จำเป็น

● Windows:

ติดตั้ง pytorch โดยดูรายละเอียดดัง link ต่อไปนี้ https://pytorch.org/

จากนั้น ติดตั้ง packages ต่างๆที่จำเป็นด้วยคำสั่งต่อไปนี้

$ pip install -r requirements-windows.txt

● Mac และ Linux:

$ pip install -r requirements.txt

กำหนด Channel secret และ Channel access token จาก LINE

สร้างไฟล์ .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 ดังรูป

เริ่มการทำงานของ API

ที่ line-yolo-api จากนั้นเริ่มการทำงานของ API ในตัวอย่างนี้ใช้เป็น Flask โดยใช้คำสั่งต่อไปนี้

$ python line-yolo-api.py

จะปรากฎผลลัพธ์ดังรูป

ติดตั้ง Ngrok

เนื่องจาก API ที่สร้างตอนนี้สามารถเรียกใช้งานได้เฉพาะเครื่องของเราเองเท่านั้น ดังนั้นพอให้สามารถเรียกใช้งาน API โดยผ่าน internet จากภายนอก เราจึงจำเป็นจะต้องใช้เครื่องมือเสริม คือ Ngrok สำหรับสร้าง public URL และเป็น https ด้วย

ดาวน์โหลด Ngrok

สามารถดาวน์โหลดได้ที่ https://ngrok.com/download

จากนั้นเปิด Command Prompt หรือ Terminal และให้เปลี่ยนตำแหน่งไปที่ Nrgok.exe จากนั้นสั่งคำสั่งต่อไปนี้

$ ngrok http 8000

จากนั้นจะปรากฎหน้าจอดังต่อไปนี้

เท่านี้ API ของเราก็สามารถเรียกได้จากภายนอกเรียบร้อยแล้วครับ โดยสามารถเข้าถึงได้จาก Forwarding URL (เส้นสีแดง)

ตั้งค่า Webhook ของ LINE

ตั้งค่า Webhook ของ LINE ให้ชี้มาที่ API ของเรา โดยนำ Forwarding URLข้างต้นที่เป็น https กลับไปกรอกใน website ของ LINE

โดยไปที่ Messageing API > Webhook settings

จากนั้นกรอก

● Webhook URL เติมด้วย endpoint (‘/callback’) > กด Update > กด Verify > Success

● และ enable Use webhook ดังรูป

ตั้งค่า Webhook ของ LINE

ต่อมาให้ทำการ 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

บทความโดย อ.ผศ.ดร.ธรรณพ อารีพรรค

วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต