Alex Blog

如何从0开始使用Docker 实现 Ubuntu 系统下的 Hailo Tappas Demo 展示

使用命令拉一个标准的 22.04 的 Docker:

docker pull ubuntu:22.04

我们可以将这个 Docker 的 image 保存成 har 档(参考 Tappas 脚本的 har 格式)

考虑到我们运行脚本的因素,我们将这个 image 重新做 tag

docker tag [image id] hailo_tappas:v3.27.0
docker save -o hailo-docker-tappas-v3.27.0.tar hailo_tappas:v3.27.0

这样我们就得到了一个有 tag: hailo_tappas:v3.27.0 的实际 Ubuntu 22.04 基础 Docker image。

我们使用 Hailo 官网下载的 Tappas Docker 脚本 run_tappas_docker.sh 导入这个 image

run_tappas_docker.sh --tappas-image hailo-docker-tappas-v3.27.0.tar

为什么使用这个脚本,主要有两点原因:

  1. 因为这个脚本会通过 Docker 使用 host 的硬件设备(Hailo 设备以及 Hailo 驱动)
  2. 这个脚本会使用 host 的显示界面,从而在 Docker 中运行的显示应用程序可以在 host 上正常显示(所以运行脚本的时候不要使用 SSH,直接在主控中通过 terminal 运行)

导入以后,我们就可以使用 run_tappas_docker.sh –resume 对应的 container 去安装必须安装的包,从而安装好 Tappas

安装之前可以使用如下命令加入其他 apt 源:

sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

也可以直接使用

dpkg -i hailort_4.16.0_amd64.deb

具体 Tappas 安装可以参考:https://github.com/giladnahor/hailo_rpi5_examples/blob/main/doc/install-raspberry-pi5.md

附: 稍微解释下我理解中的 run_tappas_docker.sh 中实现共享 host 端硬件设备以及 host 端显示的功能

function prepare_docker_args() {
    DOCKER_ARGS="--privileged --net=host \
        --name "$CONTAINER_NAME" \
        --ipc=host \
        --device /dev/dri:/dev/dri \
        -v ${XAUTH_FILE_PC}:${XAUTH_FILE_CONTAINER} \
        -v /tmp/.X11-unix/:/tmp/.X11-unix/ \
        -v /dev:/dev \
        -v /lib/firmware:/lib/firmware \
        --group-add 44 \
        -e DISPLAY=$DISPLAY \
        -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
        -e hailort_enable_service=yes \
        -v $(pwd)/${SHARED_DIR}/:/local/${SHARED_DIR}:rw"
}
docker run $DOCKER_ARGS -it $IMAGE_NAME:$CONTAINER_TAG

然后在以后运行 container 的时候,采用一些 host 端的临时文件来保存 DISPLAY 的参数,从而达到支持 host 端显示

function handle_xauth() {
    # The function extracts auth entry for current display and saves it to specified file.
    # It's a workaround for ub22 random name of xauth file, which changes every reboot.
    touch $XAUTH_FILE_PC
    xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH_FILE_PC nmerge -
    chmod o+rw $XAUTH_FILE_PC
}
docker start "$CONTAINER_NAME"
docker exec -it -e DISPLAY=$DISPLAY "$CONTAINER_NAME" /bin/bash

 


已发布

分类

,

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注