iT邦幫忙

2022 iThome 鐵人賽

DAY 20
1

這篇教學會使用 MediaPipe 的物體偵測模型 ( Objectron ) 偵測特定的物體,再透過 OpenCV 讀取攝影鏡頭影像進行辨識,使用 3D 的立方體形狀匡出偵測到的物體。

原文參考:Mediapipe 物體偵測 ( Objectron )

因為程式使用 Jupyter 搭配 Tensorflow 進行開發,所以請先閱讀「使用 Anaconda」和「使用 MediaPipe」,安裝對應的套件,如果不要使用 Juputer,也可參考「使用 Python 虛擬環境」,建立虛擬環境進行實作。

Mediapipe 物體偵測 ( Objectron )

使用 MediaPipe,偵測物體

Mediapipe Objectron 模型可以透過 3D 立方體標記偵測到的「特定物體」,並進一步標記出所偵測到物體的 3D 大小,3D 空間並非真正的立體空間,而是透過「2D 邊界」搭配「深度學習」所計算得出 ( 圖片來源 )。

Python 教學 - 物體偵測 ( Objectron )

目前 Mediapipe Objectron 可以偵測 Cup ( 馬克杯 )、Shoe ( 鞋子 )、Camera ( 單眼相機 ) 和 Chair ( 椅子 ) 四種物體,未來會陸續提供更多可偵測的物體 ( 詳細參考:Objectron Dataset )

Python 教學 - 物體偵測 ( Objectron )

下方的程式碼延伸「讀取並播放影片」文章的範例,搭配 mediapipe 物體偵測的方法,透過攝影鏡頭獲取影像後,即時標記出腳上穿的鞋子。

import cv2
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils  # mediapipe 繪圖方法
mp_objectron = mp.solutions.objectron    # mediapipe 物體偵測

cap = cv2.VideoCapture(0)

# 啟用物體偵測,偵測鞋子 Shoe
with mp_objectron.Objectron(static_image_mode=False,
                            max_num_objects=5,
                            min_detection_confidence=0.5,
                            min_tracking_confidence=0.99,
                            model_name='Shoe') as objectron:

    if not cap.isOpened():
        print("Cannot open camera")
        exit()
    while True:
        ret, img = cap.read()
        if not ret:
            print("Cannot receive frame")
            break
        img = cv2.resize(img,(520,300))               # 縮小尺寸,加快演算速度
        img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)   # 將 BGR 轉換成 RGB
        results = objectron.process(img2)             # 取得物體偵測結果
        # 標記所偵測到的物體
        if results.detected_objects:
            for detected_object in results.detected_objects:
                mp_drawing.draw_landmarks(
                  img, detected_object.landmarks_2d, mp_objectron.BOX_CONNECTIONS)
                mp_drawing.draw_axis(img, detected_object.rotation,
                                    detected_object.translation)

        cv2.imshow('oxxostudio', img)
        if cv2.waitKey(5) == ord('q'):
            break    # 按下 q 鍵停止
cap.release()
cv2.destroyAllWindows()

Python 教學 - 物體偵測 ( Objectron )

參考資料 {end}

更多 Python 教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 19 ) Mediapipe 全身偵測 ( Holistic )
下一篇
( Day 21 ) Mediapipe 人物去背 ( Selfie Segmentation )
系列文
Python x AI 影像辨識好好玩32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言