【KV260视觉入门套件试用体验】2.PS端视频采集与FFMPEG编码开发测试 大信 ALSET (QQ:8125036) 感谢安富利科技和烧友烧网给予的XilinxKriaTM KV260视觉AI套件视觉入门套件试用机会。XilinxKriaTM KV260 开发板全称是Kria KV260 Vision AI Starter Kit。该开发套件主要应用之一是面向多媒体与视觉领域的开发。开发板硬件本身具备了强大的多媒体能力,开发板也提供了相应的开放工具,并且开发板提供的多种开发SDK,使得在该开发平台上开发多媒体应用轻松而快速,并且通过灵活的构建工具使得应用能够在KriaTMK260系统模块(SOM)进行快速批量部署。 从其硬件提供从音视频采集,视频编解码,图形图像处理多种能力,因此它在高级图形图像处理、高级成像、高级机器视觉、可以有广泛的适用。
一、开发测试目标介绍
KriaTMKV260的应用处理端(PS)包含了 ARM® Cortex®-A53 cores 四核处理器,以及带有硬编码的视频处理器VPU,可以从USB摄像头,文件,网络以及PL端的MIPI端获取视频的能力。并且可以通过VPU以及DSP处理器对视频图像进行处理,再输出到HDMI,DP接口上显示或者文件、网络流输出上。 本次开发的主要目标是测试该开发板PS端以及PL端视频采集以及视频编码等功能。以学习和验证该开发板的多媒体开发过程。
二、多媒体测试硬件连接
为了本次的测试,需要做一些硬件的连接,分别连接HDMI显示器用于图像或视频在板上的显示。连接有线网络用于视频流在以太网络上的传输。连接开发板带的mipi摄像头到 J7 口上,连接USB摄像头在USB口上。。 连接完成后,如下图所示:
三、系统摄像头驱动检查
在插入USB摄像头时,串口终端弹出如下信息,表示系统发现并识别到该USB设备:
接下来查看一下系统的USB设备树,使用命令 lsusb–t
在设备的驱动树上出现 uvcvideo类型,说明该摄像头被系统支持,能够正确的加载到系统里。 此时可以使用 v4l2-ctl 命令查看一下usb摄像头设备文件,命令如下 v4l2-ctl–list-devices:
可以看到在/dev/下出现了video0等视频输入设备。 当拔下USB摄像头,或者之前没有插入摄像头,输入同样命令时,显示是这样的:
即说明,系统没有视频输入设备。由此可见USB摄像头的热插拔,系统可以动态的加载相应的设备描述文件。 有了视频采集设备文件后,就可以进一步查看各个视频采集设备的进一步信息,输入v4l2-ctl -d /dev/video0 –all 命令,会显示如下视频采集设备信息:
对各个设备分别进行查看设备信息,其/dev/video1设备显示如下:
其/dev/media0 设备显示如下:
从设备信息中可以看到各个设备支持的视频采集参数,视频.
四、开发视频采集程序
确定好视频采集设备支持的视频格式信息后,就可以进行视频采集工作了。视频采集是视频应用开发的一个基础,一方面可以使用各种现成的视频采集工具,也可以使用系统提供的SDK进行采集。 代码主要使用linux的v4l2 SDK开发而成,程序支持两个功能,一个是使用v4l2枚举了摄像头所支持的格式以及画幅尺寸,帧率。第二个就是从设备中采集视频帧并把yuyv格式转还成yuvv格式,保存成为文件。 之所以使用v4l2的c++代码来实现视频采集,主要是为了后面方便继续增加开发其它功能,诸如对视频帧进行图像处理或者AI识别,并把识别的内容叠加入画面,再送去进行H264编码,推流等测试内容。 代码主体部分如下,包含设备初始化,查询设备信息,打开指定参数的设备控制句柄等:
工程另外一部分就是makefile 文件,这个文件你有ffmpeg SDK的配置,如果只编译视频采集功能,那么这部分是用不上的,但后续会用上,这里就留在上面了:
可见整个编译脚本也很简单。 然后在开发板上,直接编译:
顺利的得到了 v4l2_capture 目标板上的可执行文件。
五、板上执行视频采集
在上面编译成功的结果上,可以直接执行生成的可执行文件: v4l2_capture 可以看到输出如下使用帮助信息,是为了更好的使用执行程序而加入的命令行提示。
首先执行第一个命令,列出设备支持的采集视频帧类型与尺寸、帧率,使用命令./v4l2_capture –m list –d /dev/video0,可见到输出信息如下:
可见视频采集该摄像头为uvc驱动,支持两种视频格式类型,分别是mjpeg和yuyv 422格式。这里我们为得到视频流,采用第二种格式。 同样这里可以对其它视频设备,获取一下视频采集信息,比如/dev/video1 ,会返回什么信息呢:
可见这个设备不是一个有效的能采集到视频数据视设备,而它是有其它作用的一个视频设备。 探查完视频采集设备支持的采集视频信息格式后,就可以对有效的视频设备进行视频采集了,这里就执行第二个命令:./v4l2_capture –m capture –d/dev/video0 –o ./output.yuv 该命令的参数是m 模式:采集,d 使用设备:/dev/video0,-o输出到文件output.yuv
程序运行后,稍后就输出抓取到每帧的信息,此时表明正在采集视频,从连接到开发板的usb摄像头的指示灯上看,摄像头开启指示灯亮起。
六、查看视频采集的文件
上面采集程序运行后,会把采集到的数据保存成 yuv 格式的文件,此时可以把yuv文件传送到PC主机上,在主机上使用 yuvview 来查看采集到的原视频yuv数据显示效果。
打开 yuvview.exe 播放器软件,打开采集到的yuv数据文件,根据采集时设置的画幅大小,选择yuv420格式,再点播放则可以看到采集到的视频内容:
七、板上编译FFMPEG软件
为了后续更进一步的处理视频,ffmpeg是一款常用的视频开源软件,功能非常强大,适合裁剪和二次开发。因此这里使用该开源工程,在板上编译出ffmpeg 与ffmpeg SDK。 先从github 上来取ffmpeg 工程最新源码: 在板上可以直接拉取到源码,拉取完源码本地文件如下:
在开发板上安装必要的编译管理工具:libomxil, cmake sudo apt-get install libomxil-bellagio-dev sudo apt-get install cmake
sudo apt install mesa-utils
安装编译依赖的SDK:build-essential,
sudo apt-get install build-essentiallibgl1-mesa-dev
安装完编辑基本工具和依赖的SDK后,就可以对源码项目对本开发板进行编译配置: 命令如下: ./configure --prefix=/usr/share--target-os=linux --cc=gcc --cxx=g++ --nm=nm --strip=strip --ar=ar--ranlib=ranlib --arch=aarch64 --libdir=/usr/lib/aarch64-linux-gnu/ --incdir=/usr/include/aarch64-linux-gnu--enable-omx --enable-opengl --enable-sdl2 --enable-gpl --enable-libx264--enable-libx265 --disable-x86asm --disable-static --enable-shared--enable-small --enable-ffmpeg --enable-ffplay --enable-version3 以上编译配置,加入硬件编解码库的支持,加入h264, h265的支持,加入动态链接库与显示库的支持,并且生成 ffmpeg,ffplay 等工具。
编译配置完成的显示如下:
然后就可以开始编译,可以找一个饭点时间,启动编译,因为它需要编辑约50分钟:
等吃完饭回来,查看编译结果,显示结果如下,则表明编译一切顺利,如果出现异常,那么就很不幸,解决完问题后,又得重新编译….
最后把编译出的成果,即工具文件与SDK,分别安装到系统中去,以便随时可以使用,这里可以用make install 一键来完成,但我更喜欢手动来完成这一步: 即把 ffmpeg ,ffplay 复制到 /usr/bin 目录,把各个库目录内生成的动态连接库复制到/usr/lib 下,并做好短文件的链接指向,否则一些依赖ffmpeg的工程,无法找到ffmpeg库。最后把 各包的头文件与其目录一起复制到 /usr/include 目下,则手动的完成了ffmpeg工具与SDK的部署安装。
八、测试ffmpeg板上运行
接着使用上面自己编译好的ffmpeg来进行一系列的ffmpeg功能的测试,以验证ffmpeg工具在该开发板上的运行效果: 使用ffmpeg 采集usb摄像头视频: ffmpeg-f v4l2 -s 640*480 -r 10 -i /dev/video0 test.yuv
使用ffmpeg 对yuv 视频数据进行 h264 编码: ffmpeg -s 640*360-r 15 -pix_fmt yuv420p -f rawvideo -i test.yuv test.264
使用ffmpeg 对yuv 视频数据进行 h265 编码: ffmpeg -s 640*360 -r 15 -pix_fmtyuv420p -f rawvideo -i test.yuv test.265
把编码出的视频,传输到主机上,播放测试,编码效果很好:
九、视频开发测试总结
本次通过连接USB摄像头,顺利完成测试PS侧的视频采以及ffmpeg源码在本开发板上的编译过程,初步测试了视频采集与视频h264编码,h265编解码等功能,对板上视频编解码有了直观的了解。并且使用开发板内自带的编码器测试视频编码,以及使用ffmpeg SDK开发测试,测试总体顺利,能够非常快速的建立开发板上PS端的视频采集与处理过程。。 从测试视频编码的性能结果可以初步的体验到了该开发平台的视频强大性能。通过编译出ffmpeg这个工具也为后续的各种高级视频应用开发构建了基础的工作。
|