【摘要】通过本帖你将了解到:
(1)KV260运行Smart-Camera例程智能相机四种工作模式的详尽配置与指令操作步骤;
(2)KV260运行Smart-Camera例程时常见的Error报错与避坑办法。
-------------------------以下为正文-------------------------------
前文研究一了番KV260的Micro-SD卡选型提速问题,算是搞优化研究绕了个弯,现在我们回到学习KV260开发流程的主线上来,尝试跑通AMD官方提供的Smart-Camera例程。
先贴一下官网对该例程的简介:
这款 UltraHD 智能相机可通过网络和显示功能实现人脸检测 。它具有内置的机器学习功能,可用于行人检测、面部检测以及通过本地显示和 RTSP 流进行计数的应用。
系统框图看一眼:
从系统框图可以看出来,这款例程的功能是挺强大的:
它的输入视频源可以是MIPI CSI2接口的图像传感器、Micro-SD卡中的视频文件或是USB接口的网络摄像头;
它的视频输出方式可以是HDMI显示、DisplayPort显示或RTSP视频流网络输出。
需要注意的是,它的设计方案中原本是可以 接收Pmod I2S接口的音频输入并与RTSP视频通过网络同步输出 ,但是由于 存在导致kernel crash的Bug,在目前系统版本(22.1 Update3及以前)中暂不支持使用 。
由于输入输出源各有三种,一组合能有九种工作模式。由于俺手头暂时没有合适的USB接口网络摄像头,也只有HDMI线缆没有DisplayPort视频连接线,因此这一回合咱们只跑通下面四种工作模式就行:
(1)MIPI CSI2接口的图像采集+人脸检测+H.264编码压缩+HDMI实时显示;
(2)MIPI CSI2接口的图像采集+人脸检测+H.264编码压缩+RTSP视频流网络传输;
(3)已有视频文件解码+车辆检测+H.264编码压缩+HDMI实时显示;
(4)已有视频文件解码+车辆检测+H.264编码压缩+RTSP视频流网络传输。
好,看完了想好了,那就开干,开始Smart-Camera例程的实践操作吧:
在前面几回合里AR1335摄像头模组已硬件连接在MIPI输入端口、UART端口也已配置准备好,这些就不重复说了。
首先要确认的是KV260的网线是否正常连接进了网络 。
嗯,这几天俺正赶上出差,酒店里没电脑显示器只连了无线WIFI却不知道有线网口在哪里咋办,我一瞅墙壁上黑不溜秋的智能电视屏,有了主意:把电视一抬,嗯,果然屁股后面有网口,把KV260的网线毫不客气怼进去;再把KV260的HDMI口接上电视,调整一下电视机的信号源。嗯,完美,KV260的显示屏有了,网络也有了。Ubuntu系统界面里浏览器打开个百度网页瞅一瞅:嗯,网络通信正常~
在开始Ubuntu应用开发前,这里有条我个人的建议: 建议将Ubuntu系统电源选项中的自动休眠和关闭屏幕功能先禁用掉 ,以免指令执行观察过程中屏幕忽然不显示了或系统休眠了。
根据《Setting Up the Board and Application Deployment》中的NOTE说明, 建议采用UART输入命令行的方式启动Smart-Camera应用,而非GNOME桌面方式 。
好的,那么就用Putty打开串口,输入用户名密码后,会有系统信息展示:
然后在Putty里敲命令安装xlnx-config snap,这是个可用于Xilinx ZCU102/4/6和KV260主板的系统管理工具。敲入的指令是:
sudo snap install xlnx-config --classic --channel=2.x
然后运行setup脚本语句:sudo xlnx-config.sysinit
是否要continue,当然是了。
还会问你要不要 添加Xilinx PPA(Personal Package Archives) ,也选是就是了。
然后又有提示确认,再Enter一下,等下载更新完成。
大概等了七分钟,提示Enter继续:
再过一两分钟,提示要不要立即 upgrade系统 ,老子选否(偷偷告诉你,这里 选是的话前面会有坑 ,而且是好几个……):
然后由于KV260 Ubuntu 22.04的各项应用都是部署在Docker中的,所以 Docker是必须安装的 。
遵照Dock官网说明先建立Dock仓库:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https:
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)"
signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
运行Dock安装指令,会提示将占用350MB硬盘空间,按"Y"确认一下:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
跑个Hello world程序确认Docker安装运行正常:
sudo docker run hello-world
然后继续遵照教程输入指令:
sudo groupadd docker
sudo usermod -a -G docker $USER
继续执行《Setting Up the Board and Application Deployment》中的“Docker-Based Application Preparation”章节:
先拉取smartcam Docker镜像到本地:
docker pull xilinx/smartcam:2022.1
-------------------这里可以吃根冰棍等上五分钟------------------
嗯,教程里还说如果Micro-SD卡空间不够,可以用以下指令删除多余的Docker容器,我这里没必要执行这个操作:
docker rmi --force < other containers>
可以查看下Docker容器中已有的Image:
docker images
然后安装xrt zoclr驱动(这一步并不是必须的,只是在同一个SD卡上跑多个应用时才必须执行),敲指令:
sudo apt install xrt-dkms
会有一次提示确认,告诉你这步操作会占用119MB硬盘空间,填Y就是了。
-------------这里是看抖音等下载安装完成的漫长时间-------------
Ubuntu日期时间设置也顺便校准一下:
sudo date --set “02 September 2023 19:24:50”
然后开始执行《Setting Up the Board and Application Deployment》中的“Downloading and Loading the Application Firmware”章节:
先下载kv260-smartcam固件包。敲入指令:
sudo apt search xlnx-firmware-kv260
安装smart-camera例程固件:
sudo apt install xlnx-firmware-kv260-smartcam
看看是否有APP正在运行:
sudo xmutil listapps
可以看到k26_starter_kits的 Active_slot为0代表正在运行。
停止k26_starter_kits的运行:
sudo xmutil unloadapp k26-starter-kits
关闭一下Ubuntu系统桌面的显示:
sudo xmutil desktop_disable
运行kv260-smartcam APP:
sudo xmutil loadapp kv260-smartcam
好像有点warning,Ctrl+C先不管它,继续往下做。
让Docker跑起来:
docker run \
--env="DISPLAY" \
-h "xlnx-docker" \
--env="XDG_SESSION_TYPE" \
--net=host \
--privileged \
--volume="$HOME/.Xauthority:/root/.Xauthority:rw" \
-v /tmp:/tmp \
-v /dev:/dev \
-v /sys:/sys \
-v /etc/vart.conf:/etc/vart.conf \
-v /lib/firmware/xilinx:/lib/firmware/xilinx \
-v /run:/run \
-it xilinx/smartcam:2022.1 bash
Smart-Camera应用已经运行了,怎么看视频采集的效果呢?
有好几种方式,我们先看连接在KV260主板上HDMI显示器的输出效果。
smartcam --mipi -W 3840 -H 2160 --target dp
咦?显示器不支持这么高的分辨率,那就调低点吧:
smartcam --mipi -W 1920 -H 1080 --target dp
嘿嘿,跑起来了,大大电视显示屏上有了图像!!!耶!
嗯,这就是把“ MIPI CSI2接口的图像采集+人脸检测+H.264编码压缩+HDMI实时显示 ”的工作模式跑通了。
然后再采用MIPI RTSP server视频流网络传输输出的模式验证一下。
这需要一台 与KV260处于同一子网的电脑作为RTSP客户端 ,建议 在电脑上安装FFmpeg软件以解析RTSP数据流 。我手上笔记本电脑是Windows 11系统,安装的是FFmpeg 6.0版,其他操作系统适配版本可以在https://ffmpeg.org/download.html这个网址中对应下载。
先在Uart终端Ctrl +C停止KV260的HDMI显示输出指令运行,然后敲输出到rtsp的指令:
smartcam --mipi -W 3840 -H 2160 --target rtsp
可以看到KV260的rtsp输出图像网址为rtsp://192.168.0.104:554/test。
在FFmpeg安装目录下的bin文件夹中打开命令行终端,输入指令:
./ffplay rtsp://192.168.0.104:554/test
防火墙弹窗允许一下:
嗯,“ MIPI CSI2接口的图像采集+人脸检测+H.264编码压缩+RTSP视频流网络传输 ”的工作模式也跑通了,笔记本电脑上接收到了8K视频30fps的实时显示。
不过图像对焦不太清晰,响应也有些延迟。嗯,这一回合先跑通数据流功能就行,性能图像质量优化有点BUG这些细节就放到后面的篇幅里再研究汇报给大家吧~ 留点悬念嘛,嘿嘿~
教程中还有一段是讲如果 没有摄像头,可以下载并转换视频源到指定文件夹中,照样也可以让Smart-Camera例程跑起来 。
不过这回,我想看看Smart-Camera例程中自带的第三种——ssd车辆检测模型是啥效果。
好,开搞:
先输入Crtl+C终止MIPI图像记录输出,并输入Exit退出smartcam运行;
然后回退切换回k26-starter-kits APP,重新使能Ubuntu桌面,重新登录系统。
sudo xmutil unloadapp kv260-smartcam
sudo xmutil listapps
sudo xmutil loadapp k26-starter-kits
sudo xmutil desktop_enable
然后在笔记本电脑上去推荐链接中下载ADAS SSD AI Task视频MP4文件,并重命名为《ADAS_AI.mp4》。
到FFmpeg安装目录下的bin文件夹中打开命令行终端,输入格式转换指令:
./ffmpeg -i ADAS_AI.mp4 -c:v libx264 -pix_fmt nv12 -vf scale=1920:1080 -r 30 ADAS_AI.nv12.h264
成果就是这个ADAS_AI.nv12.h264文件了:
然后我采用了最古老的方式——通过U盘将这个视频文件拷入KV260系统中的“/tmp/”目录下,也可以用scp或ftp方式拷贝,熟悉操作的朋友拷起来会更快捷。
然后把Ubuntu桌面关闭,重新开启Smart-Camera例程:
sudo xmutil desktop_disable
sudo xmutil unloadapp k26-starter-kits
sudo xmutil listapps
sudo xmutil loadapp kv260-smartcam
docker run \
--env="DISPLAY" \
-h "xlnx-docker" \
--env="XDG_SESSION_TYPE" \
--net=host \
--privileged \
--volume="$HOME/.Xauthority:/root/.Xauthority:rw" \
-v /tmp:/tmp \
-v /dev:/dev \
-v /sys:/sys \
-v /etc/vart.conf:/etc/vart.conf \
-v /lib/firmware/xilinx:/lib/firmware/xilinx \
-v /run:/run \
-it xilinx/smartcam:2022.1 bash
将“ 已有视频文件解码+车辆检测+H.264编码压缩+HDMI实时显示 ”工作模式运行起来,其中车辆检测 ssd模型的指定为“-a ssd” ,之前U盘拷入的文件是放在Ubuntu系统的 /tmp/ 目录下,和Docker空间是共享对应的:
smartcam --file ./tmp/ADAS_AI.nv12.h264 -i h264 -W 1920 -H 1080 -r 30 -a ssd -R --target dp
很好,视频文件的图像显示正常,车辆也被自动检测出来以蓝框和文字标识:
由于加了“-R”指令标识,串口这边会每秒输出帧率信息,可以看出fps接近30没毛病。
Ctrl+C再换一种模式瞅瞅 —— 已有视频文件解码+车辆检测+H.264编码压缩+RTSP视频流网络传输 :
smartcam --file ./tmp/ADAS_AI.nv12.h264 -i h264 -W 1920 -H 1080 -r 30 -a ssd -R --target rtsp
嗯,没啥问题,一切正常:
好,这一回合的KV260试用体验就先告一段落,Smart-Camera例程跑通了,验证了四种不同的工作模式,当然,这并不是Smart-Camera例程全部的本领。最近老刘到处出差忙得很,一些技术细节和疑点也没有功夫展开。更多的精彩,且待老刘下回分解吧~
--------------------------收尾总结彩蛋---------------------------
要点1:因存在BUG,截止发稿当前Smart-Camera例程中的 音频设计暂不建议使用 。
要点2:要想顺畅干活跑应用,KV260的网络要配置好,Ubuntu系统电源选项中的 自动休眠和关闭屏幕功能建议禁用掉 ,老刘挺推荐用电视机大屏幕调试显示应用的,哈哈。
要点3:建议用UART命令行的方式启动Smart-Camera应用,不建议Ubuntu桌面方式。
要点4:在xlnx-config.sysinit过程中,Xilinx PPA是要装的,但小白新手强烈警告 千万别upgrade系统 ! 千万别upgrade系统 ! 千万别upgrade系统 !重要的事情说三遍!
要点5:以下是Docker的无脑安装指令序列:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https:
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https:
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo groupadd docker
sudo usermod -a -G docker $USER
要点6:以下是与Smart-Camera应用相关的无脑操作指令序列:
docker pull xilinx/smartcam:2022.1
sudo apt search xlnx-firmware-kv260
sudo apt install xlnx-firmware-kv260-smartcam
sudo xmutil listapps
sudo xmutil unloadapp k26-starter-kits
sudo xmutil desktop_disable
sudo xmutil loadapp kv260-smartcam
docker run
--env="DISPLAY"
-h "xlnx-docker"
--env="XDG_SESSION_TYPE"
--net=host
--privileged
--volume="$HOME/.Xauthority:/root/.Xauthority:rw"
-v /tmp:/tmp
-v /dev:/dev
-v /sys:/sys
-v /etc/vart.conf:/etc/vart.conf
-v /lib/firmware/xilinx:/lib/firmware/xilinx
-v /run:/run
-it xilinx/smartcam:2022.1 bash
HDMI或DP显示用这句:
smartcam --mipi -W 1920 -H 1080 --target dp
想看RTSP视频流网络传输效果的话,UART向KV260发送的指令语法格式是这样的:
smartcam --mipi -W 3840 -H 2160 --target rtsp
电脑显示端利用ffplay显示视频流的指令格式是这样的:
./ffplay rtsp://192.168.0.104:554/test
想要播放视频文件的话,先要用ffmpeg软件做文件格式转换:
./ffmpeg -i ADAS_AI.mp4 -c:v libx264 -pix_fmt nv12 -vf scale=1920:1080 -r 30 ADAS_AI.nv12.h264
然后被播放文件得拷入KV260系统中的“/tmp/”目录里,才能被Docker共享调用到 ,运行时下面这句是视频文件的HDMI或DP显示示例:
smartcam --file ./tmp/ADAS_AI.nv12.h264 -i h264 -W 1920 -H 1080 -r 30 -a ssd -R --target dp
把--target后面改成rtsp就换成网络视频传输了,参数选项 -a是指定AI检测模型 , -R是每秒显示帧率 :
smartcam --file ./tmp/ADAS_AI.nv12.h264 -i h264 -W 1920 -H 1080 -r 30 -a ssd -R --target rtsp
最后是我这边有记录的三个坑,愿入尽入俺老刘绝不拦着:
-----------------------------1号坑-------------------------------
如果忘记关闭Ubuntu系统桌面的显示,那么在试图运行smartcam观察HDMI显示效果时会报Error: Monitor doesn’t support resolution…
-----------------------------2号坑-------------------------------
如果执行xlnx-firware-kv260-smartcam安装指令时出现Unable to locate package
的报错,重新把sudo xlnx-config.sysinit
过程执行一遍。
-----------------------------3号坑-------------------------------
这是安装完Xilinx PPA后在是否upgrade系统提示中选填Y的话,将会出现的数个坑之一,显示“blk_update_request: I/O error, dev mmcblk1…
”和“mmcblk1: recovery failed
”等报错信息。具体原因老刘还没来得及研究。反正新手建议upgrade系统提示中选填n,暂时打不过咱就躲一躲嘛,先打游击战运动战壮大实力,实力强大了咱再回来消灭敌顽不迟嘛~
当然,若有老手高手大神路过也欢迎留言指教~ 非常感谢~~
老刘记事儿更多精彩欢迎订阅关注扫一扫: