pyautogui图片识别,pyautogui识图不准

  pyautogui图片识别,pyautogui识图不准

  你好。今天给大家分享一下如何使用MediaPipe完成手部关键点的实时检测和跟踪。我们先用一张图来看看效果。15代表FPS值

  33558 www.Sina.com/# opencvpipipinstallopencv-contrib-python # mediapipipipinstallmediapipe # Pipipinstallmediapipe-pipe导入OpenCVIMPORTMEDIPIPE mportmediapipe是Google Research开发的开源多媒体机器学习模型APP框架。1. 导入工具包今天介绍手的关键点检测。在剩下的章节中,我们将讨论你感兴趣的问题。

  358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/Get把摄像机连接到你的电脑上,改变参数1。

  人脸识别,虹膜检测,体态跟踪等

  3358www.Sina.com/默认值2. 显示手部关键点及连线将输入图像视为视频流。检测初始输入图像中的手,检测成功后,进一步尝试确定手的坐标。在下图中,如果检测到max_num_hands的所有手,并且检测到相应手的坐标,则将跟踪这些坐标,而不调用另一个检测,直到丢失一只手的跟踪。这可以减少延迟,非常适合处理视频帧。如果设置为2.1 相关函数解释,将对每个输入图像执行手检测,以处理静止的、不相关的图像组。

  (1)最多能检测多少只手,cv2.VideoCapture(0)

  (2)手工检测模型的最小可靠值(0-1之间),超过阈值时检测成功。mediapipe.solutions.hands.Hands()

  参数:坐标跟踪模型的最小置信度值(在0和1之间)用于将手的坐标视为跟踪成功。如果失败,将在下一幅输入图像中自动调用手的检测。较高的值可以提高解的稳定性,但会增加延迟。如果static_image_mode为true,则该参数将被忽略,并将对每个图像执行手动检测。static_image_mode:

  False,

  True检测/跟踪的手的集合。每只手表示为21个界标的列表,每个界标由X、Y和z组成,010-5900Z表示界标的深度。

  max_num_hands:检测/跟踪的手是一组左手还是右手。每手由默认为2min_detection_confidence:组成。默认为 0.5

  358 www.Sina.com/http://www.Sina.com/Pull手动钥匙的连接

  min_tracking_confidence:

  默认为 0.5需要画的原图

  返回值:被检测手的关键点坐标

  MULTI_HAND_LANDMARKS:连接线,其坐标必须相连。

  x和y分别由图像的宽度和高度归一化为[0,1]坐标颜色,粗细

  MULTI_HANDEDNESS:厚度、颜色等。连接线的长度

  label(标签)

  score(分数)

  由于读入的视频图像通道一般是RGB,opencv中图像通道的格式是BGR,所以需要label是 Left 或 Right 值的字符串。 score 是预测左右手的估计概率。函数cv2.cvtColor()。每个关键点的将opencv读入的视频图像转为RGB格式存储在results中,通过xyz坐标读出。

  #(1)视频捕获cap=cv2。VideoCapture(0) # 0代表你的电脑自带的摄像头#(2)创建一个检测你的手的关键点的方法mpHands=mp.solutions.hands #接收方法hands=mpHands . hands(static _ image _ mode=false,#静态跟踪,如果置信度低于0.5,max _ num _ hands=2会被再次跟踪,# min_detection_confidence=0.5最多, #最小检测置信度min_tracking_confidence=0.5) #最小跟踪置信度#创建一个方法来检测手的关键点和它们之间的线MP draw=MP . solutions . drawing _ utils #查看时间pTime=0 #处理图像之前的时间cTime=0 #处理图像时的时间#(3)处理视频图像同时为真:#处理每一帧的视频图像#返回读取是否成功以及读取图像是否成功, img=cap.read() #在循环中向hands发送rgb图像,opencv中的图像默认为BGR格式,img RGB=cv2.cvtcolor (img,cv2.color _ bgr2rgb) #将图像传入检测模型,提取信息results=hands.process(imgRGB) #检查是否检测到了什么。 如果没有检测到手,返回none # print(results . multi _ hand _ landmarks)#。检查每个图像中是否有许多手,如果有结果,则逐个选择它们。multi _ hand _ landmarks: #如果没有手,则结果中手LMS为none。multi _ hand _ landmarks: #画出每手的关键点mpdraw.draw _ landmarks (img,hand LMS,MpHands。HAND_CONNECTIONS) #传入绘图板img,单只手的信息LMS # m hands。hand _ connections绘制手部关键点之间的连接#记录执行时间cTime=time.time() #计算fps fps=1/(cTime-pTime) #重置开始时间pTime=cTime #在窗口Img画板上显示fps;舍入的fps值;显示位置的坐标;设置字体;字体比例;颜色;Thickness cv2.puttext (img,str (int (fps)),(10,70),cv2.font _ hershey _ plain,3,(255,0,0),3)# display Image cv2 . imshow( Image ,img) # window name,image ESC键退出break # release video resource cap . release()cv2 . destructily windows()这里设置最甜的棉花糖识别2手。必要时可以用.multi_hand_landmarksresult分别处理左右手的坐标。

  .multi_handedness以上,我们从3. 编辑关键点坐标,更改显示图像得到results.multi_hand_landmarksxyz坐标是归一化后的,即某个像素位于图像的某个比例[0.5,0.5]。我们需要将其转换为比例坐标,比如[200,200]。像素坐标必须是整数。通过像素坐标。为了更清楚的展示重点,把重点画大一点,就图像宽度乘以比例即可得到像素长度以关键点的像素坐标为圆心画圆

  所以我们添加了上面的代码

  #(1)视频捕获cap=cv2。VideoCapture(0) # 0代表你的电脑自带的摄像头#(2)创建一个方法来检测你的手的关键点mpHands=mp.solutions.hands #接收方法hands=mpHands . hands(static _ image _ mode=false,#静态跟踪,如果置信度低于0.5,max _ num _ hands=2将再次被跟踪。#最多有2只手min_detection_confidence=0.5,#最小检测置信度min_tracking_confidence=0.5) #最小跟踪置信度#创建一个方法来检测手的关键点以及它们之间的直线。MP draw=MP . solutions . drawing _ utils #查看时间pTime=0 #处理一幅图像前的时间cTime=0 #处理一幅图像时的时间#存储坐标信息lmList=[]#(3)处理视频图像# file设置为True,True时处理每一帧视频图像:#返回读取是否成功以及读取图像是否成功,img=cap.read() #循环发送rgb图像到手,opencv中的图像默认为BGR格式,img RGB=cv2.cvtcolor (img,CVT将图像传入检测模型,提取信息results=hands.process(imgRGB) #。检查每个图像中是否有许多手。如果有结果就一个一个提取出来。Multi _ hand _ landmarks: #如果没有手,则结果中手LMS为none。Multi _ hand _ landmarks: #获取index的每个关键点的索引和坐标,In enumerate (handlms。landmark): # index 0代表手底部的中间部分,4代表手指键或指尖# print(index,lm) #输出21个手关键点的xyz坐标(0到1之间),是相对于图像的长宽比#只需用X和Y查找位置信息#将xy的比例坐标转换成像素坐标h,w,c=img.shape #存储图像长度\宽度\ 通道号#中心坐标(小数)分别必须转换成整数(像素坐标)cx,cy=int(lm.x * w),Int(lm.y * h) #比例坐标x乘以宽度像素坐标#打印并显示21个关键点的像素坐标print(index,cx,cy) #存储坐标信息lmList.append([index,cx,cy]) #在21个关键点上换一个圆,img画板,坐标(cx,cy),半径5,填蓝色cv2.circle (img,(cx cv2.filled) #绘制每只手的关键点mpdraw.draw _ landmarks (img,handlms,mphands.hand _ connections) #并传入你要绘制的画板img,单只手的信息mphands.hand _ connections绘制手的关键点之间的连接#记录执行时间cTime=time.time() #计算fps fps=1/(cTime-pTime) #重置开始时间pTime=cTime #在窗口上显示fps; Img画板;舍入的fps值;显示位置的坐标;设置字体;字体比例;颜色;Thickness cv2.puttext (img,str (int (fps)),(10,70),cv2.font _ hershey _ plain,3,(255,0,0),3)# display Image cv2 . im show( Image ,img) # window name,Image variable if cv2 . wait key(1)0x ff==27:#每一帧停留1ms后消失break#释放视频资源cap . release()cv2 . destructily windows()。结果如下,fps=19。每帧21个手部关键点的xy坐标打印在右下输出框中,并保存在列表中。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: