init rk1808 docker fireleave deploy scripts

This commit is contained in:
guoqiancheng 2026-06-08 18:28:57 +08:00
parent d2e9facc40
commit e391643b15
54 changed files with 749 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
lib/

24
Dockerfile Normal file
View File

@ -0,0 +1,24 @@
FROM debian:bullseye-slim
# 【极简设置时区:不装 tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# 复制 deb 包到容器中
COPY mp4-merge_0.1.11-1_arm64.deb /tmp/
# 安装 deb 包(使用 dpkg 安装,如果依赖有问题会自动修复)
RUN dpkg -i /tmp/mp4-merge_0.1.11-1_arm64.deb || (apt-get update && apt-get install -f -y)
# 复制模型文件(这是必须的)
COPY models/ /usr/local/models/
# 复制启动脚本
COPY start.sh /usr/local/start.sh
RUN chmod +x /usr/local/start.sh
WORKDIR /usr/local/models
RUN chmod +x yolov5
CMD ["/usr/local/start.sh"]

13
Dockerfile_bak Normal file
View File

@ -0,0 +1,13 @@
FROM debian:bullseye-slim
# 复制模型文件(这是必须的)
COPY models/ /usr/local/models/
# 复制启动脚本
COPY start.sh /usr/local/start.sh
RUN chmod +x /usr/local/start.sh
WORKDIR /usr/local/models
RUN chmod +x yolov5
CMD ["/usr/local/start.sh"]

37
build.sh Normal file
View File

@ -0,0 +1,37 @@
#!/bin/bash
set -e
echo "=== RK1808 NPU Docker Build Script ==="
# 清理之前的构建
echo "=== Cleaning previous build ==="
rm -rf lib
mkdir -p lib/usr/lib
mkdir -p lib/usr/bin
# 只复制 Rockchip 特定的 NPU 库(系统没有的)
echo "=== Copying NPU-specific libraries ==="
cp /usr/lib/librknn_api.so lib/usr/lib/
cp /usr/lib/librknn_runtime.so lib/usr/lib/
cp /usr/lib/librockx.so lib/usr/lib/
cp /usr/lib/libVSC.so lib/usr/lib/
cp /usr/lib/libGAL.so lib/usr/lib/
cp /usr/lib/libArchModelSw.so lib/usr/lib/
cp /usr/lib/libNN*.so lib/usr/lib/ 2>/dev/null || true
cp /usr/lib/libOpenCL.so* lib/usr/lib/ 2>/dev/null || true
cp /usr/lib/libOpenVX.so* lib/usr/lib/ 2>/dev/null || true
cp /usr/lib/librockchip_mpp.so* lib/usr/lib/ 2>/dev/null || true
cp /usr/lib/librga.so* lib/usr/lib/ 2>/dev/null || true
# 复制 ffmpeg如果宿主机有特殊版本
cp /usr/bin/ffmpeg lib/usr/bin/
echo "=== Copied files ==="
ls -la lib/usr/lib/
# 构建 Docker 镜像
echo "=== Building Docker image ==="
docker build -t fire_leave .
echo "=== Build successful! ==="

28
demo Normal file
View File

@ -0,0 +1,28 @@
方案1修改挂载点不覆盖应用目录
bash
docker run -it --rm \
--device /dev/galcore \
--device /dev/dri/card0 \
--device /dev/vpu_service \
--device /dev/rga \
-v /lib/npu:/lib/npu \
-v /usr/bin/:/usr/bin:ro \
-v /usr/lib/:/usr/lib:ro \
-v /usr/share/:/usr/share:ro \
-v /lib/:/lib:ro \
-v /etc/ld.so.cache:/etc/ld.so.cache:ro \
--privileged \
rk1808-infer
方案2使用数据卷或绑定挂载应用目录
bash
docker run -it --rm \
--device /dev/galcore \
--device /dev/dri/card0 \
--device /dev/vpu_service \
--device /dev/rga \
-v /lib/npu:/lib/npu \
-v /usr/:/host_usr:ro \
-v /lib/:/host_lib:ro \
-v /usr/local/rk1808-docker/models/:/usr/local/models:ro \
--privileged \
rk1808-infer

157
deploy_fire_leave.sh Normal file
View File

@ -0,0 +1,157 @@
#!/bin/bash
set -e
PROJECT_DIR="/usr/local/rk1808-docker"
IMAGE_NAME="fire_leave:latest"
echo "========== fire_leave 项目部署 =========="
if [ "$(id -u)" != "0" ]; then
echo "请使用 root 用户执行"
exit 1
fi
cd "$PROJECT_DIR"
PROJECT_OK=1
LIB_OK=1
DEVICE_OK=1
BUILD_OK=0
RUN_SCRIPT_OK=0
echo "[1/6] 检查项目文件"
for file in Dockerfile start.sh mp4-merge_0.1.11-1_arm64.deb models/yolov5 rundocker.sh; do
if [ -e "$file" ]; then
echo "存在: $file"
else
echo "缺失: $file"
PROJECT_OK=0
fi
done
if [ "$PROJECT_OK" -ne 1 ]; then
echo "项目文件不完整,终止部署"
exit 1
fi
chmod +x start.sh
chmod +x models/yolov5
chmod +x rundocker.sh
RUN_SCRIPT_OK=1
echo "[2/6] 检查 yolov5 动态库依赖"
if ldd models/yolov5 >/tmp/yolov5_ldd.txt 2>&1; then
cat /tmp/yolov5_ldd.txt | grep -i "avformat\|avcodec\|avutil\|swscale\|swresample" || true
if grep -q "not found" /tmp/yolov5_ldd.txt; then
echo "存在缺失动态库:"
grep "not found" /tmp/yolov5_ldd.txt
LIB_OK=0
else
echo "yolov5 动态库检查通过"
fi
else
echo "ldd 检查失败"
LIB_OK=0
fi
echo "[3/6] 检查设备节点"
for dev in /dev/galcore /dev/rga /dev/vpu_service /dev/dri/card0; do
if [ -e "$dev" ]; then
echo "存在: $dev"
else
echo "缺失: $dev"
DEVICE_OK=0
fi
done
if [ -d /lib/npu ]; then
echo "存在: /lib/npu"
else
echo "缺失: /lib/npu"
DEVICE_OK=0
fi
if [ "$LIB_OK" -ne 1 ]; then
echo "动态库异常,终止部署"
exit 1
fi
if [ "$DEVICE_OK" -ne 1 ]; then
echo "设备节点异常,终止部署"
exit 1
fi
echo "[4/6] 构建 Docker 镜像"
if docker build -t "$IMAGE_NAME" .; then
BUILD_OK=1
echo "Docker 镜像构建成功: $IMAGE_NAME"
else
BUILD_OK=0
echo "Docker 镜像构建失败"
exit 1
fi
echo "[5/6] 检查 rundocker.sh"
if [ -f rundocker.sh ]; then
chmod +x rundocker.sh
RUN_SCRIPT_OK=1
echo "rundocker.sh 存在,已设置可执行权限"
else
RUN_SCRIPT_OK=0
echo "rundocker.sh 不存在"
fi
echo "[6/6] 检查镜像"
docker images | grep fire_leave || true
echo
echo "========== 部署结果汇总 =========="
if [ "$PROJECT_OK" -eq 1 ]; then
echo "项目文件: 正常"
else
echo "项目文件: 异常"
fi
if [ "$LIB_OK" -eq 1 ]; then
echo "yolov5 动态库: 正常"
else
echo "yolov5 动态库: 异常"
fi
if [ "$DEVICE_OK" -eq 1 ]; then
echo "设备节点/NPU目录: 正常"
else
echo "设备节点/NPU目录: 异常"
fi
if [ "$BUILD_OK" -eq 1 ]; then
echo "Docker 镜像构建: 成功"
else
echo "Docker 镜像构建: 失败"
fi
if docker image inspect "$IMAGE_NAME" >/dev/null 2>&1; then
echo "Docker 镜像存在: $IMAGE_NAME"
else
echo "Docker 镜像不存在: $IMAGE_NAME"
fi
if [ "$RUN_SCRIPT_OK" -eq 1 ]; then
echo "启动脚本: 正常 rundocker.sh"
else
echo "启动脚本: 缺失 rundocker.sh"
fi
echo
echo "下一步操作:"
echo " ./rundocker.sh"
echo "========== fire_leave 项目部署完成 =========="

235
init_host.sh Normal file
View File

@ -0,0 +1,235 @@
#!/bin/bash
set -e
echo "========== RK1808 Docker 宿主机初始化 =========="
if [ "$(id -u)" != "0" ]; then
echo "请使用 root 用户执行"
exit 1
fi
DOCKER_MIRROR="https://docker.1panel.live"
CODENAME=$(. /etc/os-release && echo "$VERSION_CODENAME")
ARCH=$(dpkg --print-architecture)
KERNEL=$(uname -r)
echo "[1/8] 系统信息"
uname -a
cat /etc/os-release || true
echo "ARCH=$ARCH"
echo "CODENAME=$CODENAME"
echo "KERNEL=$KERNEL"
echo "[2/8] 安装基础依赖"
apt update
apt install -y ca-certificates curl gnupg lsb-release apt-transport-https kmod
echo "[3/8] 配置 Docker APT 源"
install -m 0755 -d /etc/apt/keyrings
try_docker_repo() {
local name="$1"
local base_url="$2"
echo "尝试 Docker 源: $name -> $base_url"
rm -f /etc/apt/keyrings/docker.asc
rm -f /etc/apt/sources.list.d/docker.sources
if ! curl -L --connect-timeout 15 --retry 3 --retry-delay 2 \
"$base_url/gpg" -o /etc/apt/keyrings/docker.asc; then
echo "$name GPG 下载失败"
return 1
fi
chmod a+r /etc/apt/keyrings/docker.asc
cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: $base_url
Suites: $CODENAME
Components: stable
Architectures: $ARCH
Signed-By: /etc/apt/keyrings/docker.asc
EOF
if apt update; then
echo "$name Docker 源配置成功"
return 0
else
echo "$name apt update 失败"
return 1
fi
}
if try_docker_repo "清华源" "https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian"; then
echo "使用清华 Docker 源"
elif try_docker_repo "阿里源" "https://mirrors.aliyun.com/docker-ce/linux/debian"; then
echo "使用阿里 Docker 源"
elif try_docker_repo "Docker 官方源" "https://download.docker.com/linux/debian"; then
echo "使用 Docker 官方源"
else
echo "所有 Docker 源配置失败,请检查网络"
exit 1
fi
echo "[4/8] 安装 Docker"
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
echo "[5/8] 配置 Docker 镜像加速和 overlay2 存储驱动"
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"$DOCKER_MIRROR"
],
"log-driver": "none",
"features": {
"containerd-snapshotter": false
},
"storage-driver": "overlay2"
}
EOF
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
echo "当前 Docker 存储驱动:"
docker info | grep -E "Storage Driver|driver-type" -A3 || true
echo "[6/8] 检查 FFmpeg 动态库"
REQUIRED_LIBS="
/lib/libavformat.so.58
/lib/libavcodec.so.58
/lib/libavutil.so.56
/lib/libswresample.so.3
/lib/libswscale.so.5
"
for lib in $REQUIRED_LIBS; do
if [ -e "$lib" ]; then
echo "存在: $lib"
else
echo "缺失: $lib"
fi
done
echo "查找 libswscale:"
find /lib /usr/lib -name "libswscale.so*" || true
if [ ! -e /lib/libswscale.so.5 ] && [ ! -e /usr/lib/libswscale.so.5 ]; then
if [ -e /usr/lib/libswscale.so.5.7.100 ]; then
echo "修复 libswscale.so.5 -> /usr/lib/libswscale.so.5.7.100"
ln -sf /usr/lib/libswscale.so.5.7.100 /usr/lib/libswscale.so.5
ln -sf /usr/lib/libswscale.so.5.7.100 /lib/libswscale.so.5 || true
ldconfig || true
elif [ -e /lib/libswscale.so.5.7.100 ]; then
echo "修复 libswscale.so.5 -> /lib/libswscale.so.5.7.100"
ln -sf /lib/libswscale.so.5.7.100 /lib/libswscale.so.5
ldconfig || true
else
echo "警告: 未找到 libswscale.so.5.7.100,后续可能需要手动补 FFmpeg 库"
fi
fi
echo "[7/8] 检查并加载 RK1808 设备节点"
if [ ! -e /dev/galcore ]; then
echo "/dev/galcore 不存在,尝试加载 galcore.ko"
if [ -e "/lib/modules/$KERNEL/galcore.ko" ]; then
insmod "/lib/modules/$KERNEL/galcore.ko" || true
elif [ -e "/usr/lib/modules/$KERNEL/galcore.ko" ]; then
insmod "/usr/lib/modules/$KERNEL/galcore.ko" || true
else
echo "未找到 galcore.ko"
fi
fi
if lsmod | grep -q "galcore"; then
echo "galcore 模块已加载"
echo "galcore" > /etc/modules-load.d/galcore.conf
depmod || true
if [ -e /dev/galcore ]; then
echo "存在: /dev/galcore"
else
echo "警告: galcore 模块已加载,但 /dev/galcore 不存在"
fi
else
echo "警告: galcore 模块未加载"
fi
for dev in /dev/rga /dev/vpu_service /dev/dri/card0; do
if [ -e "$dev" ]; then
echo "存在: $dev"
else
echo "缺失: $dev"
fi
done
if [ -d /lib/npu ]; then
echo "存在: /lib/npu"
else
echo "缺失: /lib/npu"
fi
echo "[8/8] 输出 Docker 信息"
docker version
echo
docker info | grep -E "Server Version|Storage Driver|Cgroup|Kernel Version|Operating System|Architecture|Registry Mirrors" -A5 || true
echo
echo "========== 初始化结果汇总 =========="
if command -v docker >/dev/null 2>&1; then
echo "Docker: 已安装"
else
echo "Docker: 未安装"
fi
if docker info >/dev/null 2>&1; then
echo "Docker 服务: 正常"
else
echo "Docker 服务: 异常"
fi
if docker info 2>/dev/null | grep -q "$DOCKER_MIRROR"; then
echo "Docker 镜像加速: 已配置 $DOCKER_MIRROR"
else
echo "Docker 镜像加速: 未确认"
fi
if docker info 2>/dev/null | grep -q "Storage Driver: overlay2"; then
echo "Docker 存储驱动: 正常 overlay2"
else
echo "Docker 存储驱动: 异常,未使用 overlay2"
fi
for lib in $REQUIRED_LIBS; do
if [ -e "$lib" ]; then
echo "FFmpeg库: 正常 $lib"
else
echo "FFmpeg库: 缺失 $lib"
fi
done
for dev in /dev/galcore /dev/rga /dev/vpu_service /dev/dri/card0; do
if [ -e "$dev" ]; then
echo "设备节点: 正常 $dev"
else
echo "设备节点: 缺失 $dev"
fi
done
if [ -d /lib/npu ]; then
echo "NPU目录: 正常 /lib/npu"
else
echo "NPU目录: 缺失 /lib/npu"
fi
echo "========== 初始化完成 =========="

2
models/20260608.txt Normal file
View File

@ -0,0 +1,2 @@
(/home/alex/work/cpp/rk1808-yolov5-inference/main.cpp:329 | main)[2026-06-08 18:14:57] DEBU > do init log

BIN
models/fire_check.rknn Normal file

Binary file not shown.

1
models/fire_check.txt Normal file
View File

@ -0,0 +1 @@
fire

View File

@ -0,0 +1 @@
1

BIN
models/fire_check_test.h264 Normal file

Binary file not shown.

BIN
models/fireleave_tool Executable file

Binary file not shown.

BIN
models/fireleave_tool_old Executable file

Binary file not shown.

BIN
models/main_aarch64 Executable file

Binary file not shown.

BIN
models/model.rknn Normal file

Binary file not shown.

BIN
models/model.rknn.bak Normal file

Binary file not shown.

80
models/model.txt Normal file
View File

@ -0,0 +1,80 @@
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person
person

80
models/model_code.txt Normal file
View File

@ -0,0 +1,80 @@
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="GB2312"?>
<SdkLocal>
<SdkLog>
<logLevel>3</logLevel><!--req, 1-ERROR, 2-DEBUG, 3-INFO-->
<logDirectory>./SDKLOG/</logDirectory><!--the end of the string must be '/'-->
<autoDelete>true</autoDelete><!--true: There are less than 10 files in the directory, it will be auto deleted by sdk when the files are more than 10; false: No upper limit to the number of log files-->
</SdkLog>
<HeartbeatCfg>
<Interval>120</Interval> <!-- 心跳时间间隔单位秒等于0使用默认值120s取值范围为[30, 120] 小于30s间隔为30s大于120s间隔为120s-->
<Count>1</Count> <!-- 触发异常回调需要心跳交互异常的次数等于0使用默认值1次-->
</HeartbeatCfg>
</SdkLocal>

View File

@ -0,0 +1,5 @@
[2026-06-01 17:50:04.255][INF] [0]CLongConfigSession::Stop in
[2026-06-01 17:50:04.327][INF] COM_Logout[0][0]
[2026-06-01 17:50:04.329][DBG] CUserMgr::UnRegisterHeartProxy[0]
[2026-06-01 17:50:04.332][INF] Private connect 192.168.80.64:8000 sock=7 this=0xb4421794 cmd=0x10100 port=43068
[2026-06-01 17:50:04.380][INF] CTransUnitMgr::UnloadTransUnitLib

Binary file not shown.

BIN
models/release/libHCCore.so Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
models/release/libcrypto.so Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
models/release/libhpr.so Normal file

Binary file not shown.

BIN
models/release/libssl.so Normal file

Binary file not shown.

Binary file not shown.

BIN
models/release/libz.so Normal file

Binary file not shown.

View File

@ -0,0 +1,10 @@
#!/bin/bash
# 切换到脚本所在目录
cd "$(dirname "$0")"
# 设置库文件路径为当前目录
export LD_LIBRARY_PATH=".:$LD_LIBRARY_PATH"
# 执行程序并传递所有参数
./thermometry.exe "$@"

View File

@ -0,0 +1,44 @@
#!/bin/bash
# run_thermometry.sh
# 记录启动日志
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting thermometry with args: $@" >> /data/logs/thermometry_start.log
# 解析参数
RTSP_URL=""
TCP_PORT=""
CHANNEL="0"
while [[ $# -gt 0 ]]; do
case $1 in
-s)
RTSP_URL="$2"
shift 2
;;
-t)
TCP_PORT="$2"
shift 2
;;
-c)
CHANNEL="$2"
shift 2
;;
*)
shift
;;
esac
done
echo "[$(date '+%Y-%m-%d %H:%M:%S')] RTSP: $RTSP_URL, TCP Port: $TCP_PORT, Channel: $CHANNEL" >> /data/logs/thermometry_start.log
# 检查参数
if [ -z "$RTSP_URL" ] || [ -z "$TCP_PORT" ]; then
echo "Usage: $0 -s <rtsp_url> -t <tcp_port> [-c <channel>]"
exit 1
fi
# 启动温度程序
cd /usr/local/rk1808-docker/models
./thermometry -s "$RTSP_URL" -t "$TCP_PORT" -c "$CHANNEL"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Thermometry exited with code: $?" >> /data/logs/thermometry_start.log

BIN
models/release/thermometry.exe Executable file

Binary file not shown.

BIN
models/test_y1.h264 Normal file

Binary file not shown.

BIN
models/yolov5 Executable file

Binary file not shown.

Binary file not shown.

0
rk1808-infer Normal file
View File

11
rundocker.sh Executable file
View File

@ -0,0 +1,11 @@
docker run -it --rm \
--device /dev/galcore \
--device /dev/dri/card0 \
--device /dev/vpu_service \
--device /dev/rga \
-v /lib/npu:/lib/npu \
-v /lib:/lib:ro \
-v /usr/lib:/usr/lib:ro \
--privileged \
fire_leave \
/bin/bash

8
start.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/sh
set -e
echo "Starting efka_flow_new inference..."
cd /usr/local/models
export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
./fireleave_tool