基本开发编译环境
首先,整个测试项目其实是对于智能摄像头样例的魔改。所以继上一篇将这部分跑通了。
这里为了能够正常在后台运行,需要给原命令-it改为-dit参数。后台单独终端运行。可以脱离主客户端。
想要查看终端需要手动运行
sudo docker exec -it hungry_shaw bash
(注意,hungry_shaw是它创建的时候自己随机生成的容器名。通过sudo docker ps查看刚运行的容器的容器名是什么)
sudo 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 \
-dit xilinx/smartcam:2022.1 bash
首先像上期一样再次启动容器。本次在上面连接了一个USB摄像头,位于USB 0的位置上(只要是摄像头,就是这个号,除非你又很多个摄像头。)
这里写个提示:只要重启容器就要运行smartcam-install.py
运行命令
smartcam --usb 0 -W 1920 -H 1080 -r 30 --target rtsp
这里有个问题,那就是从启动到正式工作其实需要很长时间。即使是产生画面了,也会卡数分钟到十几分钟之久,才能正常开始工作。
工作时有一些卡顿和延迟,但是还算可以。(RTSP协议本身延迟非常低。这是板子程序的问题)这个问题希望后面的程序修改中能修正。
这里启动了jupyter后需要注意一下他的脚本
正式运行还要借助这个脚本才行。当然测试时候可以直接运行命令不用管脚本
这里自己选。根据自己用板载摄像头还是usb摄像头自己定
DP_output=True # True to choose DP output, False to choose RTSP output
这句一般选False,除非工控机需要显示在自己的屏幕上
关于gi,这是GStreamer的部分,可以看看它的网上的文档。这个程序的目的是用字符串将一个个程序衔接起来。并且创建一个视频流。本程序的rtsp推流就是这货干的。
它的管道很有用,因为原生视频流也是他推给处理程序的。
需要注意,在视频处理时候不用原生分辨率。超大图对于处理是个压力。这里需要对视频产生一组低分辨率流送给DPU。而DPU需要多大的根据你开发程序定的
运行就点这个就好了
下面是插件程序开发,也就是对Vitis -Ai****的环境配置
需要注意,xilinx有Vitis(ide), petalinux, vivado。以及开发环境包vitis-ai。这里前三个都不用。因为就在smartcam的基础上开发
这里用wsl2直接构建nvidia镜像到今天为止也没成功。所以就先放放,先用cpu镜像。由于n卡已经支持了wsl2,因此直接在wsl按照cuda官网的包直接安装就行了,不用看网上安装教程了。很多都是过时的安装流程。Cuda已经把开发环境和运行时环境的包都打包成安装包了。
运行一下检查n卡在wsl2的状态
(官方文档有说,但是说的很隐蔽,说了,又好像没说的一件事就是。运行build脚本的时候千万不能用root权限搞。不然会遇到这个诡异问题。我堂堂root竟然没权限。可能是因为脚本里简单的用了sudo,但是这玩意如果是root用户运行会出现很多意想不到的错误!!!)
对于构建自己镜像这部分,我会切个普通用户尝试一次。之所以纠结构建的原因,是因为没有显卡加速,整套流程运行起来会慢的要死,很多并行计算CPU并不擅长
docker pull xilinx/vitis-ai-pytorch-cpu:latest
运行这个条命令来拉取对应的包。
./docker_run.sh xilinx/vitis-ai-pytorch-cpu:latest
退出后重启容器还是用它。进的还是这个容器,不会创建一大堆
运行一下
出现这个,就算启动了环境了
在环境中直接能够进行编译
随便进入一个demo
/workspace/examples/vai_library/samples/segmentation
sh build.sh
之后能够编译出程序。注意。此时编译出来的是本地程序
报错太多,下一阶段再解决交叉编译