อีกหนึ่งงานด้านภาพที่นิยมนำ Machine Learning มาใช้ก็คือ Object Detection ซึ่งเป็นการตรวจจับการมีอยู่และตำแหน่งของวัตถุหลากหลายชนิดทั้งคน สัตว์ สิ่งของ สถานที่ และอีกมากมาย ขึ้นกับข้อมูลที่ใช้เทรนว่าต้องการตรวจจับอะไรบ้าง สำหรับในบทความนี้เราจะมาลองใช้ MediaPipe เพื่อตรวจจับวัตถุที่ถ่ายด้วยกล้องเว็บแคมแบบเรียลไทม์กันครับ
บทความนี้เป็นบทความในชุด “ตรวจจับสารพัดสิ่งด้วย MediaPipe” ชุดบทความที่จะชวนท่านผู้อ่านมาลองใช้งาน Machine Learning บนเครื่องคอมพิวเตอร์ของเราเองเพื่อตรวจจับสารพัดสิ่ง เช่น มือ คน สัตว์ สิ่งของ ไปจนถึงอิริยาบถของเรา บทความชุดนี้ประกอบไปด้วย
แต่ละบทความจะเป็นบทความสั้น ๆ พร้อม Code ที่ทาง EPT ปรับให้ง่ายที่สุดเพื่อให้ทุกคนนำไปใช้ได้เลยแม้จะไม่มีพื้นฐาน Python มาก่อน (แต่ต้องมีพื้นฐานการใช้งานคอมพิวเตอร์อยู่สักหน่อยนะครับ)
สำหรับใครที่ต้องการเรียนรู้เกี่ยวกับการเขียน การสร้าง AI โดยละเอียดเรียนเชิญได้ที่ Course AI701 แต่ถ้าท่านยังไม่มีพื้นฐานการเขียนโปรแกรมเลยสามารถลงเรียน คอร์ส Python + Web Programming + Machine Learning (PY203) ได้ ซึ่งจะพาท่านไปเริ่มเรียนเขียนโปรแกรมตั้งแต่รู้จักเลขฐาน 2 รู้ว่าคอมพิวเตอร์เครื่องแรกของโลกทำงานอย่างไร เรียนภาษาเขียนโปรแกรม Python เรียนการเขียน Web HTML CSS JavaScript AJAX jQuery Bootstrap และอื่น ๆ อีกมากมาย จนไปจบที่ AI เนื้อหาอัดแน่นกว่า 200 ชั่วโมง และมีคอร์สแถมยิบย่อยตามฤดูกาลอีก เรียกได้ว่าคุ้มสุด จากไม่รู้อะไรจะเปลี่ยนมาทำงานด้าน Programmer เลยก็ยังได้ หรือจากไม่รู้อะไรจะเปลี่ยนสายมาทำ Data science ก็ยังชิล ๆ
เทคโนโลยีการตรวจจับวัตถุนั้นสามารถนำไปประยุกต์ใช้ได้ในหลายอุตสาหกรรม ซึ่งนอกจากจะช่วยลดการใช้แรงงานมนุษย์ ทำให้ผู้ประกอบการประหยัดค่าใช้จ่ายได้แล้ว AI ยังมีความแม่นยำกว่ามนุษย์ในหลาย ๆ งานอีกด้วย ในบทความนี้จะขอยกตัวอย่างใกล้ตัวที่เห็นภาพได้ง่ายสักสามตัวอย่างครับ
ใช้ AI นับจำนวนคน
ลองนึกภาพถ้ามีฝูงชนในพื้นที่ขนาดใหญ่ที่มีการเปลี่ยนแปลงได้ตลอดเวลา แล้วเราเป็นผู้รับผิดชอบงานที่ต้องควบคุมสถานที่นั้น ๆ การรู้จำนวนคนในขณะนั้นย่อมจะมีประโยชน์มาก แต่การจะจ้างคนมานั่งนับนั้นเป็นไปได้ยากที่จะรู้จำนวนคนที่อยู่ในฝูงชนอย่างแน่นอน นอกจากต้องเสียค่าใช้จ่ายในการจ้างคนหลายคนมานั่งนับทั้งวันแล้วยังมีโอกาสเกิดข้อผิดพลาดได้มากกว่า AI ด้วย
ใช้ AI วิเคราะห์โรค
ทุกวันนี้การจะวิเคราะห์ว่าผู้ป่วยเป็นโรคอะไรหรือไม่จากภาพถ่ายหรือภาพเอ็กซเรย์นั้นจะต้องใช้แพทย์เป็นผู้ดูและตัดสินซึ่งเป็นงานที่ใช้เวลา และแน่นอนว่าจำนวนแพทย์ทั่วโลกไม่ได้เพียงพอกับจำนวนผู้ป่วยเลย ดังนั้นการนำ AI เข้ามาช่วยวิเคราะห์จะทำให้แพทย์ทำงานได้เร็วขึ้นและช่วยให้คุณดูแลผู้ป่วยได้ดียิ่งขึ้น รวมไปถึงสามารถช่วยปรับปรุงยาและขั้นตอนการรักษาได้ทันท่วงทีอีกด้วย
รถอัตโนมัติ
รถอัตโนมัติ หรือ Self-driving cars เป็นอีกสิ่งที่จะขาดเทคโนโลยีการตรวจจับวัตถุไปไม่ได้เลย และต่อให้ยังไม่ถึงขั้นไร้คนขับ ปัจจุบันนี้ผู้ผลิตรถหลาย ๆ เจ้าก็ได้เพิ่มฟังก์ชันช่วยในการขับและเสริมความปลอดภัยของคนขับ เช่น แจ้งให้ทราบเมื่อมีคนเดินข้ามทางม้าลาย เตือนเมื่อมีรถคันอื่นอยู่ใกล้เคียง หรือเบรกกะทันหันเมื่อมีอะไรตัดหน้า เป็นต้น
สิ่งที่จำเป็นต้องติดตั้งในคอมพิวเตอร์ ได้แก่
สามารถดูวิธีติดตั้งได้จากบทความ AI105 - Hand Landmarks Detection Using MediaPipe
ข้อควรระวัง
Code ที่ใช้ในบทความนี้ได้รับการทดสอบบนเครื่อง Windows 10 64-bit ที่ติดตั้ง Python และ Package ต่าง ๆ ตามเวอร์ชันที่กำหนดไว้ในบทความนี้ ดังนั้นหากผู้เรียนใช้อะไรบางอย่างคนละเวอร์ชันกับที่กำหนดไว้ก็จะมีโอกาสสูงที่จะรันแล้วเกิดข้อผิดพลาดบางประการ สำหรับ Package (ทั้งที่ใช้และไม่ใช้) ทั้งหมดที่มีในเครื่องคอมพิวเตอร์ที่ใช้ทดสอบจะสรุปให้ดูที่ท้ายบทความ*
1. เปิดโปรแกรม Python IDE ขึ้นมาแล้วเขียน code ดังต่อไปนี้
# STEP 1: Import libraries and set the initial value for a variable.
import numpy as np
import mediapipe as mp
import cv2
import os
print(os.getcwd())
MARGIN = 10 # pixels
ROW_SIZE = 10 # pixels
FONT_SIZE = 1
FONT_THICKNESS = 1
TEXT_COLOR = (255, 0, 0) # red
def visualize(
image,
detection_result
) -> np.ndarray:
"""Draws bounding boxes on the input image and return it.
Args:
image: The input RGB image.
detection_result: The list of all "Detection" entities to be visualize.
Returns:
Image with bounding boxes.
"""
for detection in detection_result.detections:
# Draw bounding_box
bbox = detection.bounding_box
start_point = bbox.origin_x, bbox.origin_y
end_point = bbox.origin_x + bbox.width, bbox.origin_y + bbox.height
cv2.rectangle(image, start_point, end_point, TEXT_COLOR, 3)
# Draw label and score
category = detection.categories[0]
category_name = category.category_name
probability = round(category.score, 2)
result_text = category_name + ' (' + str(probability) + ')'
text_location = (MARGIN + bbox.origin_x,
MARGIN + ROW_SIZE + bbox.origin_y)
cv2.putText(image, result_text, text_location, cv2.FONT_HERSHEY_PLAIN,
FONT_SIZE, TEXT_COLOR, FONT_THICKNESS)
return image
import numpy as np
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
# STEP 2: Create an ObjectDetector object.
base_options = python.BaseOptions(model_asset_path='efficientdet.tflite')
options = vision.ObjectDetectorOptions(base_options=base_options,
score_threshold=0.5)
detector = vision.ObjectDetector.create_from_options(options)
# STEP 3: Load the input image.
webcam = cv2.VideoCapture(0)
image = webcam.read()
mp_hands = mp.solutions.hands
hands = mp_hands.Hands()
mp_draw = mp.solutions.drawing_utils
while True:
success, image = webcam.read()
image_rgb = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
image = mp.Image(image_format=mp.ImageFormat.SRGB, data=image_rgb)
# STEP 4: Detect objects in the input image.
detection_result = detector.detect(image)
# STEP 5: Process the detection result. In this case, visualize it.
image_copy = np.copy(image.numpy_view())
annotated_image = visualize(image_copy, detection_result)
rgb_annotated_image = cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB)
cv2.imshow("Image",rgb_annotated_image)
k =cv2.waitKey(1)
if k == 27:
break
cv2.destroyAllWindows()
2. เมื่อสั่งรัน จะได้หน้าต่างสำหรับแสดงผลภาพจากกล้องเว็บแคมแบบเรียลไทม์พร้อมทั้งตรวจจับตำแหน่งของวัตถุต่าง ๆ ได้ดังภาพตัวอย่าง
เพียงเท่านี้เราก็จะได้โปรแกรมตรวจจับตำแหน่งของวัตถุจากกล้องเว็บแคมแบบเรียลไทม์ด้วย Python แล้ว นอกจากจะใช้งานเป็นโปรแกรมบนเครื่องได้แล้ว เรายังสามารถใช้ MediaPipe ทำแอปพลิเคชันสำหรับแอนดรอยด์ หรือใช้งานบนเว็บก็ได้ ใครสนใจสามารถดูตัวอย่างได้ที่นี่
สุดท้ายนี้สำหรับใครที่สนใจอยากทำ AI แต่ยังไม่มีพื้นฐานเขียนโปรแกรมมาก่อน ขอแนะนำคอร์ส Python + Web Programming + Machine Learning (PY203) ของทาง EPT ที่สอนแบบจัดเต็มตั้งแต่พื้นฐาน Python หรือหากมีพื้นฐาน Python แน่น ๆ อยู่แล้วแต่อยากเรียนเกี่ยวกับ AI แบบลงลึกถึงทฤษฎีก็ขอแนะนำคอร์ส Machine Learning (AI701) ครับ
ในบทความต่อไป เราจะมาใช้ MediaPipe เพื่อทำ Segment กันครับ
[1] https://developers.google.com/mediapipe
[2] https://developers.google.com/mediapipe/solutions/vision/object_detector
* เครื่องที่ใช้ทดสอบในบทความนี้เป็น Windows 10 64-bit และมี Package ต่าง ๆ ในเครื่องดังนี้
Package Version --------------------- -------- absl-py 1.4.0 asttokens 2.2.1 attrs 23.1.0 backcall 0.2.0 cffi 1.15.1 cloudpickle 2.2.1 colorama 0.4.6 comm 0.1.3 cycler 0.11.0 debugpy 1.6.7 decorator 5.1.1 executing 1.2.0 flatbuffers 23.5.26 fonttools 4.33.3 importlib-metadata 6.6.0 ipykernel 6.23.1 ipython 8.13.2 jedi 0.18.2 jupyter_client 8.2.0 jupyter_core 5.3.0 kiwisolver 1.4.2 matplotlib 3.5.2 matplotlib-inline 0.1.6 mediapipe 0.10.0 nest-asyncio 1.5.6 numpy 1.22.4 opencv-contrib-python 4.7.0.72 opencv-python 4.7.0.72 packaging 21.3 pandas 1.2.1 parso 0.8.3 pickleshare 0.7.5 Pillow 9.1.1 pip 23.1.2 platformdirs 3.5.1 prompt-toolkit 3.0.38 protobuf 3.20.3 psutil 5.9.5 pure-eval 0.2.2 pycparser 2.21 Pygments 2.15.1 pyparsing 3.0.9 python-dateutil 2.8.2 pytz 2022.2.1 pywin32 306 pyzmq 25.1.0 setuptools 56.0.0 six 1.16.0 sounddevice 0.4.6 spyder-kernels 2.4.3 stack-data 0.6.2 tornado 6.3.2 traitlets 5.9.0 typing_extensions 4.6.3 wcwidth 0.2.6 zipp 3.15.0 |
Tag ที่น่าสนใจ: ai106 object_detection mediapipe python machine_learning ai computer_vision hand_landmarks_detection image_segmentation pose_landmarks_detection opencv programming_tutorial tutorial artificial_intelligence
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM