作为一名软件工程师,大多数时候觉得,我们是真正的魔术师,通过将来自不同来源的不同代码片段拼接在一起,使应用程序能够工作。
那时,我们可以浏览 Paul McWhorter 关于“MediaPipe”的视频教程。在人工智能方面,他是最好的老师之一。
对于那些不认识Paul 的人,这里是他频道的链接:https://www.youtube.com/c/mcwhorpj
媒体管道
MediaPipe 为直播和流媒体 (https://mediapipe.dev/) 提供开源跨平台、可定制的 ML 解决方案。
在上述视频中,他演示了如何使用“MediaPipe Hands”跟踪手部和手指的运动。它使用机器学习 (ML) 从单帧中推断出一只手的 21 个 3D 地标。
手地标(来源:https://google.github.io/mediapipe/solutions/hands.html)
想法
扩展这项工作,让圆形和矩形“神奇地”出现在屏幕上。准确地说,当双手出现在相机前时,食指尖周围会出现圆圈。把手拉近,圆圈互相接触,然后BINGO!合并成为一个圆圈。如果我们继续将手拉得更近,圆圈将变为矩形。
如果你觉得有趣,请继续阅读!
步骤
根据食指尖之间的距离绘制图形。
步骤是:
使用 MediaPipe 找到双手和所有手指。
获取双手食指尖(地标 8)的 x & y 坐标。
计算这两个指尖之间的欧几里得距离。
如果距离大于预设半径(r)的两倍,则以指尖为圆心,半径为r画圆。
如果距离在半径的两倍和要出现的矩形的预设值之间,绘制一个包围食指尖的圆圈。
如果距离小于矩形点,则以食指尖为对角线绘制一个矩形。
使用 OpenCV 绘制这些图形。
编码
该程序的主要库是 MediaPipe、OpenCV 和 NumPy。使用命令pip install
安装那些库。强烈建议使用虚拟环境。
完整的代码可以在这个 GitHub 页面上找到:
https://github.com/jazir/MediaPiPe-Magic-Figures
"""
A fun project to make circles & rectangle 'magically' appear on the screen
Platform: Windows 10
Python Version: 3.10+
Major libraries: MediaPipe, OpenCV, NumPy
"""
import cv2
import numpy as np
import math
# Camera settings
DEFAULT_CAM = 0 # Built-in camera
USB_CAM = 1 # External camera connected via USB port
CAM_SELECTED = DEFAULT_CAM
CAM_WI