WHY
前一阵子开始接触手势识别,觉得现在的库是真强大,13行代码就调出了手势识别,那手势识别出来后,可以做什么呢?今天,我又跟着印度小哥玩了一把隔空移物。
WHAT
什么事隔空移物呢?就是利用手指间的距离,控制图片的位置。当食指和中指并拢且在图片里面时,就更新图片的坐标(跟着食指走),所以看起来就好像被手指拖着移动了。道理很简单,我从网上找了一个透明底的苹果图片,作为素材。
HOW
要点
我用的苹果电脑,所以在读取图片路径的时候费了老大劲儿。目前只有绝对路径可以读取到,其他写法全部失败。 然后为了跟视频尺寸匹配,用了openCV的resize方法改写了图片的原始大小。
代码
from math import fabs
import cv2
import cvzone
from cvzone.HandTrackingModule import HandDetector
path = '/Users/sean/Downloads/piclib/apple1.png'
imgApple = cv2.imread(path, cv2.IMREAD_UNCHANGED)
widthApple, heightApple = 200, 196
apple = cv2.resize(imgApple, (widthApple, heightApple), interpolation=cv2.INTER_AREA)
<参见上篇文章>
ox, oy = 50, 30
while True:
success, img = cap.read()
img = cv2.flip(img, 1)
hands, img = detector.findHands(img, flipType=False)
if hands:
lmList = hands[0]['lmList']
length, info, img = detector.findDistance(lmList[8], lmList[12], img)
if length < 40:
cursor = lmList[8]
if ox < cursor[0] < ox + widthApple and oy < cursor[1] < oy + heightApple:
ox, oy = cursor[0] - widthApple // 2, cursor[1] - heightApple // 2
img = cvzone.overlayPNG(img, apple, [ox, oy])
cv2.imshow('Hands', img)
cv2.waitKey(1)
下一步
尝试加载一个框和多个苹果,类似于摘苹果。需要用到面向对象的概念。
|