#基于VR环境下的手指识别键盘输入# 基于轮廓质心的手部识别优化(一)

本文探讨了VR环境下基于轮廓质心的手部识别问题,包括手指点跳变导致的手掌与手指分离以及背景色影响。提出通过计算质心定位手掌,使用外置摄像头和彩色手套来改善识别准确性。同时,介绍了如何处理坐标系统差异,实现实时数据传递给VR模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在完成了之前提到的工作之后,发现在实际操作的时候,存在一定的问题:

(1)由于识别的是轮廓凸缺陷,所以得到的最终结果是一个点组,包括起始点、结束点、最远点和到最远点之间的距离。在实际运用中。想要用一个3D的手部模型与识别出来的手部进行绑定。因为涉及手掌整体和各个手指的移动,所以需要对手掌和手指分别进行定位。但是由于只保存了五个指尖点,所以采用平均的方法计算出中心点。由于指尖位置存在一定程度的跳变,所以实验效果并不理想,容易出现手掌和手指的分离。

(2)由于基于颜色识别,所以受到背景环境色的影响较大。当背景色过于杂乱或者接近肤色时,会产生一定的影响。目前的解决方案是,采购了外置摄像头,保持摄像头垂直角度从上向下拍摄,人手能够平摊在键盘区域上方。构思或许带上颜色比较鲜艳的手套也是一种解决方案。


下面是对问题(1)的解决方案。

要实现检测到的手部位置和环境中模型的实时更新,就需要一定的数据传递。将获取到的手部信息实时传递给环境中的模型,只需要在模型脚本中获取手部识别脚本上的变量即可。

这个过程中,需要注意的是,手部识别的脚本坐标属于UGUI的坐标,而模型的坐标属于世界坐标。直接采用坐标xyz值的传递,会导致位置出错,需要使用一个函数进行坐标之间的转换。

public Vector3 WorldToUI(Camera camera,Vector3 pos){  
			CanvasScaler scaler = GameObject.Find("Canvas").GetComponent<CanvasScaler>();  
			float resolutionX = scaler.referenceResolution.x;  
			float resolutionY = scaler.referenceResolution.y;  

			Vector3 viewportPos = camera.WorldToViewportPoint(pos);  

			Vector3 uiPos = new Vector3(viewportPos.x * resolutionX - resolutionX * 0.5f,  
				viewportPos.y * resolutionY - resolutionY * 0.5f,0);  

			return uiPos;  
		} 
	}

手掌的定位中,一个非常重要的定位点就是质心。

所谓质心,指物质系统上被认为质量集中于此的一个假想点。计算质心的基本思路如下:

1.      输入图像转换为二值图像
2.      通过连通组件标记算法找到所有的连通区域,并分别标记
3.      对每个连通区域运用计算几何距算法得到质心

4.      用不同颜色绘制连通区域与质心,输出处理后图像

			Moments moment = Imgproc.moments (contour, false);
			Point center = new Point (moment.m10 / moment.m00, moment.m01 / moment.m00);
			//质心点
			Imgproc.circle (rgbaMat, center, 6, new Scalar (0, 0, 255, 255), -1);

			MatOfPoint conPointMat = contours [boundPos];
			List<Point> conPoint = conPointMat.toList();
			List<Point> fingerTips=new List<Point>();

其中moments函数可以获得图像的矩,并且根据计算几何矩的算法得到质心center。

我们选择使用蓝色在画面上标记图像的质心。


如图蓝色点即为红色轮廓图像内的质心。

蓝色的线段涉及另一种寻找指尖的算法。我将在下一篇博客中详细说明。谢谢观看!


内容概要:本文从关键概念、核心技巧、应用场景、代码案例分析及未来发展趋势五个维度探讨了Python编程语言的进阶之路。关键概念涵盖装饰器、生成器、上下文管理器、元类和异步编程,这些概念有助于开发者突破基础认知的核心壁垒。核心技巧方面,介绍了内存优化、性能加速、代码复用和异步处理的方法,例如使用生成器处理大数据流、numba库加速计算密集型任务等。应用场景展示了Python在大数据处理、Web开发、人工智能和自动化运维等多个领域的广泛运用,特别是在FastAPI框架中构建异步API服务的实战案例,详细分析了装饰器日志记录、异步数据库查询和性能优化技巧。最后展望了Python的未来发展趋势,包括异步编程的普及、类型提示的强化、AI框架的深度整合以及多语言协同。 适合人群:已经掌握Python基础语法,希望进步提升编程技能的开发者,特别是有意向从事数据科学、Web开发或AI相关工作的技术人员。 使用场景及目标:①掌握Python进阶概念和技术,如装饰器、生成器、异步编程等,提升代码质量和效率;②学习如何在实际项目中应用这些技术,如通过FastAPI构建高效的异步API服务;③了解Python在未来编程领域的潜在发展方向,为职业规划提供参考。 阅读建议:本文不仅提供了理论知识,还包含了丰富的实战案例,建议读者在学习过程中结合实际项目进行练习,特别是尝试构建自己的异步API服务,并通过调试代码加深理解。同时关注Python社区的发展动态,及时掌握最新的技术和工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值