当前位置: 首页 > 后端技术 > PHP

【《齐心抗疫,代码全能》线上公益黑马10号best-geek(最佳极客)魔镜小程序】

时间:2023-03-30 00:58:17 PHP

参加比赛的感觉大概是一个下午的时候突然看到腾讯开源公众号一篇抗疫线上公益黑马的帖子。作为一名技术人员,我认为这是一个非常好的为疫情做贡献的平台。于是联系了几个关系不错的同事、同学、朋友,凑齐了三个人一起打算做点什么,然后通过微信群结识了一个新同学。当时的想法是做一个利用AI技术识别假口罩的应用。因为在找各种渠道买口罩,也通过新闻得知假冒伪劣口罩很多,正好研究了利用php-ml实现手写字符识别,启发了我做口罩识别。幸运的是,我和其他朋友达成了共识。一开始担心AI模型最后会失败,但也得到了小伙伴们的理解和支持。经过三天紧张的设计、开发、测试、路演,完成了一个试用版,幸运地获得了二等奖。比赛结束后,我们将利用业余时间投入到这个开源项目的后续迭代中,继续用这个想法为疫情和公众健康做贡献。项目背景随着新冠疫情确诊病例不断增加,口罩也出现全线断货。不少电商卖家纷纷将3M口罩上架,微商也纷纷晒出货源。这些口罩不仅价格翻倍,而且假货、二手货也不少。不仅欺骗消费者,还可能危害公众健康。为此,我们团队希望借助本次云开发公益黑客马拉松的平台,借助小程序、人工智能等技术,帮助普通消费者识别假冒伪劣口罩,为抗击疫情做出我们的贡献。.为了实现这个愿景,我们开发了一个名为“沙刀镜”的小程序,希望这个小程序能够保护大众的身体健康和生命安全。项目介绍魔镜暂时只能检测3M口罩。使用时有两种检测方法。最直接的方法是图像检测。图像检测的过程是先根据自己佩戴的口罩类型选择是否佩戴呼吸阀。然后拍照或上传图片,编辑截图,看到呼吸阀上的字,就可以知道是否通过测试结果。另一种方法是问卷调查。问卷检测的过程是根据问题和图片提示选择相应的选项,然后得到一定比例的检测数据。与图片检测相比,问卷检测的准确率更高。SVM简介支持向量机(SupportVectorMachine,简称SVM)是一种有监督类型的机器学习算法,可以对数据进行二分类,广泛应用于图像识别、文本分类等模式识别问题。该算法的基本原理是在样本数据的数学空间中寻找能够使正负样本间隔最大化的超平面。算法的公式等细节过于复杂,这里就不展开讨论了。我们的工作架构设计我们的项目架构是前端UI和后端API,以及AI模型训练,目前不包括后台管理系统。前后端通过httpjson交互,前端UI通过微信小程序实现,后端API基于PHPLaravel框架微服务版(Lumen)实现,AI模型训练和预测是基于PHP的php-ml类库和持久化模型文件实现。除了模型和训练样本之外的数据存储是使用MySQL数据库实现的。UI开发流程本次前端工作,我们团队选择以小程序作为前端载体,结合wux-weapp进行工程开发。以微信小程序为主要载体,是基于小程序庞大的用户市场,更有利于我们更快地将公益项目带入用户视野,最大化用户体验。同时,我们基于小程序、开发文档和社区的非常完善的开发体系,方便了我们的快速开发。wux-weapp是一套组件化、可复用、易扩展的微信小程序UI组件库,更方便前端交互开发、测试和维护。本次UI设计采用了更符合此次疫情主题的颜色:淡红色和淡蓝色。蓝色主要体现魔镜的医疗属性,红色更能体现公益性和人文关怀。UI布局和交互主要采用扁平化的设计风格,交互性更好,提示和引导也非常简单易用,方便不同人群使用。AI模型的训练过程从机器学习算法框架的选择开始。目前市面上流行的框架有Spark、Tensorflow、PyTorch、百度飞桨等,使用的开发语言为python或scala。但我们并没有选择这些比较成熟完善的框架,主要是出于项目时间、团队成员技术栈、学习成本等方面的考虑。因此,我们最终选择了php-ml这个更简单易用的PHP机器学习库。正好php-ml还支持SVM算法,完全满足我们的需求,非常适合验证我们的算法思路。选择好算法框架后,接下来就是准备样本数据和特征处理了。虽然我们用手机拍了一些3M口罩的特征照片,也在网上收集了一些假3M口罩的照片,但是样本数据还是比较少,尤其是不同角度的照片样本。因此,我们使用Imagick图像处理库对原图进行旋转,增加样本数量,提高模型精度。由于php的语言特性,不支持并行计算,考虑到我们的服务器资源有限,需要减少特征个数和算法的计算量。我们要求用户只能上传含有3M字样的图片,并尽量剪掉不必要的图片细节。我们对用户上传的图片进行了缩放,保证每张图片都是28*28像素,并且保留了必要的图片细节。此外,我们统计每张图片的像素点,计算平均像素值,将小于等于平均像素值的像素点变为白色,使图片上的特征更加明显,减少需要的样本数量和算法量的计算。最后,我们将计算出的像素点输出到一个csv文件中,方便算法框架训练模型。样本数据分为训练数据和测试数据,分别用于模型训练和误差评估。获取每张图片的像素数据后,我们使用php-ml提供的API进行模型训练,并持久化为文件供后端API调用。phptrain.php2Collectingsamples...Finishedat:0.1430971622467sProcessingsamples...Finishedat:0.20800399780273sNetworkinit...Finishedat:0.21489810943604sTraining...Finishedat:0.885256052017at:0.9225savingmodel79...109780273s网络初始化...完成于:0.21489810943604s完成于:1.1274020671844s后端API的开发过程本项目后端使用的编程语言为PHP,使用Lumen框架构建项目,为前端提供接口以一种宁静的方式。本项目数据存储使用mysql;主要设计了3个数据表attachment(附件信息)、question(问卷信息)、recognition(识别信息和结果)。本项目的缓存使用的是redis,主缓存不会经常变化一些信息,比如:问卷信息下面是三个接口的详细介绍:问题查询功能:我们会输入一些可以判断真伪的问题将面具导入数据库,该界面提供问题和选项供用户选择图片识别功能:用户在前端选择手机中的照片或照片,上传到后端,后端将保存图片存储到云端,供后期分析AI的识别能力;图片保存后,将图片交给AI识别。返回识别结果;然后从界面返回到前端问卷识别功能:由于很多用户对口罩真伪的认知能力有限,我们也提供了问卷识别功能;给出口罩识别的一些常见问题,根据用户的回答来判断口罩的真伪总结与展望经过几天的紧张开发和调试,已经实现了基本的口罩识别功能,包括基于图像的识别和更准确的基于问卷的识别鉴别。受限于我们目前的知识储备和研发时间限制,图像识别的准确率只有60%左右,鲁棒性有待提高,需要继续努力提高。以下是我们团队对这个小程序未来的一些展望:支持更多类型的口罩,包括但不限于非3M品牌的N95口罩、医用外科口罩等。支持用户添加假口罩图片样本和问卷问题。接入第三方机器学习API,与机器学习专家合作,提升图像识别能力。新增管理后台,方便审核用户反馈的图片样本和问卷问题。提高代码质量,重构优化代码结构,增加单元测试,使项目更稳定,易于扩展。欢迎试用我们的测试版