前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

opencv+

作者头像
用户10922923
发布2024-01-23 09:38:03
1150
发布2024-01-23 09:38:03
举报
文章被收录于专栏:兵马俑的CSDN兵马俑的CSDN

一、下载模块/库

pip install +扩展库;opencv-python和mediapipe

Mediapipe是Google开发的一种跨平台框架,用于构建实时音频、视频和多媒体数据处理应用程序。它提供了一系列预构建的机器学习和计算机视觉模型,可用于实现诸如姿势识别、人脸检测、手势识别、目标追踪等应用。Mediapipe的主要特点是高效、可扩展和跨平台,它支持多种操作系统(包括Android、iOS和桌面操作系统)和多种编程语言(包括C ++、Python和Java)。

使用Mediapipe,开发者可以利用其强大的计算图模型和各种预构建的模块,快速构建和部署音视频处理应用程序。通过配置和连接模块,开发者可以构建自定义数据处理流程,实现各种功能。Mediapipe还提供了丰富的工具和库,用于模型训练、性能优化和应用程序调试等方面的支持。

总之,Mediapipe是一个强大的多媒体处理框架,可以用于构建实时音视频处理应用程序和机器学习模型。它的跨平台特性使得开发者可以轻松地将应用程序部署到不同的设备和操作系统上。

二、实现原理

Mediapipe(BlazePlam)

两个模型组成:1)手掌检测器,它提供手的边界框,2)手部地标模型,它预测手骨架。

所以我们要做的就是两步骤,那么就让我们依赖Mediapipe来实现手掌检测 的手部跟踪吧。

三、代码思路与实现

1、先写出调用实时摄像头的功能;这是基本的

代码语言:javascript
复制
import cv2
import mediapipe as mp

cap=cv2.VideoCapture(0)



while True:
    success,img=cap.read()

    cv2.imshow("Image",img)
    cv2.waitKey(1)

会调出你的摄像头;

2.然后定义变量来确定手掌的位置,然后把图要转化成RGB,opencv里面是BGR的图片

再用result.multi_hand_landmarks来看摄像头能不能步骤到我们的手,不能就None,能就显示坐标;

代码语言:javascript
复制
import cv2
import mediapipe as mp

cap=cv2.VideoCapture(0)

mpHands=mp.solutions.hands  #  坐标  
hands=mpHands.Hands()


while True:
    success,img=cap.read()
    imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    result=hands.process(imgRGB)
    print(result.multi_hand_landmarks)





    cv2.imshow("Image",img)
    cv2.waitKey(1)

3.用变量 mpDraw =mp.solutions.drawing_utils  画点动标的动作,并对手画21个点(0~20)且连接他们;

代码语言:javascript
复制
import cv2
import mediapipe as mp

cap=cv2.VideoCapture(0)

mpHands=mp.solutions.hands  #  坐标  
hands=mpHands.Hands()
mpDraw =mp.solutions.drawing_utils  #画点动标的动作

while True:
    success,img=cap.read()
    imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    result=hands.process(imgRGB)
    # print(result.multi_hand_landmarks)

    if result.multi_hand_landmarks:
            for handLms in result.multi_hand_landmarks:
                mpDraw.draw_landmarks(img,handLms,mpHands.HAND_CONNECTIONS)




    cv2.imshow("Image",img)
    cv2.waitKey(1)

4.上一步我们知道坐标,但是是小数,我们要给它乘上长宽高,并定义为整数,用handLmsStyle,handConStyle把点线变粗;且给把(0~20)的点标记上,并用circle把一个点标记上,最后给屏幕装上当前的时间,Fps帧率,

代码语言:javascript
复制
import cv2
import mediapipe as mp
import time #一秒钟几次画面
cap=cv2.VideoCapture(0)

mpHands=mp.solutions.hands  #  坐标  
hands=mpHands.Hands() 

mpDraw =mp.solutions.drawing_utils  #画点动标的动作
# 改变点线样式
handLmsStyle=mpDraw.DrawingSpec(color=(0,0,255),thickness=5)
handConStyle=mpDraw.DrawingSpec(color=(0,255,0),thickness=10)

pTime=0
cTime=0
while True:
    ret,img = cap.read()
    if ret:
        # 要转化成RGB,opencv里面是BGR的图片
        imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
        result=hands.process(imgRGB)
        # print(result.multi_hand_landmarks)

        imgHeight =img.shape[0]
        imgWidth =img.shape[1]

        if result.multi_hand_landmarks:
            for handLms in result.multi_hand_landmarks:
                mpDraw.draw_landmarks(img,handLms,mpHands.HAND_CONNECTIONS,handLmsStyle,handConStyle)
                for i,lm in enumerate(handLms.landmark):
                    xPos =int(lm.x*imgWidth)
                    yPos= int(lm.y*imgHeight)
                    # 标点0~20
                    cv2.putText(img,str(i),(xPos-25,yPos+5),cv2.FONT_HERSHEY_SIMPLEX,0.4,(0,0,255),2)
                    if i ==4:
                        cv2.circle(img,(xPos,yPos),20,(166,56,56),cv2.FILLED)
                    
                    print(i ,xPos,yPos)
        cTime=time.time()
        fps=1/(cTime-pTime)
        pTime =cTime
        # 显示屏幕上
        cv2.putText(img, f"FPS: {int(fps)}", (30, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3)
        
        
        
        cv2.imshow('img',img)
        if cv2.waitKey(1)==ord('q'):
            break
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、下载模块/库
  • 二、实现原理
  • 三、代码思路与实现
相关产品与服务
媒体处理
媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档