บทเรียนนี้จะเป็นการสอนเทคนิคการทำ Object Detection การตรวจจับวัตถุด้วย Code 10 บรรทัดโดยใช้ Python และ Tensorflow เพื่อค้นหาว่ามีวัตถุใดบ้างในภาพ
บทเรียนก่อนหน้านี้:
- การประมวลผลรู้จำใบหน้า Face Recognition ด้วย Python
- Face Recognition เปรียบเทียบข้อมูลใบหน้าแบบ Real-Time ด้วย Python และ OpenCV
- Python กับ OpenCV ดึงฐานข้อมูล Face Recognition ผ่านระบบ Firebase
คือเราจะรู้แล้วว่า เราจำเป็นต้องใช้ OpenCV ในการช่วยสำหรับการตรวจจับผ่านกล้องเป็นหลัก คราวนี้เราจะลองทำ AI ผ่าน Tensorflow ของ Google มาช่วยในการรู้ว่าไอ้สิ่งของเหล่านี้คืออะไร เป็นหลักการต้นๆ ของการทำ Machine Learning
แน่นอนขึ้นชื่อว่าเป็น Series นี้จำต้องติดตั้ง Library เสริมหน่อยเพื่อการทำงานที่ง่าย และรวดเร็ว ดังนั้นเราต้องติดตั้ง cvlib ก่อน (https://pypi.org/project/cvlib/)
$ sudo pip3 install cvlib
ต่อมาคือ matplotlib เป็น Module หนึ่งที่ช่วยในการพลอตกราฟเส้นที่เร็วในภาษา Python และกราฟเส้นที่วาดขึ้นอาศัยการประมวลผลจากโมดูล NumPy ในบทนี้เราใช้ matplotlib ในการส่งค่ากราฟวิเคราะห์สื่อ และภาพที่ใช้ ซึ่งเจ้า Library ตัวนี้คนที่เคยใช้ MATLAB จะคุ้นหน้าตามาก เพราะใช้ใส่ Label ในกราฟนั่นเองครับ
$ sudo pip3 install matplotlib
ตัวสุดท้ายเรารู้จักกันอยู่แล้ว Machine Learning ของ Google ใช้งานง่ายนั่นคือ TensorFlow บทเรียนก่อนหน้านี้:
สร้าง Machine Learning ด้วย TensorFlow และ Unity ทำ Object Detection
ติดตั้ง TensorFlow เสีย:
$ sudo pip3 install tensorflow
ประกาศ Library ส่วน Header ดังนี้:
import cv2 import matplotlib.pyplot as plt import cvlib as _cvlib
เรียกคำสั่งรูปภาพใน Folder เดียวกับ Source Code ของเรา
from cvlib.object_detection import draw_bbox image = cv2.imread('car.jpg') recbox, label, configuration = _cvlib.detect_common_objects(image) output_image = draw_bbox(image, recbox, label, configuration) plt.imshow(output_image) plt.show()
ไฟล์ objdetect.py ของผมจะเป็นดังนี้:
import cv2 import matplotlib.pyplot as plt import cvlib as _cvlib from cvlib.object_detection import draw_bbox image = cv2.imread('car.jpg') recbox, label, configuration = _cvlib.detect_common_objects(image) output_image = draw_bbox(image, recbox, label, configuration) plt.imshow(output_image) plt.show()
ทีนี้เราลองมากด Run ดูหน่อยผ่าน Visual Studio Code มันจะดาวน์โหลด YOLO: Real-Time Object Detection ซึ่งเป็น Real-time Object Detection ที่ขึ้นชื่อว่าเร็วที่สุด (ความแม่นยำบางตัวก็ไม่
แม่นนะ แต่เน้นเร็ว, บางตัวช้า แต่ก็แม่นมาก คือเราต้องไปหาดูเอง เลือกใช้เองในเว็บเค้า, https://pjreddie.com/darknet/yolo/)
ทดสอบหลายๆภาพ อย่างภาพแรกของผมคือ ภาพตัวเองมันจะประมวลผลภาพผ่าน matplotlib ให้สวยๆ แบบนี้:
ถ้าภาพ car.jpg
ระบบจะมีการไปเรียก TensorFlow Backend ในการตรวจจับและจำแนก แล้วส่งกลับมา Plot Graph และ Label ผ่าน matplotlib ให้เรานั่นเอง
ตัวอย่างง่ายๆ ลองทำดูครับ
One Comment