智能硬件william hill官网
直播中

patton016

5年用户 15经验值
擅长:可编程逻辑
私信 关注

【KV260视觉入门套件试用体验】老刘记事儿KV260初体验之跑通Smart-Camera例程(四)

【摘要】通过本帖你将了解到:

(1)KV260运行Smart-Camera例程智能相机四种工作模式的详尽配置与指令操作步骤;

(2)KV260运行Smart-Camera例程时常见的Error报错与避坑办法。

-------------------------以下为正文-------------------------------

前文研究一了番KV260的Micro-SD卡选型提速问题,算是搞优化研究绕了个弯,现在我们回到学习KV260开发流程的主线上来,尝试跑通AMD官方提供的Smart-Camera例程

先贴一下官网对该例程的简介:

这款 UltraHD 智能相机可通过网络和显示功能实现人脸检测 。它具有内置的机器学习功能,可用于行人检测、面部检测以及通过本地显示和 RTSP 流进行计数的应用。

系统框图看一眼:
image.png

从系统框图可以看出来,这款例程的功能是挺强大的:

它的输入视频源可以是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系统电源选项中的自动休眠和关闭屏幕功能先禁用掉 ,以免指令执行观察过程中屏幕忽然不显示了或系统休眠了。
image.png

根据《Setting Up the Board and Application Deployment》中的NOTE说明, 建议采用UART输入命令行的方式启动Smart-Camera应用,而非GNOME桌面方式

好的,那么就用Putty打开串口,输入用户名密码后,会有系统信息展示:
image.png

然后在Putty里敲命令安装xlnx-config snap,这是个可用于Xilinx ZCU102/4/6和KV260主板的系统管理工具。敲入的指令是:
sudo snap install xlnx-config --classic --channel=2.x
image.png

然后运行setup脚本语句:sudo xlnx-config.sysinit
image.png

是否要continue,当然是了。
image.png

还会问你要不要 添加Xilinx PPA(Personal Package Archives) ,也选是就是了。

然后又有提示确认,再Enter一下,等下载更新完成。

大概等了七分钟,提示Enter继续:
image.png

再过一两分钟,提示要不要立即 upgrade系统 ,老子选否(偷偷告诉你,这里 选是的话前面会有坑 ,而且是好几个……):
image.png

然后由于KV260 Ubuntu 22.04的各项应用都是部署在Docker中的,所以 Docker是必须安装的

遵照Dock官网说明先建立Dock仓库:

sudo apt-get update
image.png

sudo apt-get install ca-certificates curl gnupg
image.png

image.png

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
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

image.png

运行Dock安装指令,会提示将占用350MB硬盘空间,按"Y"确认一下:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

image.png

image.png

image.png

跑个Hello world程序确认Docker安装运行正常:
sudo docker run hello-world
image.png

然后继续遵照教程输入指令:

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

-------------------这里可以吃根冰棍等上五分钟------------------
image.png

嗯,教程里还说如果Micro-SD卡空间不够,可以用以下指令删除多余的Docker容器,我这里没必要执行这个操作:
docker rmi --force < other containers>

可以查看下Docker容器中已有的Image:
docker images
image.png

然后安装xrt zoclr驱动(这一步并不是必须的,只是在同一个SD卡上跑多个应用时才必须执行),敲指令:
sudo apt install xrt-dkms

会有一次提示确认,告诉你这步操作会占用119MB硬盘空间,填Y就是了。

-------------这里是看抖音等下载安装完成的漫长时间-------------
image.png

image.png

Ubuntu日期时间设置也顺便校准一下:
sudo date --set “02 September 2023 19:24:50”
image.png

然后开始执行《Setting Up the Board and Application Deployment》中的“Downloading and Loading the Application Firmware”章节:

先下载kv260-smartcam固件包。敲入指令:
sudo apt search xlnx-firmware-kv260
image.png

安装smart-camera例程固件:
sudo apt install xlnx-firmware-kv260-smartcam
image.png

看看是否有APP正在运行:
sudo xmutil listapps
image.png

可以看到k26_starter_kits的 Active_slot为0代表正在运行。

停止k26_starter_kits的运行:
sudo xmutil unloadapp k26-starter-kits
image.png

关闭一下Ubuntu系统桌面的显示:
sudo xmutil desktop_disable
image.png

运行kv260-smartcam APP:
sudo xmutil loadapp kv260-smartcam
image.png

好像有点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

image.png

Smart-Camera应用已经运行了,怎么看视频采集的效果呢?

有好几种方式,我们先看连接在KV260主板上HDMI显示器的输出效果。

smartcam --mipi -W 3840 -H 2160 --target dp

image.png

咦?显示器不支持这么高的分辨率,那就调低点吧:
smartcam --mipi -W 1920 -H 1080 --target dp
image.png

嘿嘿,跑起来了,大大电视显示屏上有了图像!!!耶!
image.png

嗯,这就是把“ 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
image.png

可以看到KV260的rtsp输出图像网址为rtsp://192.168.0.104:554/test。

在FFmpeg安装目录下的bin文件夹中打开命令行终端,输入指令:
./ffplay rtsp://192.168.0.104:554/test
image.png

防火墙弹窗允许一下:
image.png

嗯,“ MIPI CSI2接口的图像采集+人脸检测+H.264编码压缩+RTSP视频流网络传输 ”的工作模式也跑通了,笔记本电脑上接收到了8K视频30fps的实时显示。
image.png

image.png

不过图像对焦不太清晰,响应也有些延迟。嗯,这一回合先跑通数据流功能就行,性能图像质量优化有点BUG这些细节就放到后面的篇幅里再研究汇报给大家吧~ 留点悬念嘛,嘿嘿~

教程中还有一段是讲如果 没有摄像头,可以下载并转换视频源到指定文件夹中,照样也可以让Smart-Camera例程跑起来
image.png

不过这回,我想看看Smart-Camera例程中自带的第三种——ssd车辆检测模型是啥效果。
image.png

image.png

好,开搞:

先输入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

image.png

然后在笔记本电脑上去推荐链接中下载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

image.png

image.png

image.png

成果就是这个ADAS_AI.nv12.h264文件了:
image.png

然后我采用了最古老的方式——通过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

很好,视频文件的图像显示正常,车辆也被自动检测出来以蓝框和文字标识:
image.png

由于加了“-R”指令标识,串口这边会每秒输出帧率信息,可以看出fps接近30没毛病。
image.png

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

嗯,没啥问题,一切正常:
image.png

image.png

好,这一回合的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://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

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

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…
image.png

-----------------------------2号坑-------------------------------

如果执行xlnx-firware-kv260-smartcam安装指令时出现Unable to locate package的报错,重新把sudo xlnx-config.sysinit过程执行一遍。
image.png

-----------------------------3号坑-------------------------------

这是安装完Xilinx PPA后在是否upgrade系统提示中选填Y的话,将会出现的数个坑之一,显示“blk_update_request: I/O error, dev mmcblk1…”和“mmcblk1: recovery failed”等报错信息。具体原因老刘还没来得及研究。反正新手建议upgrade系统提示中选填n,暂时打不过咱就躲一躲嘛,先打游击战运动战壮大实力,实力强大了咱再回来消灭敌顽不迟嘛~

image.png

当然,若有老手高手大神路过也欢迎留言指教~ 非常感谢~~

老刘记事儿更多精彩欢迎订阅关注扫一扫:
image.png

更多回帖

发帖
×
20
完善资料,
赚取积分