使用 Mediapipe ( 旧 )
MediaPipe 是 Google Research 所开发的多媒体机器学习模型应用框架,透过 MediaPipe,可以简单地实现手部追踪、人脸检测或物体检测等功能,这篇教学将会介绍如何使用 MediaPipe。
MidoaPipe 在 2023 年进行了比较大的改版和更新,虽然旧版的程序“可能”还可以运行,但建议使用新版,参考:使用 MediaPipe ( 2023 年版 )。
快速导览:
MediaPipe 是什么?
MediaPipe 是 Google Research 所开发的多媒体机器学习模型应用框架,支援 JavaScript、Python、C++ 等程序语言,可以运行在嵌入式平台 ( 例如树莓派等 )、移动设备 ( iOS 或 Android ) 或后端服务器,目前如 YouTube、Google Lens、Google Home 和 Nest...等,都已和 MediaPipe 深度整合。
前往 Mediapipe:https://google.github.io/mediapipe/
如果使用 Python 语言进行开发,MediaPipe 支援下列几种辨识功能:
建立虚拟环境 ( 针对 Anaconda Jupyter )
Jupyter 本身是一个 Python 的编辑环境,如果直接安装 mediapipe 可能会导致运作时互相冲突,因此需要先安装 mediapipe 的虚拟环境,在上面安装 mediapipe 后就能正常运行,首先建立一个文件夹 ( 范例建立一个名为 mediapipe 的文件夹 ),如果是 Windows 输入 cmd 打开“命令提示字元视窗”( Windows 输入 cmd ),Mac 打开终端机,输入命令前往该文件夹 ( 通常命令是 cd 文件夹路径 )。
如果是本机 Python 环境,可直接略过这个步骤 ( 本机环境建议参考“使用 Python 虚拟环境”以虚拟环境进行安装 )。
进入文件夹的路径后,输入下列命令建立 mediapipe 虚拟环境 ( 下方的 mediapipe 为虚拟环境的名称,后方 python=3.9 是要使用 python 3.9 版本 )。
conda create --name mediapipe python=3.9
建立环境会需要下载一些对应的软件包,按下 y 就可以开始下载安装,出现 done 就表示虚拟环境安装完成。
输入下列命令,就能打开并进入 mediapipe 虚拟环境,这时在命令列前方会出现 mediapipe 的提示 ( 输入指令 conda deactivate 可以关闭当前虚拟环境 )。
conda activate mediapipe
在虚拟环境中安装 Jupyter
进入虚拟环境后,输入下列指令,在虚拟环境中安装 Jupyter,经过自动安装一系列软件包的过程后,出现 done 表示成功安装。
conda install jupyter notebook
安装 mediapipe、tensorflow、opencv
输入下方指令,安装 mediapipe。
如果是使用本机 Python 环境开发,建议参考“使用 Python 虚拟环境”以虚拟环境进行安装,并先使用命令
python -m pip install --upgrade pip将 pip 升级,避免读取 mediapipe 模组时发生找不到模组的错误 ( no module named 'mediapipe' )。
pip install mediapipe
输入下方指令,安装 tensorflow。
pip install tensorflow
输入下方指令,安装 opencv。
pip install opencv-python
启动 Jupyter 开发环境
打开 Anaconda,选择切换到 mediapipe 的环境 ( 就是刚刚建立的 mediapipe 虚拟环境 )。
切换环境后,打开 mediapipe 环境下的 Jupyter,启动能开发 mediapipe 的环境。
测试 Mediapipe
新增一个 Jupyter 的专案,输入下方的程序码,执行后如果没有问题,就可以从摄影机即时侦测人脸。
import cv2
import mediapipe as mp
cap = cv2.VideoCapture(0)
mp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utils
with mp_face_detection.FaceDetection(
model_selection=0, min_detection_confidence=0.5) as face_detection:
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
ret, img = cap.read()
if not ret:
print("Cannot receive frame")
break
img.flags.writeable = False
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
results = face_detection.process(img)
img.flags.writeable = True
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
if results.detections:
print(len(results.detections))
for detection in results.detections:
mp_drawing.draw_detection(img, detection)
cv2.imshow('oxxostudio', img)
if cv2.waitKey(1) == ord('q'):
break # 按下 q 鍵停止
cap.release()
cv2.destroyAllWindows()
微信扫码关注
抖音扫码关注