本次参赛题目为2022年的A7-基于国产操作系统SylixOS的人脸识别应用开发
背景:
随着云计算、大数据、机器学习和深度学习等技术的突破发展,AI在各行各业已开始广泛应用。在生产生活中,越来越多的产品支持通过人脸识别来进行鉴权认证和支持相关功能,如刷脸支付、刷脸登录、人脸门禁、寻人或疑犯搜索等。
SylixOS作为优秀的国产操作系统,已支持丰富的人工智能框架,商业产品已选用ncnn。SylixOS还支持OpenCV和Qt,因此,在SylixOS上开发一款AI应用非常方便和高效。
ncnn是一个为嵌入式设备极致优化的高性能神经网络前向计算框架。ncnn是腾讯开源的人工智能框架, ncnn已应用到QQ、微信、微视、京东、支付宝、爱奇艺、美颜相机、快手短视频等上百款APP,选用 ncnn 作为手机CNN推断库,实现包括人脸检测跟踪、人脸配准、人脸识别、人体检测跟踪、人体姿态估计、图像分类、图像美化、目标分割、风格画生成、物体检测、文本检测和识别等 AI 场景应用。
本赛题要求参赛者完成一款人脸识别应用开发,可选择自己熟悉的人工智能训练框架,Microsoft Cognitive Toolkit,PyTorch ,TensorFlow和 Caffe2 均已支持ONNX(Open Neural Network Exchange)标准,ONNX是一个用于表示深度学习模型的标准,ONNX文件可转换为ncnn模型。
主要难点有两方面:
1、人脸识别算法,及其标准化的转换
2、基于sylixos上的qt应用开发
选择场景:疫情影响下的核酸人脸识别登记
实现思路:
首先是人脸信息的记录和特征提取,将人脸信息特征保存到数据库,建立人脸库
其次进行人脸检测,由于视屏捕获的一些原因,导致不能将视屏放入线程(非阻塞形式,任务堆积过多,最终内存爆炸溢出)
因此采用阻塞方式捕获。将图片通过ncnn的人脸检测模型,绘制出人脸框,保存人脸。
而后将保存的人脸通过槽函数的方式发送信号,运行人脸识别到子线程中(非阻塞)。在线程中提取特征,和数据库人脸信息进行比对
返回符合置信度的第一个人脸信息(降低系统运行压力)。
在ui主线程中绘制返回结果图片。流程结束。
实现问题:
注意线程间的通信和任务积压问题。
注意线程的同步问题。
注意c++的变量引用问题,尤其是深拷贝和浅拷贝及&。
个人感受:
磕磕绊绊算是做完了,有些功能没有实现且实现不尽我意,有些累,还有考研。。
总的来说对于个人的成长还是蛮大的,从软件最开始的需求,业务场景,方向,到软件的具体实现,测试,文档编写
希望有个好结果吧,也不求别的,就求个自己心里舒坦
搜索
复制