项目场景:
- List item
项目场景:
刚入职有一个拿来练手的项目:主机使用html连接到显示屏上,先需要过滤投放的内容。主要有以下几种解决方案
- 采用实时检测的方案,将采集的数据按帧上传到腾讯云cos,等待返回结果后决定上传这段时间的帧是否播放
- 采用先全部采集,然后将整个视频全部上传到腾讯云进行检测后等待返回结果。
环境、第3方库以及框架
是在瑞星微3588上进行实验,其有hdmi in 接口,hdmi out 接口,安装了ubuntu22.2系统。
第3方库选择了opencv,直接在开发板上编译,需要编译时需要打开ffmpeg,否则视频无法播放。这里建议先安装ffmpeg,否则会显示找不到ffmpeg.
框架采用v4l2和drm框架,这都是linux下音视频处理框架。后面进行解释
问题描述
-
为何选用v4l2框架
一般情况下如果是usb摄像头,可以直接调用opencv中的videocapture进行视频数据采集,但调用时发现无法找到设备。经过研究发现,opencv采用的是在Linux下采用的是v4l2框架,而v4l2框架是为UGV(即免驱摄像头)设计的。当插入摄像头后会自动的注册一个/dev/video0-8(rk3588)的文件描述符。v4l2是能够打开的,而hdmi 虽然也注册了一个了一个设备,但opencv 是无法打开的。所以只能直接实现v4l2。 -
输出框架的选择
输出框架选用drm框架,当然也rk有自己的开源库mpp,还提供了python版的可以通过命令:
pip install toybrick
进行安装。c库需要进行学习,所以选择了drm框架。现在绝大多数显示器都是继续该框架进行设计的。使用也比较简单。
-
检测框架的选择
由于公司不具备检测的能力,选择云端检测(这也是该项目最终流产的原因)。选择的腾讯的数据万象功能。注册就送6万次检测,可以微信、qq各注册一个。使用到了内容审核中视频检测功能 -
如何学习(以后慢慢补充)
1.v4l2 框架 流程固定,网上可以直接拿来用。
2.rkchip 有官方的论坛,好像叫toybrick,里面基本上有关于接口使用的方式,可以助力快速入门。
3.drm 的使用我看了一个博主的,有空回来贴上。
用到的一些技术
- 数据格式的转换,需要了解bgr,bgra,yuv444,yuv420等
- opencv的是使用,如何从内存中的地址取出并转化为mat
- 需要了解v4l2中的共享内存、select的监听技术。(这里存在一个bug,后面讲)。
- opecv如何从mat中获取到内存地址。
- linux下多线程、锁的理解
- 如何控制播放的速度等等。
小结
做下来感觉项目就是产生bug-解决bug的过程。接下来几章主要来讲实现,虽然流产了,但我会继续丰富项目内容。加油