这段代码定义了一个名为 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. JUC同步锁原理源码解析六----Exchanger

    JUC同步锁原理源码解析六----Exchanger Exchanger Exchanger的来源 A synchronization point at which threads can pair ...

  2. 【后端面经-Java】Java创建线程的方法简介

    目录 1. 线程的基本概念 1.1 线程 1.2 线程状态和生命周期 2. 创建线程的四种方法 2.1 继承Thread类 2.2 实现Runnable接口 2.3 实现Callable接口 2.4 ...

  3. 如何使用libavcodec将.h264码流文件解码为.yuv图像序列?

    一.打开和关闭输入文件和输出文件 //io_data.cpp static FILE* input_file= nullptr; static FILE* output_file= nullptr; ...

  4. ArcMap镶嵌数据集的创建、数据导入与数据范围修改方法

      本文介绍基于ArcMap软件,建立镶嵌数据集(Mosaic Datasets).导入栅格图像数据,并调整像元数值范围的方法.   镶嵌数据集(Mosaic Datasets)是一种用以管理.显示. ...

  5. Lord Of The Root: 1.0.1实战

    前言 Description:我创建这台机器是为了帮助其他人学习一些基本的CTF黑客策略和一些工具.我瞄准了这台机器,使其在难度上与我在OSCP上破解的机器非常相似. 这是一个引导到根计算机将不需要任 ...

  6. VSCode 编辑器的基本配置

    VSCode 编辑器的基本配置 在正式开始本文的内容之前,请允许我先做一些自我介绍: 严格来说,我是个自由职业者,经常会参与一些计算机专著的写作与翻译工作(主要作品如下图所示),业余偶尔也会有一些机会 ...

  7. React中编写操作树形数据的自定义Hook

    什么是 Hook hook 即为钩子,是一种特殊的函数,它可以让你在函数式组件中使用一些 react 特性,目前在 react 中常用的 hook 有以下几类 useState: 用于在函数组件中定义 ...

  8. 如何用Three.js + Blender打造一个web 3D展览馆

    作者:vivo 互联网前端团队- Wei Xing 运营活动新玩法层出不穷,web 3D炙手可热,本文将一步步带大家了解如何利用Three.js和Blender来打造一个沉浸式web 3D展览馆. 一 ...

  9. Rust 学习笔记:快速上手篇

    Rust 学习笔记:快速上手篇 这篇学习笔记将用于记录本人在快速上手 Rust 编程语言时所记录的学习心得与代码实例.为此,我会在本笔记库项目的Programming/LanguageStudy/目录 ...

  10. 二分查找非递归Algorithm(java)

    二分查找的适用条件 二分查找只适用于有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 二分查找的运行时间为对数时间O(LONG2 N) 二分查找非递归的实现 /** * @param ...