此系统的最初设计目标是用于车路协同等场景,开发板在前端进行采集编码,发送到后端处理。
后来也将此系统用于驾驶员行为监控(物流公司等对驾驶员的危险驾驶监控)
开发语言c++
最开始采集端是树莓派,后来觉得价格过高,性价比考虑,采集端(编码端)选用了地平线旭日3开发板。接收端可以跨linux和windows。
功能包括:
1)从摄像头模块采集视帧
可以用ffmpeg进行采集(采集端是电脑、或者树莓派或其它开发板等时);也可以用地平线芯片硬件API直接采集(采集端是地平线开发板时)。
2)缩放视频。
可以用ffmpeg进行缩放(采集端是电脑、或者树莓派或其它开发板等时);也可以用地平线芯片硬件API直接缩放(采集端是地平线开发板时,速度更快)
3)将视频编码成h264
可以用ffmpeg进行编码(采集端是电脑、或者树莓派或其它开发板等时),这种软件的编码的方式,在720p或者1080P高清时,在电脑上速度尚可,在树莓派上编码速度明显不够。在树莓派上用树莓派的硬件编码,速度还行。
实际使用时,在地平线开发板上接了两路usb摄像头和一个MIPI摄像头。用地平线的硬件编码API,同时对三路码流进行编码,性能能够达到使用需求。
4)原始音频采集
使用alsa库采集的pcm声音。
5)声音的编码
使用lame库把原始的声音编码成mp3
6)视频和声音的混合
把h264和mp3混合成mp4文件。
7)文件的滚动存储
地平线开发板接硬盘,音视频编码成的mp4文件, 5分钟一个mp4文件,超过一个月的文件自动删除。
8)动态码流传输
当某些情况触发时,编码端向服务器即时发送h264码流,以及mp3声音流。网络是5G网络。发送追求最小的延时,其中分辨率、帧率、码流、gopsize可以根据网络状况等,进行动态的调整。比如编码端感觉网络有点拥堵,就通知接收端要降低分辨率和码流,发送新的分辨率、帧率、码流等参数给解码端,等解码端完成参数的更新调整,编码端发送新的参数的视频流到解码端。
接收端可以马上播放收到的视频流和声音。
经测试,采集编码到接收端播放几乎感觉不到有延时。
9)驾驶员手离开方向盘监控
这是危险驾驶监控的一项。驾驶员手离开方向盘时,会马上提示他,并马上把码流发送给服务端,同时作出记录。
功能实现上分两步,第一步,在画面中检测到方向盘,第二步,切割出方向盘图片,判断方向盘上有没有手。
在画面中检测到方向盘用的yolov5,判断方向盘上有没有手用的resnet进行分类。训练框架是pytorch。
先在训练服务器上用labelimg对大批量驾驶室的图片进行方向盘标注,训练出方向盘检测模型。然后用此模型剪切出所有方向盘的方框图片。然后把方向盘图片进行分类,分为有手的方向盘图片和没有手的方向盘图片,分别放在两个目录下,然后进行分类模型训练。
训练的模型经测试准确率接近100%,分别转换成onnx通用模型。然后用地平线的模型转换工具,把onnx模型转换成地平线专有的bin模型方式。
然后用地平线的模型推导API,调用模型,对传进来的摄像头图片进行检测以及分类。
经测试,检测及分类,模型推导使用的时间都是40毫秒以内。
10)恶劣天气(大雾、大雪、大雨)判断
和9)类似,不再赘述。
11)还有其它一些比如车流量判断、驾驶员长时间不动等等判断,不再赘述。
这些工作都是由我本人独立完成
点击空白处退出提示












评论