还是和之前的树莓派小项目一样,这是个小扩展,前阵子是想找一个小伙伴来一起学习opencv的,一个人在尝试性探索是非常无趣的,手上想跑的项目和想学的东西也很多一时间让我有了茫然感,找一个小伙伴会让很多事情有所改变,不过很可惜,小伙伴思考过后拒绝了。本人并非大佬,我要走的路还很长,在真正的技术这一块来说我是底子很薄的。
实验准备
一个没人玩的树莓派4b4g版,一个usb摄像头,一张内存卡32g及以上,一块不知道哪里掏出来的屏幕(也可以使用vnc)
注释:树莓派在这里的性能可能无法达到预期效果,如果个位大佬感兴趣可以去试试因伟达的Jetson系列,那个nx板卡的性能能保证我们的实验效果,当然价格也是很感人。
安装mediapipe
简单说一下mediapipe由 Google Research 开发并开源的多媒体机器学习模型应用框架,支持人体姿态检测、人脸识别等。(不过好像这个东西会触及树莓派的性能瓶颈,本人没有去深度研究,或者说在研究阶段)
安装:
pip3 install mediapipe -i https://pypi.tuna.tsinghua.edu.cn/simple
下载完成后我们去导入我们的头文件输入:
python
import mediapipe
我们来查看他的版本:
mediapipe.__version__
查看他的路径:
mediapipe.__file__
退出:
quit()
手势识别
和我的第一期树莓派项目一样,我们利用ssh工具连接我们的windows和树莓派,在终端中输入:
vim hand_detector.py
import cv2
import mediapipe as mp
import time
cap = cv2.VideoCapture( 0 )
mpHands = mp.solutions.hands
hands = mpHands.Hands()
mpDraw = mp.solutions.drawing_utils
pTime = 0
cTime = 0
while True:
success, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = hands.process(gray)
print(results.multi_hand_landmarks)
if results.multi_hand_landmarks:
for handLms in results.multi_hand_landmarks:
mpDraw.draw_landmarks(frame, handLms, mpHands.HAND_CONNECTIONS)
cTime = time.time()
fps = 1/(cTime-pTime)
pTime = cTime
cv2.putText(frame, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN,3, (255, 0, 255), 3)
cv2.imshow("gray",gray)
cv2.imshow("frame", frame)
cv2.waitKey(1)
这里建议使用灰度图,否则树莓派只显示几帧鸡爪图(jetson用户可忽略这一点):