由上文,我们此文将对导购系统项目做路线详解。
商品选择模块
首先是我们的商品选择模块,我们采用mediapipe人体特征点检测框架,检测人体躯干的33个特征点和手部的21个关键点,为了减少多个关键点造成的混乱问题,我们采用用右手的手心作为唯一定位点,通过屏距比实现投影效果,计算出用户手掌的关键点在屏幕上的投影点,通过坐标变换来实现效果。通过xy值归一化显示标识点在平面上的位置信息,通过z值显示标识点的深度信息,实现三维的检测效果。
时间戳同步
MediaPipe图结构执行时去中心化的:没有全局锁,不同的节点能够在同一时间处理不同时间戳的数据。这允许管道有更高的吞吐量。然而时间信息对于许多感知工作流非常重要。同时接收多个输入流的节点需要以某种方式取协调它们。例如,一个目标检测器可能产生一系列候选框,然后再将这个信息输送到渲染节点,该节点应该与原始帧一起处理。 因此MediaPipe主要功能之一就是让节点输入同步。就框架而言,时间戳的主要作用是充当同步键。此外,MediaPipe被设计为支持确定性操作,这在许多场景(测试、模拟、批处理等)中非常重要,同时允许图设计者在需要满足实时约束的地方放松确定性。 同步和决定论这两个目标是几种设计选择的基础。值得注意的是,推入给定流的数据包必须有单调递增的时间戳:这不仅是对许多节点有用的假设,而且同步逻辑也依赖于此。每个数据流有时间戳限制,这是数据流上新包允许的最低时间戳。当一个时间戳为T的数据包到达时,边界自动推进到T+1,反映了单调要求。这允许框架确定没有时间戳小于T的数据包会到达。
输入策略
由DefaultInputStreamHandler定义的默认输入策略提供了确定性的输入同步,可以保证多个输入流上具有相同时间戳的数据包,输入数据流严格按照时间戳升序处理。基于计算单元的方法使图可以控制在哪里丢弃数据包,并允许根据资源约束灵活的适应和定制图行为。
GPU计算和渲染
MediaPipe支持用于GPU计算和渲染的计算单元节点,并允许合并多个GPU节点,以及将它们与基于CPU的计算单元节点混合。MediaPipe中GPU设计原则是保证GPU计算单元可以出现在图的任何地方,帧数据在GPU计算单元到另一个计算单元应该不需要复制操作,CPU和GPU之间的数据传输应该高效。 MediaPipe允许图在多个GL上下文中运行OpenGL。举例来说,这可能是在图结构中非常有用,结合较慢的GPU推理路径(例如,在10帧/秒)和更快的GPU渲染路径(如30 FPS):因为一个GL上下文对应于一个连续的命令队列,所以这两个任务使用相同的上下文将会减少渲染的帧速率。 MediaPipe使用多个上下文解决的一个挑战是跨它们进行通信的能力。比如这样一个示例场景,同时发送输入视频到显示和推理路径,显示需要先访问推理的结果。 一个OpenGL上下文不能被多个线程同时访问。此外,在某些Android设备上,在同一线程上切换活动GL上下文可能会很慢。因此,我们的方法是为每个上下文设置一个专用线程。每个线程发出GL命令,在其上下文上建立一个串行命令队列,然后由GPU异步执行。
虚拟试衣模块
集成了真实环境理解能力与模型渲染能力,其中真实环境理解能力包括识别真实世界的平面、环境光、人体等,模型渲染能力包括模型和真实世界平面、环境光、人体等交互渲染。识别到地面后,将模型放置到地面上进行展示。
使用该组件,可以轻松地将虚拟模型放置在真实环境中,虚实主体遮挡开关打开后,若虚拟模型和人体有交互,例如虚拟模型被人体遮挡,被遮挡的部分会进行扣除显示,实现更加真实的AR展示功能。
集成了人脸理解能力与模型渲染能力,其中人脸理解能力包括人脸位置、姿态识别与人脸表情识别等,使用该组件,轻松地实现人脸AR效果。
同时,仅需加载包含表情的人脸模型,即可以利用人脸真实表情驱动模型,实现模型的实时表情变化。
鸿蒙app
我们前端使用的是鸿蒙app。 鸿蒙系统是华为开发者大会上正式发布的,是面向全场景的分布式操作系统,具有分布式软总线、分布式数据管理、分布式安全的特性。分布式软总线让多设备融合为一个设备,带来设备内和设备间高吞吐、低时延、高可靠的流畅连接体验。分布式数据管理让跨设备数据访问如同访问本地,大大提升跨设备数据远程读写和检索性能等。分布式安全通过定义数据和设备的安全级别,对数据和设备都进行分类分级保护,确保数据流通安全可信。
使用分布式的鸿蒙app代替传统安卓应用,我们具备以下优点: 1、增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。 2、加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。 3、系统模块重用度更高
协同过滤算法
协同过滤,从字面上理解,包括协同和过滤两个操作。所谓协同就是利用群体的行为来做决策(推荐),生物上有协同进化的说法,通过协同的作用,让群体逐步进化到更佳的状态。对于推荐系统来说,通过用户的持续协同作用,最终给用户的推荐会越来越准。而过滤,就是从可行的决策(推荐)方案(标的物)中将用户喜欢的方案(标的物)找(过滤)出来。
具体来说,协同过滤的思路是通过群体的行为来找到某种相似性(用户之间的相似性或者标的物之间的相似性),通过该相似性来为用户做决策和推荐。 此处我们通过协同过滤算法实现服饰推荐效果,展现在鸿蒙app上,为用户生成唯一的个性化标签,通过个性化标签将人群划分为小群体,在小群体内实现喜好服饰的数据共享,即喜好推荐。
硬件的探索
之前使用过树莓派,在树莓派上搭载过项目的代码,但是因为树莓派算力过低导致丢帧、失帧等情况。 正在进行小熊派温度监控模块的开发,使用小熊派,通过STM32的硬件IIC获取SHT20温湿度数据,并在串口中打印。掌握小熊派硬件IIC的使用以及SHT20数据的读取,将读取的数据上传到华为云服务器,并将数据进行处理之后在web端进行呈现。
|