OpenCV之CVzone体验卡

① 简单的手部追踪

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

 代码展示

# -*- 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也有 不过我做了属于自己的改动 要求有一定的英语水平

在 油管 上也有相应的教程 要求有一定的英语水平

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CCSBRIDGE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值