本文将介绍如何一步步运行Xilinx官网的SmartCamera示例程序,全文分为三个部分,分别为安装Docker、配置Docker国内镜像源,以及运行SmartCamera示例程序。读完本文,读者将会了解如何在KV260上安装最新版本Docker,以及如何在KV260上运行Xilinx官方的SmartCamera示例程序。
这里我参考的是Docker官方文档的步骤,这样可以安装最新版本的Docker。KV260系统镜像使用的是同时支持KV260和KR260的Ubuntu Desktop 22.04 LTS版本,下载页面:Install Ubuntu on Xilinx | Ubuntu 。具体安装方法上一篇帖子已有介绍,这里不再赘述了。
Docker官方文档上说明,Ubuntu系统上安装最新版Docker要求必须是20.04及以上版本,我们KV260使用的的22.04版本是没有问题的。
如果用Ubuntu默认软件源安装了Docker软件包,则需要先卸载这些软件包,才可以安装Docker官网最新版本的。
要卸载的非官方软件包是:
docker.iodocker-composedocker-docpodman-docker此外,Docker引擎依赖于 containerd 和 runc .Docker 引擎将这些依赖项捆绑为一个捆绑包: containerd.io 。如果您已安装 containerd 或 runc 以前,请卸载它们以避免与 Docker 引擎捆绑的版本发生冲突。
运行以下命令以卸载这些软件包:
# 卸载已有docker包
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
sudo apt-get remove $pkg
done
Docker官方文档介绍了好几种安装最新版本Docker的方法,这里仅以apt方式为例。
具体包括以下四个步骤:
更新软件包索引,并安装 apt 软件包,让 apt 支持从HTTPS的软件源下载软件包:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
添加 Docker 的官方 GPG 密钥:
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
更新apt包索引:
sudo apt-get update
配置好Docker官方的apt源之后,就可以安装最新版的Docker服务和命令行工具了。
安装命令:
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
Docker安装后,默认需要加sudo才可以运行docker命令,不是很方便。
将当前用户添加docker组权限后,当前用户下次登录系统不加sudo也可以运行docker命令,使用起来会比较方便。
执行以下命令,可以为当前用户添加docker组权限:
sudo usermod -aG docker $USER
默认情况下docker pull命令会从https://registry.hub.docker.com 下载映像,国内部分网络环境速度较慢,可以通过配置国内Docker镜像源加速。
配置国内Docker镜像源,需要修改Docker服务配置文件,该配置文件位于 /etc/docker/ 目录下,文件名为 daemon.json :
# 打开配置文件
sudo vim /etc/docker/daemon.json
# 添加以下配置
{
"registry-mirrors": [
"https://ccr.ccs.tencentyun.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://registry.docker-cn.com"
]
}
修改完配置文件后,需要重启docker服务配置文件才能生效。
重启Docker服务的命令为:
sudo service docker restart
可以通过docker info命令查看国内镜像配置是否生效,命令为:
docker info
我这里输出如下:

可以看到配置的镜像信息已经生效了。
Xilinx官方文档提供了SmartCamera示例程序,可以运行。接下来我们尝试在KV260上运行SmartCamera示例程序。
和上一篇帖子类似,开始实验前,需要为KV260准备:
由于SmartCamera示例会在KV260上启动一个RTSP服务端,因此,PC上需要准备RTSP客户端软件,推荐使用VLC。VLC可以从其官网下载,下载页面:官方下载:VLC media player,最棒的开源播放器 - VideoLAN
另外,确保 PC 和 KV260 位于同一网段内,建议让PC和KV260连接到同一个路由器上,并且路由器可以访问互联网。
Ubuntu官网下载的KV260镜像中,默认不带有Xilinx软件包的源,无法通过apt命令下载Xilinx软件包;需要添加Xilinx软件包的apt源后,才可以通过apt安装Xilinx软件包。
添加Xilinx软件包apt源的命令如下:
sudo add-apt-repository ppa:xilinx-apps/ppa
sudo add-apt-repository ppa:ubuntu-xilinx/updates
# 更新包索引
sudo apt update
KV260 SmartCamera示例程序需要加载专门的固件之后才可以正常运行。KV260 SmartCamera示例程序专属固件,可以通过apt命令从Xilinx专属apt源下载并安装。
首先执行以下命令,在软件包索引中搜索KV260固件相关的软件包:
sudo apt search xlnx-firmware-kv260
执行结果为:

成功搜索到了软件包,则前面添加Xilinx软件包apt源和更新apt包索引一切正常。
接下来,安装KV260 SmartCamera固件软件包:
sudo apt install xlnx-firmware-kv260-smartcam
KV260固件由比特流和设备树覆盖 (dtbo) 文件组成。一旦 Linux 完全启动,固件将根据用户请求动态加载。xmutil 实用程序可用于此目的。
xmutil 常用的几个命令:
接下来使用xmutil尝试加载SmartCamera固件:
首先,禁用桌面,执行命令:sudo xmutil desktop_disable

然后,查看当前可用固件有哪些,执行命令:sudo xmutil listapps

其中,Active_slot为0,代表当前正在使用的;
接着,卸载当前固件,执行命令: sudo xmutil unloadapp

执行成功后,风扇开始疯狂旋转,噪音明显升高。
最后,加载smartcam固件,执行命令:sudo xmutil loadapp kv260-smartcam

可以看到,输出了“kv260-smartcam: loaded to slot 0”,表示成功加载了。另外,有几行警告输出,没有影响,可以不用关心。
使用以下命令拉取智能摄像头的 2022.1 Docker 映像:
docker pull xilinx/smartcam:2022.1
拉取过程较慢,需要耐心等待。
拉取完成后,可以使用如下命令查看本地已有的Docker映像:
docker images
执行结果如下:

使用以下命令,启动一个基于刚刚拉取的xilinx/smartcam:2022.1映像的 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
它将在新容器中启动智能摄像头映像。
执行结果如下:

这里介绍命令行方式运行SmartCamera应用程序。官方文档另外还介绍了Juypter Notebook的运行方式,感兴趣的可以自行查阅官方文档。
在刚刚启动的容器shell环境中,执行smartcam -h可以查看smartcam命令的使用方式:

MIPI输入(IAS摄像头)RTSP输出
在刚刚启动的容器shell环境中,执行命令:
smartcam --mipi -W 1920 -H 1080 --target rtsp
执行后,控制台输出了RTSP链接:

复制下面的链接,PC上打开VLC播放器,通过 媒体→打开网络串流 菜单,打开RTSP流:

点击播放,就可以看到KV260摄像头的画面了。
SmartCamera可以识别画面中的人脸:

首先,下载测试视频文件,视频下载页面为(推荐下载1920x1080分辨率的): Alley People Walk Free Stock Video - Pixabay
接着,使用ffmpeg命令转为h264格式:
ffmpeg -i alley_1080p.mp4 -c:v libx264 -pix_fmt nv12 -vf scale=1920:1080 -r 30 output.nv12.h264
推荐在PC上执行ffmpeg命令,速度较快;Windows版本的ffmpeg可以从ffmpeg官网下载:https://ffmpeg.org/download.html
在我的PC上十几秒钟就转换完成了,视频一共1035帧,转换过程速率达到了79fps,耗时13秒多:

在KV260上用ffmpeg转换同样的视频,实测速率只有3.1fps,总耗时5分钟多,不推荐:

转换成功后,可以通过scp将转换成功的output.nv12.h264文件拷贝到KV260上:

拷贝到设备上之后,类似的可以运行smartcam命令,并以文件为输入RTSP为输出:
smartcam --file /tmp/output.nv12.h264 -i h264 -W 1920 -H 1080 -r 30 --target rtsp
此时用VLC打开网络串流,可以看到画面中的人脸实时识别:

我们也可以使用ffmpeg将RTSP流转录到视频文件中:
ffmpeg -i rtsp://192.168.0.110:554/test -frames 1035 -r 30 rtsp_output.mp4
更多回帖