本文将介绍如何一步步运行Xilinx官网的SmartCamera示例程序,全文分为三个部分,分别为安装Docker、配置Docker国内镜像源,以及运行SmartCamera示例程序。读完本文,读者将会了解如何在KV260上安装最新版本Docker,以及如何在KV260上运行Xilinx官方的SmartCamera示例程序。
一、安装Docker
这里我参考的是Docker官方文档的步骤,这样可以安装最新版本的Docker。KV260系统镜像使用的是同时支持KV260和KR260的Ubuntu Desktop 22.04 LTS版本,下载页面:Install Ubuntu on Xilinx | Ubuntu 。具体安装方法上一篇帖子已有介绍,这里不再赘述了。
1.1 先决条件
Docker官方文档上说明,Ubuntu系统上安装最新版Docker要求必须是20.04及以上版本,我们KV260使用的的22.04版本是没有问题的。
1.2 卸载旧版本Docker
如果用Ubuntu默认软件源安装了Docker软件包,则需要先卸载这些软件包,才可以安装Docker官网最新版本的。
要卸载的非官方软件包是:
docker.io
docker-compose
docker-doc
podman-docker
此外,Docker引擎依赖于 containerd
和 runc
.Docker 引擎将这些依赖项捆绑为一个捆绑包: containerd.io
。如果您已安装 containerd
或 runc
以前,请卸载它们以避免与 Docker 引擎捆绑的版本发生冲突。
运行以下命令以卸载这些软件包:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
sudo apt-get remove $pkg
done
1.3 添加Docker官方apt源
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
1.4 安装Docker服务和命令行工具
配置好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
1.5 为用户添加docker组权限
Docker安装后,默认需要加sudo才可以运行docker命令,不是很方便。
将当前用户添加docker组权限后,当前用户下次登录系统不加sudo也可以运行docker命令,使用起来会比较方便。
执行以下命令,可以为当前用户添加docker组权限:
sudo usermod -aG docker $USER
二、配置国内Docker镜像源
默认情况下docker pull命令会从https://registry.hub.docker.com 下载映像,国内部分网络环境速度较慢,可以通过配置国内Docker镜像源加速。
2.1 修改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"
]
}
2.2 重启Docker服务
修改完配置文件后,需要重启docker服务配置文件才能生效。
重启Docker服务的命令为:
sudo service docker restart
2.3 查看Docker信息
可以通过docker info命令查看国内镜像配置是否生效,命令为:
docker info
我这里输出如下:
可以看到配置的镜像信息已经生效了。
三、运行SmartCamera示例程序
Xilinx官方文档提供了SmartCamera示例程序,可以运行。接下来我们尝试在KV260上运行SmartCamera示例程序。
3.1 硬件准备
和上一篇帖子类似,开始实验前,需要为KV260准备:
- 烧录好系统镜像的SD卡,作为系统启动介质
- USB-Micro数据线,用于接收串口日志,登录系统
- 电源适配器,用于给开发板供电
- RJ45网线,另一端连接到可以访问公网的路由器上。
- IAS摄像头,SmartCamera示例需要
3.2 软件准备
由于SmartCamera示例会在KV260上启动一个RTSP服务端,因此,PC上需要准备RTSP客户端软件,推荐使用VLC。VLC可以从其官网下载,下载页面:官方下载:VLC media player,最棒的开源播放器 - VideoLAN
另外,确保 PC 和 KV260 位于同一网段内,建议让PC和KV260连接到同一个路由器上,并且路由器可以访问互联网。
3.3 添加Xilinx软件包apt源
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
3.4 下载并加载SmartCamera固件
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
3.5 加载SmartCamera固件
KV260固件由比特流和设备树覆盖 (dtbo) 文件组成。一旦 Linux 完全启动,固件将根据用户请求动态加载。xmutil 实用程序可用于此目的。
xmutil 常用的几个命令:
- desktop_disable 禁用桌面,。
- desktop_enable 启用桌面,。
- listapps 查询固件资源管理器守护进程,当前平台上有哪些可用的预编译的应用比特流,并输出汇总信息。
- unloadapp 卸载固件,需要加一个槽编号(默认为0);
- loadapp 加载请求的应用配置比特流到可编程逻辑,如果设备可用的话;
接下来使用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”,表示成功加载了。另外,有几行警告输出,没有影响,可以不用关心。
3.6 拉取SmartCamera Docker映像
使用以下命令拉取智能摄像头的 2022.1 Docker 映像:
docker pull xilinx/smartcam:2022.1
拉取过程较慢,需要耐心等待。
拉取完成后,可以使用如下命令查看本地已有的Docker映像:
docker images
执行结果如下:
3.7 启动Docker容器
使用以下命令,启动一个基于刚刚拉取的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
它将在新容器中启动智能摄像头映像。
执行结果如下:
3.8 运行smartcam应用程序
这里介绍命令行方式运行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可以识别画面中的人脸:
3.9 视频文件输入RTSP输出
首先,下载测试视频文件,视频下载页面为(推荐下载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
四、参考链接
- Snaps - xlnx-config Snap for Certified Ubuntu on Xilinx Devices - Xilinx Wiki - Confluence (atlassian.net)
- Getting Started with Certified Ubuntu 22.04 LTS for Xilinx Devices - Xilinx Wiki - Confluence (atlassian.net)
- Smart Camera — Kria™ KV260 2022.1 documentation (xilinx.github.io)
- Install Docker Engine on Ubuntu | Docker Documentation
- Linux post-installation steps for Docker Engine | Docker Documentation
- Docker 配置国内源加速(2023/05/14)_docker国内镜像源_Hit不死的小强的博客-CSDN博客