Mediapipe 物体侦测
这篇教学会使用 MediaPipe 的物体侦测模型 ( Objectron ) 侦测特定的物体,再透过 OpenCV 读取摄影镜头图像进行辨识,使用 3D 的立方体形状匡出侦测到的物体。
因为程序使用 Jupyter 搭配 Tensorflow 进行开发,所以请先阅读“使用 Anaconda”和“使用 MediaPipe”,安装对应的软件包,如果不要使用 Juputer,也可参考“使用 Python 虚拟环境”,建立虚拟环境进行实作。
使用 MediaPipe,侦测物体
Mediapipe Objectron 模型可以透过 3D 立方体标记侦测到的“特定物体”,并进一步标记出所侦测到物体的 3D 大小,3D 空间并非真正的立体空间,而是透过“2D 边界”搭配“深度学习”所计算得出 ( 图片来源 )。
目前 Mediapipe Objectron 可以侦测 Cup ( 马克杯 )、Shoe ( 鞋子 )、Camera ( 单反相机 ) 和 Chair ( 椅子 ) 四种物体,未来会陆续提供更多可侦测的物体 ( 详细参考:Objectron Dataset )
下方的程序码延伸“读取并播放影片”文章的范例,搭配 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()
微信扫码关注
抖音扫码关注