作者:黄明明
英特尔边缘计算创新大使
之前写了很多关于Java 在OpenVINO 中的引用,有目标检测、道路分割、模型加速等,但虽然写了这么多,也似乎没有过多提及到一些实际生活上的案例。都说创新源于生活,于是乎就想做一些有意思的东西,想了想,还真有一个案例似乎可以做出来。我们在平常长途回家,大多数多会上高速,但高速一般在节假日都会特别堵。所以这时候走应急车道的车还真不少,每每看到这些不排队的车主,真恨的有些牙痒,于是想结合OpenVINO 来实现一个类似于应急车道识别违法的案例,由于这篇文章没有代码部分,所以文章只讲述大致的思路,以及最终结果展示。
算力平台:为整体的想法提供算力和硬件支撑
识别模型:通过识别模型能够识别应急车道、车辆、车牌
举报系统:通过筛选出来的违规图片,进行自动上传。
一开始打算用树莓派去做,后面考虑到树莓派这东西现在溢价严重得很,基本上都按传家宝的价格买。故使用研扬科技针对边缘 AI 行业开发者推出的『哪吒』(Nezha)开发套件,以信用卡大小(85 x 56mm)的开发板-『哪吒』(Nezha)为核心,『哪吒』采用 Intel N97 处理器(Alder Lake-N),最大睿频 3.6GHz,Intel UHD Graphics 内核GPU,可实现高分辨率显示;板载 LPDDR5 内存、eMMC 存储及 TPM 2.0,配备 GPIO 接口,支持 Windows 和 Linux 操作系统,这些功能和无风扇散热方式相结合,为各种应用程序构建高效的解决方案,专为入门级人工智能应用和边缘智能设备而设计。英特尔开发套件能完美胜人工智能学习、开发、实训、应用等不同应用场景。适用于如自动化、物联网网关、数字标牌和机器人等应用。售价 RMB 999起, 『哪吒』开发套件Nezha intel x86开发板板载Alder N97 可Win10/Ubuntu N97 4G+32G。
解决算力平台之后,我们就需要对模型的选型了,毕竟需要识别车道,这个才是关键。一开始想着实现车道识别可以使用最基础的OpenCV来实现,但是发现网上的资料和代码太过紊乱,且代码量也过于庞大,需要调节的参数五花八门,需要优化和移植的成本也不是一丁点。所以思考再三,在条路似乎不太符合快速偷懒实现的宗旨。于是打算基于之前road-segmentationOpenVINOOpenVINO-adas-0001模型。road-segmentation-adas-0001模型是使用了Open Model Zoo的预训练的道路场景分割模型。该模型识别四个类别:背景、道路、路缘和标记。而对于应急车道而言,我们只需要将车道提取出来。
如何识别四个类别:背景、道路、路缘和标记等操作可以看之前的文章:《英特尔开发套件在Java环境实现ADAS道路识别演示 | 开发者实战》
那么在高速上面,一般是两车道、三车道、四车道,而最右边则是应急车道,而绝大部分的车都会在正常车道中行驶,就如下图:
所以我们可以通过OpenVINO 的road-segmentation-adas-0001 模型将所有道路进行识别。
在通过模型运算之后,我们标记出来的道路是这样的,其他道路线我们用黄色表示,应急车道线我们用红色表示,这样我们就完成了最基本的需求。
同样,对于车辆识别和提取,我们也可以通过OpenCV来完成,也可以通过OpenVINO notebooks 中的教程(https://docs.openvino.ai/2024/notebooks/218-vehicle-detection-and-recognition-with-output.html)来实现。
我们现在拿到了车道信息和车辆信息,这时候我们只需要通过运算,就可以知道车辆是否走应急车道,下面是效果图。
当然实际上的举报还是比较困难的,之前是想抓取举报平台的数据然后直接举报,但实际上比较严格,比如需要前后两张照片、照片需要位置信息,需要手机验证等,虽然这些都不是技术难点,但成本增加了,这需要两台手机一前一后拍摄,然后上传,效果图如下:
所以目前只做了车辆在应急车道的识别、车牌提取、车辆提取等工作,这些工作均通过Java 平台结合OpenVINO -Java-API 实现,仓库地址//github.com/Hmm466/OpenVINO-Java-API
后续笔者将结合OpenVINO -Java-API 实现更多案例,同时也请大家加入到项目中来,共同促进Java在AI领域的应用。
除此之外,为了方便大家了解并快速掌握 OpenVINO 的使用,我们还提供了一系列开源的 Jupyter notebook demo。
运行这些 notebook,就能快速了解在不同场景下如何利用 OpenVINO 实现一系列、包括计算机视觉、语音及自然语言处理任务。
全部0条评论
快来发表一下你的评论吧 !