สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Tutorial AI

AI001 The brief history of AI AI101 Jupyter Notebook on AWS AI102 Pandas Tutorials AI103 Animated Drawings AI104 Video to BVH AI105 Hand Landmarks Detection Using MediaPipe AI106 Object Detection Using MediaPipe AI107 Image Segmentation Using MediaPipe AI108 Pose Landmarks Detection Using MediaPipe

AI106 - Object Detection Using MediaPipe

ตรวจจับหมู หมา กา ไก่ แอปเปิล มะละกอ กล้วย ส้ม ด้วย Python ใน 5 STEPs

 

อีกหนึ่งงานด้านภาพที่นิยมนำ 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 ก็ยังชิล ๆ

 

Object Detection นำไปใช้ทำอะไรได้บ้าง?  

เทคโนโลยีการตรวจจับวัตถุนั้นสามารถนำไปประยุกต์ใช้ได้ในหลายอุตสาหกรรม ซึ่งนอกจากจะช่วยลดการใช้แรงงานมนุษย์ ทำให้ผู้ประกอบการประหยัดค่าใช้จ่ายได้แล้ว AI ยังมีความแม่นยำกว่ามนุษย์ในหลาย ๆ งานอีกด้วย ในบทความนี้จะขอยกตัวอย่างใกล้ตัวที่เห็นภาพได้ง่ายสักสามตัวอย่างครับ

ใช้ AI นับจำนวนคน

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

ใช้ AI วิเคราะห์โรค

ทุกวันนี้การจะวิเคราะห์ว่าผู้ป่วยเป็นโรคอะไรหรือไม่จากภาพถ่ายหรือภาพเอ็กซเรย์นั้นจะต้องใช้แพทย์เป็นผู้ดูและตัดสินซึ่งเป็นงานที่ใช้เวลา และแน่นอนว่าจำนวนแพทย์ทั่วโลกไม่ได้เพียงพอกับจำนวนผู้ป่วยเลย ดังนั้นการนำ AI เข้ามาช่วยวิเคราะห์จะทำให้แพทย์ทำงานได้เร็วขึ้นและช่วยให้คุณดูแลผู้ป่วยได้ดียิ่งขึ้น รวมไปถึงสามารถช่วยปรับปรุงยาและขั้นตอนการรักษาได้ทันท่วงทีอีกด้วย

รถอัตโนมัติ

รถอัตโนมัติ หรือ Self-driving cars เป็นอีกสิ่งที่จะขาดเทคโนโลยีการตรวจจับวัตถุไปไม่ได้เลย และต่อให้ยังไม่ถึงขั้นไร้คนขับ ปัจจุบันนี้ผู้ผลิตรถหลาย ๆ เจ้าก็ได้เพิ่มฟังก์ชันช่วยในการขับและเสริมความปลอดภัยของคนขับ เช่น แจ้งให้ทราบเมื่อมีคนเดินข้ามทางม้าลาย เตือนเมื่อมีรถคันอื่นอยู่ใกล้เคียง หรือเบรกกะทันหันเมื่อมีอะไรตัดหน้า เป็นต้น

 

เตรียมตัวก่อนเริ่มทำ

สิ่งที่จำเป็นต้องติดตั้งในคอมพิวเตอร์ ได้แก่

  • Python เวอร์ชัน 3.9.5
  • OpenCV สำหรับ Python เวอร์ชัน 4.7.0.72
  • MediaPipe เวอร์ชัน 0.10.0

สามารถดูวิธีติดตั้งได้จากบทความ AI105 - Hand Landmarks Detection Using MediaPipe

 

ข้อควรระวัง

Code ที่ใช้ในบทความนี้ได้รับการทดสอบบนเครื่อง Windows 10 64-bit ที่ติดตั้ง Python และ Package ต่าง ๆ ตามเวอร์ชันที่กำหนดไว้ในบทความนี้ ดังนั้นหากผู้เรียนใช้อะไรบางอย่างคนละเวอร์ชันกับที่กำหนดไว้ก็จะมีโอกาสสูงที่จะรันแล้วเกิดข้อผิดพลาดบางประการ สำหรับ Package (ทั้งที่ใช้และไม่ใช้) ทั้งหมดที่มีในเครื่องคอมพิวเตอร์ที่ใช้ทดสอบจะสรุปให้ดูที่ท้ายบทความ* 

 

เขียน Code กันเลย

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

 



บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

C Article


C++ Article


Java Article


C#.NET Article


VB.NET Article


Python Article


Golang Article


JavaScript Article


Perl Article


Lua Article


Rust Article


Article


Python


Python Numpy


Python Machine Learning



แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา