徐程远,游国栋,王一评,赵双乐
(1.天津科技大学 机械工程学院,天津 300222;2.天津科技大学 电子信息与自动化学院,天津 300222;3.天津科技大学 人工智能学院,天津 300222)
目前市面上的婴幼儿安全看护设备许多功能欠缺,存在受众泛化、图像不清晰、弱光环境下图像质量差、检测范围小等问题,留有一定的技术空缺。本文针对以上问题进行系统的更新,为了降低儿童伤害从父母育儿的角度出发,优化技术配置,为儿童提供安全、健康、舒适的成长环境。
本文设计的婴幼儿看护机器人,减少了人们对婴幼儿监护问题的盲区,与此同时可在多场景应用,例如:智慧医疗、视频保姆、育儿托管等。本文设计的婴幼儿看护机器人处于仿真阶段。
如图1 所示,Jetson Nano[1]是英伟达公司推出的一款微型电脑主板,价格适中,功耗低,功能强大,备受用户喜爱。该主板采用直插式内存模块(SODIMM),支持多种计算机接口,如USB 3.0、USB 2.0、千兆以太网和视频(支持4 k 60 fps)。此外,Jetson Nano 还有一套40 引脚扩展引脚,与Raspberry Pi上的引脚非常相似,同时也支持Pi 的摄像头。
图1 Jetson Nano B01 主板Fig.1 Motherboard of Jetson Nano B01
Jetson Nano 的性能超越了树莓派。它搭载了四核Cortex-A57 处理器、128 核Maxwell GPU 和4 GB LPDDR 内存,能够为机器人和工业视觉设备提供充足的AI 计算能力。它能够提供472 GFLOP,并且支持高分辨率的传感器,同时也能够处理多个传感器流,并且可以在每个传感器流上运行多个现代神经网络。Jetson Nano Developer Kit 支持一系列流行的AI 框架和算法,比如TensorFlow、PyTorch、Caffe、Caffe2、Keras、MXNet 等,使得开发人员能够简单快速地将AI 模型和框架集成到产品中,轻松实现图像识别、目标检测、姿势估计、语义分割、视频增强和智能分析等强大功能。此外,Jetson Nano Developer 还支持NVIDIA JetPack 组件包,其中包括用于深度学习、计算机视觉、GPU 计算、多媒体处理等的板级支持包,CUDA,CUDNN 和TensorRT 软件库。
USB 高清摄像头是一种数字摄像头,它可以直接通过USB 接口连接到计算机上,无需使用视频捕捉卡。USB 高清摄像头的主要结构和组件包括镜头和图像传感器。镜头是由几片透镜组成的透镜结构,可以是塑胶透镜或玻璃透镜。图像传感器可以分为两类:CCD(电荷耦合器件)和CMOS(互补金属氧化物半导体)。USB 高清摄像头可以捕捉高清晰度的影像,并将其传输到计算机上进行处理和存储。由于USB 接口的传输速度较快,因此USB 高清摄像头在市场上越来越受欢迎。
激光雷达是机器人中常用的传感器之一,可以用于测量机器人周围环境的距离和形状。在ROS中,激光雷达的驱动程序和数据处理程序已经被开发出来,可以方便地与ROS 进行集成。通过ROS,可以使用激光雷达来获取机器人周围环境的信息,并进行地图构建、路径规划等任务。
舵机二维云台是一种通过舵机控制的支撑模块,可以实现左右和上下的转动。它通常由2 个舵机和1 个固定架组成,其中一个舵机控制左右转动,另一个舵机控制上下转动。舵机二维云台可以与摄像头等设备配合使用,实现远程监控、拍照等功能。
YOLO 算法支持人脸关键点定位、人脸表情判断等多项任务,这使得它在处理复杂场景或多种应用需求方面更加灵活和可靠,进一步提高婴幼儿安全监控的质量和效率。
整个方案实现过程为采集婴幼儿表情图片进行处理后建立婴幼儿表情库,根据婴幼儿感应区检索出数据库里所有的婴幼儿面部区域,以此减少其他环境因素对面部识别的干扰。利用YOLO 目标检测算法,通过建立损失函数、更新参数对模型进行训练并最后进行模型评估。
3.1.1 数据采集和处理
因国内外关于婴幼儿面部表情的开源数据集样本过少,所以建立一个数据集。使用爬虫技术(Python 的相关库BeautifulSoup、Scrapy 等)从多个数据源采集到足够的婴幼儿表情,如图2 所示,建立一个婴幼儿表情库[2]。再使用精灵标注助手对数据库里的婴幼儿图片感应区进行标记,主要分为积极(POSITIVE)、平静(PEACE)、消极(PASSIVE)三类[3]。使用矩形框裁剪出数据库里所有的婴幼儿面部区域,以此减少其他环境因素对面部识别的干扰。还需对所有数据图片进行分类,由于婴幼儿面部表情较为简单,对所有图片标注完毕后,将其导出为XML 格式,再转到YOLO 所用的格式,通过预处理,包括数据增强、数据划分等。数据增强可以采用随机裁剪、旋转、缩放、翻转等方式,以扩充数据量和增强模型的泛化能力[4]。数据划分可以将数据集分为训练集、验证集和测试集,以便进行模型训练和评估。
图2 数据集爬取过程Fig.2 Dataset crawling process
3.1.2 损失函数
损失函数的作用为度量神经网络预测信息与期望信息(标签)的距离,预测信息越接近期望信息,损失函数值越小。由上述每个格子的预测信息可知,训练时主要包含3 个方面的损失:边界框损失(loss_box)、置信度损失(loss_obj)、分类损失(loss_clc)。因此YOLOV5 网络的损失函数定义为
3.1.3 模型训练
利用YOLOV5 进行模型训练。用YOLO 算法库,在收集到足够数量和质量的数据后,将其输入到模型中利用深度神经网络、CNN(卷积神经网络)、数据增强、优化器以及GPU 加速等多项技术进行训练,构建成一个具备良好泛化性能的人脸识别模型。在模型训练后,可以将其应用于实时视频流中,通过分析婴幼儿的面部表情来判断他们是处于积极、消极还是平静的情感状态。部分训练效果图如图3 所示。
图3 部分训练效果Fig.3 Partial training effect
3.1.4 模型评估
在目标检测中,评估模型性能的2 个重要指标是召回率(Recall)和平均精度(mAP)[5]。
精确度(Precision):
召回率(Recall):
式中:TP 是正类判定为正类;FP 是负类判定为正类;FN 是正类判定为负类;TN 是负类判定为负类。召回率越高,说明模型越能够正确检测到目标。
对于每个类别,计算出不同阈值下的精确度(Precision)和召回率(Recall),并绘制出Precision-Recall 曲线。在Precision-Recall 曲线基础上,通过计算每个Recall 值对应的Precision 值的平均,可以获得一个数组形式的评估:
式中:r1,r2,…,rn是按升序排列的Precison 插值段第一个插值处对应的Recall 值。
所有类别的AP 为mAP:
从图4 可以看出,平均精度越高,说明模型在不同类别下的检测效果越好。
图4 评估指标曲线图Fig.4 Evaluation indicator curve diagram
通过对摄像头传来的视频流处理获得人物的相关信息并锁定,使用Mean Shift 算法,在后续对图像的处理中,可提取出用户特征值,避免跟随目标混乱。将监测系统与Jeson Nano 小车进行结合,使家长可以远程操纵小车进行全方位多角度的监测,与传统固定机位相比,灵活性显著提高,不需要布置多个机位,且减少了固定机位所具有的监控死角。
Mean Shift(均值漂移)平均偏移是一种基于核密度的非参数聚类算法,该算法假设不同聚类的数据集遵循不同的概率密度分布,找到任意局部点的密度增长最快方向(即均值偏移),并找到与分布最大值相对应的样本密度高的区域。该算法中最常用的核函数是高斯核,它在数据集上的每个采样点设置核函数,并将所有核函数相加以获得数据集的核密度估计值。最终,该算法通过将收敛到与同一聚类的成员收敛到相同最大值的点来实现聚类。
该算法需要指定带宽、漂移平均收敛阈值和集群合并阈值(Center_Distance)的参数。此外,还可以通过带有核函数的Mean Shift 聚类来进一步优化聚类效果。
假设有大小为n 的d 维数据集:{xi}
由数据集的核密度估计:
上式的梯度为
上式的第一项为实数值,因此第二项的向量方向与梯度方向一致,第二项的表达式为
由上式推导可知:均值漂移向量所指的方向是密度增加最大的方向。因此,Mean Shift 算法流程为
(1)计算每个样本的均值漂移向量mh(x)。
(2)对每个样本点以mh(x)进行平移,即:
(3)重复(1)(2),直到样本点收敛:
(4)收敛到相同点的样本被认为是同一簇类的成员。
在使用Flask 前,需要先安装虚拟环境和Flask。虚拟环境可以提供一个干净的Python 环境,使得不同的应用程序可以在不同的环境中稳定运行,使用虚拟环境工具Anaconda 来创建虚拟环境。
使用Flask 创建一个简单的应用程序,同时在Flask 中渲染HTML 页面需要使用的模板,使用Jinja2模板引擎。创建一个名为“index.html”的文件,在其中添加一些HTML 代码(如一个简单的输入框和提交按钮),并将其保存在模板目录中,到这里可以实现HTML 页面的准确渲染。
在前后端交互的过程中,Flask 可以使用Jinja2模板引擎来渲染动态数据,并使用Flask-WTF 库来处理Web 表单。在渲染页面时,可以将服务器端的数据传给前端,然后前端通过发送HTTP 请求的方式,将数据发送给服务器进行处理。
在前端HTML 代码中,通过表单提交的方式将数据发送给后端。在Flask 应用程序中定义一个与前端表单参数对应的函数,并在该函数中编写后台逻辑代码,用于对表单的数据进行处理,然后将处理好的数据返回给前端,此时前端页面实时显示后端处理好的婴幼儿监测机器人拍摄的信息流,婴幼儿监测系统界面如图5 所示。
图5 婴幼儿监测系统界面Fig.5 Infant monitoring system interface
本文设计的婴幼儿监测系统基于HTML、CSS和原生JS 技术设计了前端界面,使用Flask 进行前后端连接,与后端Python 代码协同工作,整体开发框架如图6 所示。看护机器人可实时跟进婴幼儿,通过摄像头传来的视频流获取婴幼儿的相关信息,将信息流传给后端进行处理,具备婴幼儿面部手部追踪、夜间增光效果、婴幼儿面部表情识别等功能。处理好的信息流返回前端,可方便查看婴幼儿生活动向。
婴幼儿看护机器人的产品定位,主要是为父母提供一个安全、可靠的监测系统,帮助他们更好地监护婴幼儿的健康和安全。婴幼儿看护机器人的核心功能是实时监测婴幼儿的情况,这些传感器不断收集和传输婴幼儿的生理数据,通过手机应用或电脑软件实时呈现给父母,父母可以通过表情随时了解婴幼儿的健康状况[6-7],及时发现和解决问题。婴幼儿看护机器人还可以通过记录婴幼儿的睡眠、喂养时间和频率等数据,帮助父母更好地掌握婴幼儿的生活习惯,这些额外功能可以帮助父母更好地管理婴幼儿的日常生活,提高婴幼儿的生活品质。