在开发中使用接近传感器的个人经验

祝大家有美好的一天! 我叫Maxim,我是Habilect的首席开发人员。

在每个程序员的生活中,都有一段时间想要分享您的2/3生命所花的时间-对工作和项目的描述:)

从历史上看,我的主要工作领域是开发基于非接触式传感器的系统。

近七年来,已经尝试了许多选项-Microsoft Kinect(用于XBOX 360的版本和Windows的Kinect One),Intel RealSense(从市场上可用的第一个版本-F200开始,延续SR300,目前,最后一个发布了) -D435),Orbbec(Astra和Persee),Leap Motion(我甚至在这里写过有关处理自定义手势的文章)。 自然,如果没有普通的网络摄像头,它就不可能做到-图像分析,OpenCV等。

那些有兴趣的人-我要一只猫。

以防万一,以下是关于非接触式传感器的简短教育计划:

想象一下您需要以编程方式跟踪特定人员的行为的情况。

当然,您可以使用常规的网络摄像头,可以在任何商店购买。 但是对于这种用例,您需要分析图像,这是资源密集型的,而且坦率地说很重要(同一OpenCV中的内存分配问题仍然很重要)。

因此,将人识别为不是由摄像机图像的一部分,而是由使用主动测距仪的专用传感器获得的“骨架”,是更理想的选择。 这使您可以跟踪一个人(或几个人),并使用“骨骼”的各个部分。

在Microsoft Kinect SDK术语中,这些单独的部分称为“关节”。 对于默认情况下的传感器,其状态每30毫秒更新一次。

每个关节包含:

  • 相对于传感器光轴的空间中相应骨架点(X,Y和Z坐标)位置的数据,
  • 点可见性的状态(确定的,未确定的,由传感器计算出的位置),
  • 相对于先前点的旋转四元数

该图显示了由Kinect v2处理的关节,以达芬奇的维特鲁威人为例。

KinectV2Joints

因此,使用非接触式传感器,开发人员就有机会分析一个人或一群人的动作(例如,使用Kinect,可以在一个框架中同时跟踪6个人)。 以及如何处理接收到的数据阵列取决于特定的应用程序。

这种传感器的应用是无止境的。 我工作的主要领域是广告和医学。

考虑广告方向。 现在,为了操作交互式广告架,需要几个基本模块,即:

  1. 广告材料本身
  2. 收集有关吸引访问者注意特定广告的显示程度的统计信息,这对广告主来说很有趣
  3. 可以远程配置广告摊位
  4. 互动式展台与带有广告和印刷横幅的传统电视有明显区别

如果广告材料本身一切都清楚,则可以使用传感器来收集统计数据。 例如,任何广告客户对多少人关注他的广告感兴趣? 男人,女人还是孩子? 他们最经常停在什么时间? 他们会花多少时间看广告,而不仅仅是站在展台旁边,挖手机? 使用传感器,可以对其进行跟踪,并以便于广告商使用的形式生成报告。

对于远程配置,使用最可能的简单明了的模型-Google日历。 每个日历都附加到一个特定的展台,并且在圣彼得堡,您可以在世界任何地方管理展台。

诱人的效果是非常实用的功能,因此该支架被称为互动式。 您可以制作带有赞助商徽标的个人驱动游戏,当某个人出现在传感器的视野中时发出欢迎声音,例如,如果某人站立一分钟并观看了广告,则在广告客户的商店中制作带有折扣券的QR码。 选项主要受幻想限制,而不受技术限制。

为什么在医学中使用传感器? 这个问题的答案很简单-在保持准确性的同时降低了检查和康复的成本。

其中一个引人注目的例子是稳定仪领域的发展-行走时重心的偏离科学,这会影响姿势,脊柱和适当的肌肉功能。 您可以去特殊模拟器的特殊中心,这是一个非常昂贵的过程,但是并不总是提供。 而且,您可以购买传感器和软件回家,连接到电视并进行诊断测试,然后自动将结果发送给您的医生。

另一个例子是家庭康复。 对于任何人来说,康复都有两个主要问题,这已不是什么秘密:昂贵的医生上门服务(每周需要做几次)和康复者不愿长时间进行类似锻炼。 为此,开发了系统的一些基本假设,即:

  1. 由医生远程编制康复计划,以远程监控实施情况。 例如,来自圣彼得堡的医生可以远程监控符拉迪沃斯托克(Vladivostok)向患者开出的处方药课程,如有必要,可以更改习题,增加或减少课程的复杂性和强度,实时研究统计数据等。
  2. 游戏化的运动过程。 如果现代模拟器主要专注于进行基本运动以发展受损的肌肉和关节,那么交互式康复系统可以让您毫不费力地进行锻炼。 例如,借助著名的俄罗斯方块,它不是按按钮,而是由医生规定的动作控制(举起左手,移动右腿,向前倾斜头部等)。
  3. 执行运动成绩标准。 当与患者一起工作时,医生会在提示和触觉帮助的帮助下监视运动情况(例如,当您将手臂移开时,您不能在肘部弯曲手臂,这会影响肩关节的功能)。 交互式系统估计关节之间的相对角度,并且在超出可接受范围的情况下,会向用户发出警告,并且不会考虑到锻炼的错误执行。

这样的系统使您既可以减少时间(医生和患者都可以互相旅行),又可以保持进步所必需的锻炼的准确性。

使用.NET技术堆栈实施项目。 我只使用Windows :)。 是的,因此,我不得不为原生SDK编写包装程序多次(作为一个生动的例子,我为英特尔实感SDK制作了适配器,因为当时它只是非托管代码)。 它花费了大量的时间,神经和白发,但允许将库连接到Windows平台上开发的各种项目。

值得注意的是,主要传感器(Kinect和RealSense)需要x64分辨率才能进行开发。

为了简化客户端应用程序的工作,实现了一项单独的服务,该服务与传感器一起工作,以对我们方便的格式打包数据,并使用TCP协议将数据发送给订户。 顺便说一下,这使我们能够创建一个可以与多个传感器配合使用的系统,从而可以显着提高识别精度。

KinectMultiSensorModel
简化图显示了使用多个传感器跟踪对象的好处。 蓝点(关节)由第一和第二传感器稳定地确定,绿色-仅由第二传感器确定。 自然,开发的解决方案是在“ N传感器模型”下实现的。

KinectMultiSensorWorkflow
上图中显示了处理来自多个传感器的数据的详细过程。

对于几乎所有的发展,表演者的主要标准之一就是兴趣。 连续几年,我在ASP.NET和PHP中实现了相同类型的Web应用程序之后,我想要一些新颖的东西,比如说更聪明。 在Web开发中(很少有例外),一切都已经发明了。 好的站点,好的服务,好的数据库。 在使用传感器的情况下,总是会产生有趣且有争议的任务,例如,“我将如何通过TCP从传感器传输高清视频,以使它不会挂断系统?” (虽然是很久以前做的,但还是一个生活中的例子)。 而且,很难预料将需要改进和开发该系统的以下内容。 显然,存在一个主要的开发冲刺,其中描述了全局和预先计划的改进。 但是,此类局部子任务是程序员最有趣的技巧之一。

这样的工作绝对不是日常工作。 如果有人有兴趣更详细地学习,或者有人想知道从这方面开始,那么我很乐意与您交流。 准备回答任何问题:)愿力量与您同在!

Source: https://habr.com/ru/post/zh-CN430418/


All Articles