วิธีตรวจจับวัตถุในรูปภาพด้วย AI

คำกล่าวนี้ไม่ใช่เรื่องเกินจริงปัจจุบันเราสามารถเขียน AI
เพื่อตรวจจับวัตถุในรูปภาพ (Object detection) ได้ง่ายนิดเดียว
มีตัวอย่างโค้ด ให้ลองเขียนตามมีวีดีโอ มีบทความสอนเยอะแยะเกลื่อนเนต
มีโมเดล AI ที่ถูกเทรนมาเรียบร้อยแล้ว เอามาใช้ได้เลย
มีงานวิจัย paper ตีพิมพ์ โชว์ให้เห็นกันเยอะ
รวมทั้งงานวิจัยใหม่ๆ ที่จะอัพเกรดความสามารถ AI ที่รอวันตีพิมพ์

ซึ่งตอนนี้ AI แนวนี้ก็ถูกนำไปใช้งานจริงแล้วด้วยอย่างประเทศจีนที่ได้ติดกล้อง CCTV
ทำราวกับเป็น skynet เอาไว้ตรวจจับผู้คนในท้องถนนด้วย AI
เมื่อพูดถึงอัลกอริทึม AI ที่ตรวจจับวัตถุต่างๆ ในรูป ก็มีหลายตัว เช่น
R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet , SSD, YOLO
อันนี้จะพามาลองเขียน AI ง่ายๆ นิดเดียว
จากบทความต้นฉบับภาษาอังกฤษ object detection ภายใน 10 บรรทัด
ตัวโค้ดจะเป็น python นะครับ เพราะงานด้านนี้นิยมใช้ Python มาเป็นอันดับหนึ่ง
ภาษาอื่นอาจเสียเปรียบเยอะหน่อย ตัวอย่างมีน้อย
1) ติดตั้ง python
หาอ่านได้ตามอินเตอร์เนต ไม่ยาก หรือจะอ่านจากตำรา “วิทยาการคำนวณ” ของเด็ก ม.1 ก็ได้ มีเขียนไว้
ลิงค์ดาวน์โหลด https://www.python.org/downloads/
แต่ผมเชียร์ให้ลง anaconda ดีกว่า มันเป็นแพลทฟอร์มสำหรับงาน Data science
และเหมาะกับการงาน AI สาย machine learning และ deep learning
ที่สำคัญเหมาะกับบทความนี้ด้วยขอบอกเลย
2) ติดตั้งมอดูลพวกนี้ให้หมด อย่าตกหล่นอันใดเด็ดขาดนะครับ
pip install tensorflow pip install numpy pip install scipy pip install opencv-python pip install pillow pip install matplotlib pip install h5py pip install keras
สุดท้ายแล้วลงมอดูล imageai ซึ่งเป็นพระเอกในการเขียน AI ตรวจจับรูปภาพ (เฉพาะบทความนี้)
pip3 install https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.2/imageai-2.0.2-py3-none-any.whl

สำหรับ imageai มันเป็นไลบรารี่ Deep Learning
สำหรับงาน Computer Vision (หรือที่เรียกว่า Image processing)
ช่วยทำให้เราเขียนโค้ดไม่กี่บรรทัดก็เสร็จแล้ว
3) ดาวน์โหลดโมเดล AI ชื่อ resnet50_coco_best_v2.0.1.h5
resnet50_coco_best_v2.0.1.h5 จะถูกเทรนมาเรียบร้อยแล้ว
ขนาดไฟล์จะใหญ่หน่อย 145 MB
4) โค้ดก็ก็อปปี้ตามนี้ จากบบทความต้นฉบับ
from imageai.Detection import ObjectDetection import os execution_path = os.getcwd() detector = ObjectDetection() detector.setModelTypeAsRetinaNet() detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5")) detector.loadModel() detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg")) for eachObject in detections: print(eachObject["name"] , " : " , eachObject["percentage_probability"] )
ทริคเล็กน้อย ถ้าต้องการแสดงรูป “imagenew.jpg” ให้เด้งขึ้นมา ก็อาจเพิ่มโค้ดตรงนี้ก็ได้
from PIL import Image image = Image.open('imagenew.jpg') image.show()
เสร็จแล้วบันทึกไฟล์เป็นชื่อ FirstDetection.py
++++สำหรับโค้ดตัวอย่างนี้+++++
โค้ดตัวอย่างที่แสดงเขาใช้โมเดลที่เรียกว่า RetinaNet เท่านั้น
ลองเล่นดู รันได้ไม่ยาก ถ้าจะยากคงเป็นเรื่องทฤษีสำหรับผู้สนใจ
ก็หาอ่านจาก paper ต้นฉบับบโดยตรง หรือบทความออนไลน์ต่างๆ เพื่อความกระจ่าง

โครงสร้าง RetinaNet ที่มา https://arxiv.org/pdf/1708.02002.pdf
5) หาไฟล์รูปภาพมาทดสอบ
ในโค้ดจะระบุรูปภาพ ใช้เป็นอินพุตชื่อ “image.jpg”
ทั้งนี้ไฟล์ image.jpg
โมเดล resnet50_coco_best_v2.0.1.h5
และ FirstDetection.py
ทั้ง 3 ไฟล์จะอยู่ที่เดียวกันนะครับ

6) แล้วรันด้วยคำสั่ง
python FirstDetection.py
หรือจะใช้ IDE รันก็ได้
(วิธีรัน python ไม่ยากศึกษาได้ตามเนต หรือตามคู่มือเด็ก ม.1)
7) ผลลัพธ์จะได้ออกมาเป็นรูป imagenew.jpg
โดย AI จะตีกรอบในรูปว่ามีวัตถุอะไรได้บ้าง?
พร้อมบอกความน่าจะเป็น (เป็นตัวเลข) ว่าเป็นวัตถุอะไร

ถ้าไปดูที่คอนโซล จะบอกว่า
มันตรวจจับได้อะไรออกมา
ด้วยความน่าจะเป็นเท่าไร
(แต่ถ้ารูปขนาดใหญ่ ยิ่งเครื่องไม่แรงด้วยแล้ว ก็จะทำงานช้านะครับ)
traffic light : 50.23456811904907 traffic light : 60.74821352958679 person : 88.47966194152832 backpack : 87.8473162651062 handbag : 58.078956604003906 umbrella : 62.925803661346436 car : 82.95613527297974 person : 62.71200180053711 person : 75.42724013328552 person : 88.47867250442505 person : 94.76819634437561
สรุป จากผลลัพธ์ที่ได้
AI จะตรวจจับได้หลายสิ่ง ทั้งคน รถ กระเป๋า ไฟจราจร ร่ม ก็ทำได้
หรือจะพัฒนาต่อไปให้ตรวจับคนในรูปว่าเป็นใคร?
อย่างหลังจะเกินขอบเขตที่โค้ดทำได้
ต้องใช้อัลกอริทึมอื่นประกอบ
เช่น DeepFace ของเฟสบุ๊ค ที่ใช้ระบุตัวคนบนรูปภาพได้
ขอให้โชคดีครับ กับโลกยุค AI
เรียนรู้ไว้ไม่เสียหาย เพราะเราคงปฏิเสธมันไม่ได้
ยิ่ง AI มีเขียนไว้ในยุทธศาสตร์ 20 ปี ของบ้านเรา เชียวน๊า
เครดิต
- รูป ละครเลือดข้นคนจางขอบคุณ
- บทความต้นฉบับ https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606
- ขอบคุณไลบรารี่ ImageAI https://github.com/OlafenwaMoses/ImageAI
ความคิดเห็น
แสดงความคิดเห็น