1 系统镜像安装
详见参考链接:https://www.jianshu.com/p/5e60938bd4db
2 开发环境配置准备
ubuntu18.04(虚拟机里也行)、x3开发板一套东西、开发包(下图中第一个)、docker镜像包(下图中第二个),这两个去地平线社区下载资料中下载。
3 docker先操作
ubuntu中开个Terminal,执行以下命令:
sudo apt install curl -y # 装包
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 从阿里云下载docker
sudo docker image ls # 看看镜像列表,此时啥也没有
运行下面四行代码,后面docker操作不用总是输入sudo
sudo groupadd docker # 添加docker group
sudo gpasswd -a ${USER} docker # 将当前用户添加到docker组
sudo service docker restart
newgrp docker # 更新用户组
cd到上图中的Horizon文件夹下,加载docker镜像
sudo docker load -i **** # docker load -i docker_cpu_openexplorer_centos_7_v1.11.6.tar
sudo docker image ls # IMAGE ID 此时有镜像了
docker container ls # 查看容器列表,此时没有容器
运行镜像,把路径/home/wyx/Horizon/horizon_xj3_open_explorer_v1.8.5_20211224/ddk/samples
下的文件映射到镜像里,也就是映射到镜像的/data
文件夹下。
sudo docker run -it -d -v /home/wyx/Horizon/horizon_xj3_open_explorer_v1.8.5_20211224/ddk/samples:/data --name horizon dfafddaf059d
注意:运行完这个命令,就有容器container了,命令中两个路径之间用英文冒号,--name horizon
表示容器别名(容器多的时候,如何知道用哪一个容器呢),最后的一串字符表示Image ID,上图中有展示。
此时去看容器情况,发现有了,最后的NAMES就是上一行命令中的--name
命名得到,否则想用这个container,就总需要记住CONTAINER ID
,不好记。
容器启动start了,但想在容器里操作,得进入容器,即attach。
进入已经start启动的容器:docker attach [CONTAINER ID]/[NAMES]
docker attach horizon
下次想启动horizon容器,直接命令docker start horizon
即可。
4 运行验证
4.1 验证前思考
这一步在服务器端docker环境中
先看看镜像里的/data/
下有什么:
和在这一步中的samples文件夹下的文件一样,而且在samples文件夹下修改什么,镜像里会跟着修改! 映射关系嘛
镜像里就是一个独立的系统了,比如运行python3
4.2 验证1 验证docker中有运行model_convert的环境
这一步在服务器端docker环境中
这样才能不用担心docker中缺少环境。
cd到ai_toolchain/horizon_model_convert_sample
文件夹下,任意挑选个文件夹进去,运行
sh 01_check.sh
看视频里显示的结果,最后不是killed啊,还会显示一些网络层在bpu上的运行信息,不懂这是因为什么?验证别的也是这样。
解释:我换了一台有GPU的电脑,运行正常,如下图:
4.3 验证2 验证docker中有运行runtime_sample的环境
这一步在服务器端docker环境中
这样才能不用担心docker中缺少环境。
cd到ai_toolchain/horizon_runtime_sample/code
文件夹下,运行
sh build_xj3.sh
这一步倒没什么问题,之后考虑一下这一步用来干嘛的。
!重点!:这一步会生成xj3/script/
文件夹下的aarch64文件夹
,想在板子上运行script下的脚本文件,这个aarch64文件夹
不能少,也得放到板子上。
4.4 验证3 开发板上验证runtime_sample环境
这一步在开发板上
这一步是把镜像里的文件copy到开发板上,在这一步操作之前,建议把文件先准备好,官网教程
https://www.bilibili.com/video/BV1HA411c79s?spm_id_from=333.999.0.0
里说好的后期会修改,几个版本后,还是没添加。
操作内容:
把ai_toolchain/model_zoo/runtime
文件夹下的模型,复制到ai_toolchain/horizon_runtime_sample/xj3/model/runtime
文件夹下,可以需要哪个模型就复制哪个,如下图。
通过scp
把文件拷贝到开发板对应文件下(前提需要通过ip来ssh开发板)
发送文件名 开发板IP 开发板文件地址
scp -r xj3/ root@192.168.1.10:/userdata/horizon
解释:此处开发板ip不知为何hrut_ipfull s 10.64.32.90 255.255.255.0 10.64.32.1
改不了,那就只能该电脑的ip了。回答:重启才生效。
再解释:用虚拟机开发,也是改成本机电脑的ip即可,可以另外开个terminal,ping 192.168.1.10
,看能否ping通。
!重点!:用什么方式把文件拷过去,有时候不重要,有时候很重要!!!详细情况见4.5节解释3
新开一个terminal,ssh
到开发板上
ssh root@192.168.1.10
cd到/userdata/horizon
文件夹下,进入xj3/script/00_quick_start
文件夹下,运行脚本
sh run_mobilenetV1.sh
正常运行。
4.5 验证4 开发板上验证solution_zoo环境
4.5.1 初次验证
在docker镜像中,cd到solution_zool
文件夹下,以multitask_perception_solution
任务为例,其中文件build_and_deploy.sh
是编译部署文件,用于生成delpoy
文件夹,放到开发板上运行;run_body.sh
是在开发板端运行文件。
运行build_and_deploy.sh
文件:
sh build_and_deploy.sh
运行完后,发现multitask_perception_solution
文件夹下多了一些文件夹。
然后把deploy
文件夹传到开发板上(怎么传不重要),deploy
文件夹下是有run_body.sh
文件的。
scp -r deploy/ root@192.168.1.10:/userdata/horizon
ssh连接开发板,在开发板上cd到刚传输的deploy文件夹下,运行run_body.sh
文件
sh run_body.sh
即可跑起来。
查看demo显示效果:
在电脑端打开浏览器输入开发板地址即可。
其实我没跑起来,报错如下图:
什么原因呢?
解释1:说我不是1080P的USB摄像头,巧了,有两个摄像头,其中一个是1080P的,如下图:
解释2:系统镜像的版本要匹配。
此时,我的系统镜像版本是disk_X3SDB_0807_version_1.img
,技术支持人员给了我个disk_X3SDB_0508_version.img
(链接: https://quqi.avyeld.com/s/653819/xStM0w4ML9hQABR0 查阅码: hagj)。重新烧录镜像后,依旧是同样的bug。那到底是设么原因呢?
解释3:感谢地平线海盗旗微信技术指导,问我是如何把文件移到到开发板上的,我此时采用的是在电脑端打包压缩,用U盘拷贝到开发板上后解压,这个过程可能会导致一些文件损坏或者缺失(至于为什么,我也不懂)。采用scp
通过网线传输数据,这一步很重要,下方解释4也需要这一步,否则依旧和上方错误一样。再次运行程序sh run_body.sh
,参数选择和出错结果如下:
技术支持说我这是重启进入了uboot模式。what?还有这操作,没懂。怎么退出我也不知道,网上说Ctrl +C
退出行不通,于是断电重启,再次运行同样的程序,报错如下:
至少现在的我不懂为什么,那下面怎么办呢?
解释4:技术支持给提供了另一个思路,选择参数feedback(俗称回灌),记得scp
传输数据,运行成功,结果示意图如下。
总结:
- 传输数据使用压缩包U盘传输可能出错
- 使用USB_camera,但选择参数不一定是,也有可能是feedback,我觉得这儿应该是程序的问题吧,不太符合逻辑。
4.5.2 后续问题及解决方案
后续在重跑deploy
时,出现如下几种错误,现在的我不知道为什么。
此时再去跑以前能跑的deploy
,也会报类似的问题。
解决方案:
reboot关机重启
若依旧不行,则需要在docker重新编译生成deploy,然后再传输,不知道为什么直接传输以前生成的deploy文件不行!生气!
4.6 验证AI_solution
中的例子
验证时系统镜像版本:disk_X3SDB_0807_version_1.img
,[AI_solution_sample](链接: https://quqi.avyeld.com/s/653819/gQQgabW9XnQ12oJ5 查阅码: mmfc),运行其中的run.sh
,根据提示选择对应样例和参数即可。
验证成功的有1 face;2 face_recog;5 behavior;9 face_body_multisource
。成功的示意图如下:
终端输出示例:
验证失败的有3 body;4 xbox
,比如3 body
出现这种问题,我似懂非懂,没解决,技术支持人员让我换个系统镜像,我准备去操作了。
5 容器基本操作简介
此处附上如何进出容器:
此处附上查看正在运行的容器、容器在本机中的位置,命令分别为:docker ps
、docker inspect 容器名/容器ID
,如下图:
关于容器下面有啥,欢迎自己去探索。
6 linux下文件压缩/解压命令
zip [选项] 压缩包名 源文件或源目录
选项:-r:压缩目录
示例:zip -r deploy.zip deploy/
unzip [选项] 压缩包名
选项:-d:指定解压缩位置
示例:unzip -d /tmp/ test.zip
tar -xvf 文件名.tgz -C ./
选项:-C:指定解压缩位置
tar -xvf deploy.tgz -C ./
感谢链接:
https://www.bilibili.com/video/BV1HA411c79s?spm_id_from=333.999.0.0