① 简单的手部追踪
我这里做了一点点变换: 要求五个手指都张开才去追踪手部

代码展示
# -*- coding: utf-8 -*-
# coding=utf-8
# coding: utf-8
from cvzone.HandTrackingModule import HandDetector
import cvzone
import cv2
import time
import sys
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
cap.set(3, 1280)
cap.set(4, 720)
pTime = 0
detector = HandDetector()
bbox = []
while True:
success, img = cap.read()
img = cv2.flip(img, 1)
cTime = time.time()
fps = 1 / (cTime - pTime)
pTime = cTime
cv2.putText(img, f'FPS: {int(fps)}', (40, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3)
if success:
# Find the hand and its landmarks
# allHands, img = detector.findHands(img, draw=True)
allHands = detector.findHands(img, draw=False)
# print(allHands['myHand']['center'])
# print(type(allHands))
# print(allHands)
if allHands:
# print(type(allHands[0]))
myHand = allHands[0]
fingers = detector.fingersUp(myHand)
# print(fingers)
# print(list(allHands[0].values())[1])
if list(allHands[0].values())[1]:
if fingers == [1, 1, 1, 1, 1]:
bbox = list(allHands[0].values())[1]
# print(bbox)
# next(iter(d.values()))
# if allHands.myHand.bbox:
# # Draw Corner Rectangle
if bbox:
cvzone.cornerRect(img, bbox)
cv2.imshow("Image", img)
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()
sys.exit()
② 简单面部识别
我这里做了简单变换 面部追踪及其网格(MESH)
人脸我就不放出来了 我自己测试用的是一个名人的人脸 不方便
请注意:
不方便实测人脸 我这里用的是视频文件
需要用摄像头玩一玩的同学可以修改cv2.VideoCapture
代码展示
# -*- coding: utf-8 -*-
# coding=utf-8
# coding: utf-8
from cvzone.FaceDetectionModule import FaceDetector
from cvzone.FaceMeshModule import FaceMeshDetector
import cv2
import time
import sys
import cvzone
import copy
# cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
cap = cv2.VideoCapture('../face.mp4')
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
cap.set(3, 1280)
cap.set(4, 720)
pTime = 0
detector = FaceDetector()
detector2 = FaceMeshDetector(maxFaces=1)
while True:
success, img = cap.read()
img1 = copy.copy(img)
img2 = copy.copy(img)
# img = cv2.flip(img, 1)
cTime = time.time()
fps = 1 / (cTime - pTime)
pTime = cTime
cv2.putText(img, f'FPS: {int(fps)}', (40, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3)
if success:
img1, bboxs = detector.findFaces(img1)
img2, faces = detector2.findFaceMesh(img2)
if bboxs:
# bboxInfo - "id","bbox","score","center"
center = bboxs[0]["center"]
cv2.circle(img1, center, 5, (255, 0, 255), cv2.FILLED)
# if faces:
# print(faces[0])
else:
break
imgList = [img1, img2]
stackedImg = cvzone.stackImages(imgList, 2, 1)
# cv2.imshow("Image", img)
cv2.imshow("stackedImg", stackedImg)
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()
sys.exit()
③ 简单的肢体动作检测

请注意:
不方便实测人脸 我这里用的是视频文件
需要用摄像头玩一玩的同学可以修改cv2.VideoCapture
代码展示
# -*- coding: utf-8 -*-
# coding=utf-8
# coding: utf-8
from cvzone.PoseModule import PoseDetector
import cv2
import time
import sys
# cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
cap = cv2.VideoCapture('../body.mp4')
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
cap.set(3, 1280)
cap.set(4, 720)
pTime = 0
detector = PoseDetector()
while True:
success, img = cap.read()
# img = cv2.flip(img, 1)
cTime = time.time()
fps = 1 / (cTime - pTime)
pTime = cTime
cv2.putText(img, f'FPS: {int(fps)}', (40, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3)
if success:
img = detector.findPose(img)
lmList, bboxInfo = detector.findPosition(img, bboxWithHands=False)
if bboxInfo:
center = bboxInfo["center"]
cv2.circle(img, center, 5, (255, 0, 255), cv2.FILLED)
else:
break
cv2.imshow("Image", img)
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()
sys.exit()
这些代码在GitHub上的CVzone也有 不过我做了属于自己的改动 要求有一定的英语水平
在 油管 上也有相应的教程 要求有一定的英语水平
704

被折叠的 条评论
为什么被折叠?



