AR作为一项增强现实技术,带来了虚拟数字世界与现实世界的深度融合,这种虚实融合,不仅能应用于虚拟汽车展示、虚拟室内设计等视觉交互场景,更可通过动作交互控制虚拟世界场景,实现无边界的人机互动。
比如人们在拍摄短视频时,可以不接触屏幕,仅通过做出特定手势来控制特效切换;也可以在拍照时通过手势识别控制快门拍摄;还可以实现试用美甲款式、戒指试戴等。以上AR应用场景需做到精确的手部识别,这就要用到AR Engine的手部骨骼跟踪能力。

手部骨骼跟踪能力可识别和跟踪21个手部关节点的位置和姿态,并输出手指端点、手掌朝向、手部骨骼等手部高级特征,形成手部骨骼模型。当图像中出现多只手时,只反馈最清晰置信度最高的手的识别结果和坐标信息,目前仅支持可获取深度信息的指定华为机型。
通过手部骨骼识别能力,可将虚拟物体叠加到更为精确的手部位置,例如手指尖、手掌心等;利用手部骨骼,可驱动虚拟手做出更为丰富和精细的操控动作,能够为AR应用提供增强的交互功能,便于拓展更多新奇的玩法。

手部骨骼定义图
应用场景
手部骨骼跟踪能力可以形成简单的手语理解。在对手部骨骼关键点进行提取的基础上,根据关键点的变化预测手部姿态,可以将弯曲、竖直等手指状态集映射到一组预定义的手势,比如食指直直伸出就代表计数手势“1”,通过此类算法推导出的手势动作,就是形成手语理解的基础,可应用于手语的识别和翻译。

科幻电影中常常会出现人物隔空操作电脑界面的场景,而此类功能基于手部骨骼跟踪能力也可以实现。
通过摄像头对手部骨骼的识别跟踪,可精确定位指尖等关键节点信息,从而实现对虚拟对象的物理交互。比如使用手指按下虚拟按钮或其他UI元素;捏住虚拟对象并释放菜单项;拉伸较大对象上的小目标等物理控制;甚至用手重新调整对象大小或将其存储在虚拟口袋中等等。
该功能可应用于医疗行业的机械控制、机车界面控制等。

AR Engine的手部骨骼跟踪能力也可以在短视频传播过程中增添一些手部特效,比如当用户在拍摄短视频或直播时做出比耶、点赞、比心等指定手部动作时,可识别用户手势并叠加相应的特效或贴纸,实现手势触发特效、手部特效跟踪等效果,丰富视频直播过程中的交互体验。

除此之外,手部骨骼跟踪能力还可应用于影视动画制作、儿童教学、医学康复、智能家居控制等领域。
在AR技术快速发展的今天,基于手势识别的人机交互已逐渐成为热点,如何实现自然的、符合人类习惯的手势识别,是人机交互接口中的一个重要组成部分,作为手势识别的一项基础能力,手部骨骼跟踪也凸显出了在该领域的重要地位。华为AR Engine希望该能力能够帮助开发者们激发出更广泛的研究方向和更具创新力的实际应用。
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O
当我进入Rails控制台时,我已将pry设置为加载代替irb。我找不到该页面或不记得如何将其恢复为默认行为,因为它似乎干扰了我的Rubymine调试器。有什么建议吗? 最佳答案 我刚发现问题,pry-railsgem。忘记了它的目的是让“railsconsole”打开pry。 关于ruby-on-rails-带有Pry的Rails控制台,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question
我正在尝试将$stdout设置为临时写入一个文件,然后返回到一个文件。test.rb:old_stdout=$stdout$stdout.reopen("mytestfile.out",'w+')puts"thisgoesinmytestfile"$stdout=old_stdoutputs"thisshouldbeontheconsole"$stdout.reopen("mytestfile1.out",'w+')puts"thisgoesinmytestfile1:"$stdout=old_stdoutputs"thisshouldbebackontheconsole"这是输出。r
我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id