这段代码定义了一个名为 gestureRecognition 的函数,它用于识别手势并显示在摄像头或指定图像上。以下是对代码的详细注释:
1. 初始化一个空字符串 ges,用于存储手势结果。如果 self.hand 未定义,则将其设置为 hands(0,2,0.6,0.5),这是一个表示手势检测参数的元组。
2. 根据 target 参数的值判断是使用摄像头还是指定图像。如果 target 等于 "camera",则调用 self.open_camera() 打开摄像头。然后使用 self.cap.read() 从摄像头读取图像。否则,从指定图像文件中读取图像。
3. 如果读取的是摄像头图像,则翻转图像以适应手势检测模型。
4. 使用 self.hand 对象运行手势检测模型,并将结果存储在 datas 变量中。self.hand 对象是通过调用 hands(0,2,0.6,0.5) 创建的,其中参数分别为手势检测的阈值、检测精度、最小手部面积和最大手部面积。
5. 拆分图像的三个颜色通道(蓝色、绿色和红色),然后将它们合并成一个图像。
6. 遍历 datas 中的数据,绘制手势检测结果。首先绘制矩形框、手部中心点和手势角度。然后根据 right_left 值判断是左手还是右手,并在相应位置绘制手势角度。最后,绘制手部特征点。
7. 将处理后的图像转换为 Image 对象并显示在 self.display 上。
8. 如果 ges 仍然为空,说明没有检测到有效的手势,返回 None。否则,返回手势结果(ges)和手部中心点(center)。
这个函数可以用于实时手势识别或对指定图像进行分析。手势识别模型依赖于 self.hand 对象,其参数需要根据具体应用场景进行调整。

def gestureRecognition(self,target="camera"):
ges = ''
if self.hand==None:
self.hand = hands(0,2,0.6,0.5)
if target=="camera":
self.open_camera()
success,image = self.cap.read()
else:
image=np.array(Image.open(target))
image = cv2.flip(image,1)
datas = self.hand.run(image)
b,g,r = cv2.split(image)
image = cv2.merge((r,g,b))
for data in datas:
rect = data['rect']
right_left = data['right_left']
center = data['center']
dlandmark = data['dlandmark']
hand_angle = data['hand_angle']
XGOEDU.rectangle(self,image,rect,"#33cc00",2)
#XGOEDU.text(self,image,right_left,center,2,"#cc0000",5)
if right_left == 'L':
XGOEDU.text(self,image,hand_pos(hand_angle),(180,80),1.5,"#33cc00",2)
elif right_left == 'R':
XGOEDU.text(self,image,hand_pos(hand_angle),(50,80),1.5,"#ff0000",2)
ges = hand_pos(hand_angle)
for i in dlandmark:
XGOEDU.circle(self,image,i,3,"#ff9900",-1)
imgok = Image.fromarray(image)
self.display.ShowImage(imgok)
if ges=='':
return None
else:
return(ges,center)

  

gestureRecognition的更多相关文章

  1. 学习笔记之Machine Learning Crash Course | Google Developers

    Machine Learning Crash Course  |  Google Developers https://developers.google.com/machine-learning/c ...

  2. BCS SET EMAIL

    FUNCTION zcrm_send_email. *"------------------------------------------------------------------- ...

  3. [New learn] UIKit 框架类

    NSObject NSObject is the root class of most Objective-C class hierarchies. NSDataAsset The NSDataAss ...

  4. 【iOS翻译】对UIGestureRecognizer多种手势傻傻分不清

    UIGestureRecognizerDelegate A set of methods implemented by the delegate of a gesture recognizer to ...

随机推荐

  1. 10. docker方式下的mysql设置主从复制(一主两从)

    上一篇 [centos 使用 docker 方式安装 mysql] 笔记中,我们在三个虚拟机中使用 docker 方式新建了三个 mysql 容器服务,那么我们这篇文章来记录下,如何在这三台机器中设置 ...

  2. 【后端面经-Java】HashMap详解

    目录 1. HashMap的家族定位 2. HashMap的数据结构 2.1 Hash表的基本概念 2.2 Hash冲突 2.3 HashMap数据结构 3. HashMap的重要变量 3.1 常量 ...

  3. 自己动手实现rpc框架(二) 实现集群间rpc通信

    自己动手实现rpc框架(二) 实现集群间rpc通信 1. 集群间rpc通信 上一篇博客中MyRpc框架实现了基本的点对点rpc通信功能.而在这篇博客中我们需要实现MyRpc的集群间rpc通信功能. 自 ...

  4. Python 学习路线图

    Python 学习路线图 在这个系列笔记中,我将陆续整理自己在学习 Python 编程语言及其框架的过程中留下的笔记和代码,目的是掌握如何在生产环境中利用各种领域的第三方框架来快速开发应用程序.和大多 ...

  5. Python中的弱引用与基础类型支持情况探究

    背景 最近有一个业务场景需要用Python自行实现一个简单的LRU cache,不可避免的接触到了弱引用这一概念,这里记录一下. 强引用 Python内存回收由垃圾回收器自动管理,当一个对象的引用计数 ...

  6. wireshark 怎么过滤字符串 和 复制data中的可读文本

    设置 首先点击,[捕获]下面的小放大镜 选择 分组字节流 - 窄(UTF-8/ASCII)- 字符串 (注意,要向选择字符串) 效果 复制报文中的可读数据 右键报文,复制,...as Printabl ...

  7. k8s 的特点

    Kubernetes 的信条是基于自动化的.API 驱动的基础设施,同时避免组件间紧密耦合.

  8. test20230225考试总结(2023春 · 图论)

    前言 I hate questions that already exist!! 我讨厌原题!! 赛时得分明细: A B C D E F Total Rank 100 100 10 56 0 44 3 ...

  9. 行行AI人才直播第14期:【国内第二波人工智能进入者、连续创业者】土豆《土豆利用GPT成功融资两次的提示词和故事》

    行行AI人才(海南行行智能科技有限公司)是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. 此刻,ChatGPT的火热程度已经无需多言.一时间,追逐大模型成了国内AI行业的标准动作,&quo ...

  10. QLabel类中的常用方法&信号

    setAlignment: 按固定值方式对齐文本 Qt.AlignLeft:水平方向靠左对齐 Qt.AlignRight:水平方向靠右对齐 Qt.AlignCenter:水平方向居中对齐 Qt.Ali ...