视界之声这个项目着实做了很久。智慧盲人相机,这个google都在攻克的产品难关对我们一群大一萌新来说颇有些挑战。前后端通信回调机制、Python多进程多线程 调度机制、帧率处理、多语言调用......见过没见过的bug此起彼伏。第一次在实验室熬 夜、第一次建立自己的网页、第一次操持一个产品的落地,不易中亦充满新鲜和乐趣。
技术上,我认识到实际产品落地中,CPU资源和运行速度是极为关键的,而这方面Python多线程锁机制具有劣势;Python多进程涉及到进程阻塞、freeze异常、重复启动限制、内存访问混乱、队列通信等复杂机制;网页调用用户设备涉及复杂的安全协议;传统CV相对于神经网络模型,具有帧率上的优势,但在精度上不够;语音识别检测用户话语起止是很复杂的。这次星火杯向我们展示了科研与开发的乐趣与艰辛,也提供了宝贵的经验。
从零到一往往是一个很困难的过程。刚开始的时候,我们并不了解前后端的运作方式,也不了解什么是IP地址,什么是域名,以及如何把网站部署到服务器上,如何与域名联系起来。在遇到这些问题的时候,事情进展的并不顺利。不过我们还是一步步克服了困难,并且最终理解了网站的运作方式。
关于网站的制作,我认为做出一个网站本身不是一个困难的过程,真正的难点在于如何把美化和细节之处做好。比如如何让网站在不同大小的屏幕上呈现出不同的样子,如何切换不同的页面,以及如何在网站上呈现足够的信息等等。我们一直把精益求精当做我们的信条,所以我们会把网站和产品优化再优化,来让我们的用户得到更丝滑的体验。
我们做网站的目的呢,就是为了让大家了解我们的产品,我们的团队,我们对未来的畅想。也欢迎大家把我们的产品推荐给我们身边有需要的人们,我们也希望能有更多人从我们的作品中受益。
在参加此次竞赛过程中,我们首先尝试了基于Qt的PC端UI制作,后续转向 Android封装。然而此过程并不顺利,Android封装对接核心工作涉及广泛的专业知识, 包括计算机视觉框架接口兼容、ARM架构源码编译等。由于Android封装进展困难, 后期我还参与了团队作品的Setup安装程序制作。
虽然很遗憾在前期我探索的原生及混合式Android端应用并未落地,但之后我尝试的PWA应用成功在Android端实现,让智慧盲人相机达成真正的移动化!这次星火杯真真让我收获颇丰。
在这个项目中,我负责实现我们产品在用户Windows端的部署和实现。我起初用gradio部署一个简易网页实现了“视界之声”智慧盲人相机的基础功能,这个工作的后续由龚和东完善,他最终在网页端实现了我们产品3.0版本的全部功能。
之后我将2.0和3.0版本产品都封装成为.exe形式。一开始我尝试用pyinstaller直接封装,但由于我们产品要求低延迟,高精度和高清晰度,pyinstaller直接封装的效果很差,形成的.exe不仅存储过大而且打开时间过慢。之后我写了一个C++程序模拟命令行直接运行Python脚本(我们的产品核心是.py文件),并用conda创建一个虚拟环境把脚本所需要的环境和配置以及脚本本身一同打包,并由杨志航写了一个setup.exe以便用户一键下载和安装我们的Windows端产品。
同时,我还编写了用户使用手册和注意事项,让用户可以快速了解并学会使用我们的产品。
在这个项目中,我认识到了即便是学习计算机相关知识的人,他们的电脑性能水平差距也会很大,在此基础上我去比较了各种场景识别模型的准确率、计算消耗和模型复杂度,最后选择了在place365上使用resnet18来训练场景识别,最后达到的效果虽然还算不错,但仍有很大进步的空间。