基于Jetson与HA的拓竹3D打印机炒面检测方案
前言
由于实验室闲置的板子较多,然后还有两台A1和一台P1S,就尝试在Jetson上端侧部署obico-server实现对炒面的视觉检测。
实际本质就是替换onnxruntime-GPU来实现在Jetson上的高性能推理(实际纯拿CPU硬算也够)
安装配置 Home Assistant
安装HA的教程网上有很多了,可以选择适合自己的方式,例如HAOS,这边只是简单演示,故选择使用docker-compose来快速实现

首先当然是安装docker-compose
sudo apt updatesudo apt install docker-compose -y然后我们新建一个文件夹用来放置compose文件和数据目录
version: '3'services: homeassistant: image: homeassistant/home-assistant:latest container_name: homeassistant restart: always volumes: - ./config:/config environment: - TZ=Asia/Shanghai ports: - "8123:8123"在目录下拉取并运行HA
sudo docker-compose up -d
浏览器进入 IP:8123 ,根据向导页面简单配置一下

然后我们接下来需要安装 HACS 以通过 bambu lab 接入 3D打印机
sudo docker exec -it homeassistant /bin/bash # 进入容器的命令交互
wget -O - https://get.hacs.vip | bash - # hacs一键安装脚本然后Ctrl+D退出容器,再重启一下容器
sudo docker-compose restart进入 设置 - 设备与服务 - 添加集成 - hacs

然后就能看到侧边栏多了个 HACS ,进入并且搜索 bambu lab 安装,然后再重启一下HA

重启完后再到添加集成里,搜索 bambu lab,根据向导添加打印机即可

如图所示添加自定义仓库

类型选择 集成,仓库填写
https://github.com/nberktumer/ha-bambu-lab-p1-spaghetti-detection然后即可安装炒面检测配套的集成

重启后记得再去集成里面添加一下

最后一步是点击此链接添加自动化蓝图,来实现对3D打印机的自动监测与提醒

点击第一个蓝图即可进行配置,当然我们这边还没安装机器学习的服务端,所以暂时先不配置
安装 Obico_ML
上面都是前置的准备工作,这是检测炒面的关键服务,使用onnxruntime来推理视觉模型实现对炒面的检测
在 x86 服务端上,我们只需通过 docker-compose 即可一键拉取运行
version: '3.8'
services: ha_bambu_lab_p1_spaghetti_detection: image: nberk/ha_bambu_lab_p1_spaghetti_detection_standalone:latest container_name: ha_bambu_lab_p1_spaghetti_detection restart: unless-stopped environment: - ML_API_TOKEN=bambu_nb - TZ=Asia/Shanghai ports: - "3333:3333"亦或是直接把两个compose文件合并
version: '3'services: homeassistant: image: homeassistant/home-assistant:latest container_name: homeassistant restart: always volumes: - ./config:/config environment: - TZ=Asia/Shanghai ports: - "8123:8123"
ha_bambu_lab_p1_spaghetti_detection: image: nberk/ha_bambu_lab_p1_spaghetti_detection_standalone:latest container_name: ha_bambu_lab_p1_spaghetti_detection restart: unless-stopped environment: - ML_API_TOKEN=bambu_nb - TZ=Asia/Shanghai ports: - "3333:3333"如果需要 NVIDIA GPU 加速,我们首先需要安装 NVIDIA Container Toolkit
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/list.d/nvidia-container-toolkit.listsudo apt-get updatesudo apt-get install -y nvidia-container-toolkitsudo nvidia-ctk runtime configure --runtime=dockersudo systemctl restart docker然后修改 compose 文件,添加 deploy 如下所示
ha_bambu_lab_p1_spaghetti_detection: image: nberk/ha_bambu_lab_p1_spaghetti_detection_standalone:latest container_name: ha_bambu_lab_p1_spaghetti_detection restart: unless-stopped environment: - ML_API_TOKEN=bambu_nb - TZ=Asia/Shanghai ports: - "3333:3333" deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu]然后重启docker,可以看到日志中已经成功启用了 CUDA
sudo docker-compose up -dsudo docker logs ha_bambu_lab_p1_spaghetti_detection
如需手动测试可以通过此脚本来测试(内嵌了一张炒面图片URL用于测试)
安装 Obico_ML For Jetson Orin
接下来是如何在边缘设备 Jetson Orin 系列上端侧部署,需要 Jetpack > 6,因为 Jetpack 5 可以使用官方文档的方法,也很简单,但由于我手边暂时没有板子跑着5,所以就不测试了
本机配置如下
- Jetson Orin NX 16G
- Ubuntu 22.04
- Jetpack 6.2.1
- L4T 36.4.7
- CUDA 12.6.68
- cuDNN 9.3.0.75
- TensorRT 10.3.0.30
拉取项目并构建镜像
git clone https://github.com/Shattered217/obico-server.gitcd obico-server/ml_api/bash scripts/build_jetson.sh构建大概需要二十分钟(大部分都是拉取,与网速有关)

最后是测试启动容器!一次成功!(没问题可以Ctrl+C先停止)
bash scripts/run_jetson.sh
我们可以编写一个 compose 文件来方便管理这个容器
version: '3.8'
services: ml-api: image: obico-ml-api:jetson container_name: obico_ml_api runtime: nvidia ports: - "3333:3333" environment: - ML_API_TOKEN=bambu_nb restart: unless-stopped配置自动化
接下来我们回到HA,进入 设置 - 自动化与场景 - 蓝图,选择之前导入的 Bambu 蓝图进行配置
跟着提示按实际填写即可
- Home Assistant Host HA的地址
- Obico ML API Host 刚刚配置的Obico ML的地址
- Obico ML API Auth Token docker中配置的认证密钥 token
- Printer Print Status Sensor 打印状态
- Printer Current Stage Sensor 当前阶段
- Printer Camera Entity 摄像头
- Printer Pause Button Entity 暂停按钮
- Printer Resume Button Entity 恢复按钮
- Printer Stop Button Entity 停止按钮
- Printer Chamber Light 机箱灯

TG 推送蓝图
上面的蓝图是通过HA官方APP来推送通知,我这边魔改了一个通过TG推送通知并控制的蓝图,通过此链接导入,区别是需要能通过公网来访问HA,其实上面的也需要,不然你在外面岂不是收不到消息了(

设置流程多了一个需要去集成中添加 Telegram Bot,注意一定要选择“投票”,即轮询,这样才能接收到用户发送的指令,添加完后在蓝图中就可以选择了

KEEP EXPLORING