gestureRecognition
这段代码定义了一个名为 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的更多相关文章
- 学习笔记之Machine Learning Crash Course | Google Developers
Machine Learning Crash Course | Google Developers https://developers.google.com/machine-learning/c ...
- BCS SET EMAIL
FUNCTION zcrm_send_email. *"------------------------------------------------------------------- ...
- [New learn] UIKit 框架类
NSObject NSObject is the root class of most Objective-C class hierarchies. NSDataAsset The NSDataAss ...
- 【iOS翻译】对UIGestureRecognizer多种手势傻傻分不清
UIGestureRecognizerDelegate A set of methods implemented by the delegate of a gesture recognizer to ...
随机推荐
- Win11右键菜单改回win10
右键以管理员身份运行终端 reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\In ...
- React后台管理系统 04 配置路径别名、全局样式设置、模块化scss
ts中对于@符号指定的路径不支持,同时vite中也是不支持的,所以我们需要在vite.config.ts中进行指定配置,path是node中自带的一个模块这里爆红的原因是没有进行声明: 我们使用命令对 ...
- SQL Server中的NULL值处理:判断与解决方案
摘要: 在SQL Server数据库中,NULL是表示缺少数据或未知值的特殊标记.处理NULL值是SQL开发人员经常遇到的问题之一.本文将介绍SQL Server中判断和处理NULL值的不同方法,以及 ...
- Hexo、Typecho博客添加旅行足迹网页
本文部署的足迹地图,地址如下: http://www.aomanhao.top/index.php/archives/183/ jVectorMap JVectorMap 是一个优秀的.兼容性强的 j ...
- 深度学习(五)——DatadLoader的使用
一.DataLoader简介 官网地址: torch.utils.data - PyTorch 2.0 documentation 1. DataLoder类 class torch.utils.da ...
- MySQL到ClickHouse数据同步方案
MySQL 同步到 ClickHouse的方案可以看下面的说明,选择合适最近的同步方法. 1. 对比结果概述 整体上,NineData(官网:www.ninedata.cloud )的数据复制功能在功 ...
- Java实现数组去重复的18种写法
说明 数组(含List)去重复在日常工作中经常遇到,很多时候用到Set数据结构,但有时候我们需要针对数据进行干预,这时候就需要用其他的实现方式了.以下列出各种的去重方式,基本含括了所有情况. 源码下载 ...
- Mybatis(配置解析解读(核心))
核心配置文件 mybaits-confing.xml *properties(属性) *settring(设置) *typeAliases(类型别名) *typeHandlers(类型处理器) *ob ...
- EasyExcel中使用表头模板示例
解决方案 在EasyExcel的官方示例中,使用模板导出Excel,其结果仍然还会重新打印表头.不满足使用表头模板的需求.在参考源码后,找到如下解决方案. String templateFileNam ...
- 2021-7-8 VUE的简易表单提交
<!DOCTYPE html> <html> <head> <title> </title> <style type="te ...