具身智能实训复盘:从海康相机 OCR 到昇腾边缘检测,再到华为云 IoTDA + CodeArts 一条龙落地

摘要:本文记录一次"具身智能工业视觉分析与物联监护"综合实训的完整踩坑过程。五天时间,我亲手把四套华为/海康的工具链串了起来:用 Python + 海康工业相机跑通实时 OCR 文字识别;用昇腾 Atlas 200I DK A2 开发板借力 ascend-devkit 样例做 YOLOv5 摄像头实时检测;在华为云 IoTDA 上建产品、定物模型、用 MQTT 模拟设备做发布/订阅联调;最后用 CodeArts 把"智慧路灯"Spring Boot 应用构建成 jar 并本地跑起来。每个环节都附了真实截图和关键代码,末尾有踩坑总结,希望能帮到同样在做这套实训的同学。


一、实训背景与目标

这次实训的主题是具身智能工业视觉分析与物联监护应用,说白了就是"让机器能看、能认、能上报、能被远程控制"。整体分两条技术主线:

  • 工业视觉主线:相机取图 → 智能分析(OCR / 目标检测)→ 结果可视化
  • 物联监护主线:设备接入华为云 → 数据上报 / 命令下发 → 边缘或云端应用联动

我最终要落地四件事,也是文章的四个主体章节:

| 模块 | 核心任务 | 用到的主要工具 |

| — | — | — |
| 模块一 | 海康工业相机 + Python 实时 OCR 文字识别 | 海康 MVS、PaddleOCR、OpenCV |
| 模块二 | 昇腾开发板 + YOLOv5 摄像头实时目标检测 | Atlas 200I DK A2、ascend-devkit、JupyterLab |
| 模块三 | 华为云 IoTDA 产品/物模型构建 + MQTT 联调 | 华为云、IoTDA、MQTT 客户端 |
| 模块四 | CodeArts 智慧路灯应用构建与本地部署 | CodeArts、Maven、Spring Boot |

成品效果先看两张图(对应实训报告里的"成品结果 1 / 2"):
在这里插入图片描述

在这里插入图片描述

二、环境清单(照着配少走弯路)

硬件

  • 海康工业相机 MV-CS060-10UC-PRO(600 万像素、USB3.0)
  • 华为昇腾 Atlas 200I DK A2 开发者套件(出厂烧录 Ubuntu 22.04.5 LTS aarch64 系统卡)
  • 上位机一台(Windows,Python 3.x,无独显所以用 CPU 推理)

软件 / 平台

  • 海康 MVS 客户端 V2.2.0
  • Python 依赖:opencv-pythonnumpypaddleocrctypes
  • MobaXterm(SSH 登录开发板,IP 192.168.137.100
  • 华为云账号(已完成实名认证)、IoTDA 标准版实例、CodeArts 项目
  • 本地 JDK:jdk1.8.0_192

三、模块一:Python + 海康工业相机实时 OCR

3.1 安装 MVS 客户端、连接相机

海康机器人官网下 MVS(我用的是 V2.2.0),装好驱动后用 USB3.0 把相机连上上位机。MVS 里能直接枚举到设备,看到型号、序列号、GUID 这些信息,还能实时预览取流是否正常。我这台的型号就是图里那个 MV-CS060-10UC-PRO

在这里插入图片描述

3.2 搭建 PaddleOCR 环境

pip install opencv-python numpy paddleocr

PaddleOCR 第一次跑会自动下载 PP-OCR 中英文模型。我这里故意不开 GPU(上位机没独显):

ocr = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=False)
  • use_angle_cls=True:开文本方向分类,斜着拍的字也能认
  • lang="ch":中文识别
  • use_gpu=False:纯 CPU 推理,实测速度够用

3.3 代码实现(核心思路)

海康相机通过官方 SDK 的 MyCameraControlClass 封装类来取流。这里有一个很关键的坑:OpenCV 的 putText 画不了中文。所以我自己建了一个"简中→英文"的映射字典,识别到中文后先翻成英文再画框,显示才不会乱码。

核心流程(依据实训截图整理,关键片段):

import cv2
import numpy as np
from paddleocr import PaddleOCR
from MyCameraControlClass import MvCamera, MV_GIGE_DEVICE, MV_USB_DEVICE

# 中文 -> 英文,避免 cv2 绘制中文乱码
ch2en = {
    "光源": "light source",
    "新光": "new light",
    "原光": "original light",
    "含套件": "including kit",
    "不含套件": "without kit",
}

# 1) 枚举 + 打开相机 + 开始取流
cam = MvCamera()
dev_list = ...
cam.MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, dev_list)
cam.MV_CC_CreateHandle(handle, dev_info)
cam.MV_CC_OpenDevice()          # 独占方式打开
cam.MV_CC_StartGrabbing()

# 2) OCR 初始化(CPU 推理)
ocr = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=False)

while True:
    ret, frame = cam.get_frame()
    # 3) 提速:镜像 + 50% 缩放后进 OCR
    mini = cv2.flip(frame, 1)
    mini = cv2.resize(mini, (0, 0), fx=0.5, fy=0.5)
    result = ocr.ocr(mini, cls=True)

    for line in result:
        box, (text, score) = line
        # 4) 坐标还原:先放大 2 倍,再镜像翻回原图尺寸
        box = [[x * 2, y * 2] for x, y in box]
        box = mirror_back(box)
        cv2.polylines(frame, [np.int32(box)], True, (0, 255, 0), 2)
        label = ch2en.get(text, text)
        cv2.putText(frame, f"{label} {score:.2f}", ...,
                    cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
    cv2.imshow("cam + OCR", frame)

取流与初始化的完整代码贴在下面两张图里,比上面片段更全:

在这里插入图片描述
在这里插入图片描述

3.4 运行效果

识别时终端会同步打印"识别中文 + 置信度"。实测对"光源"“新光”"原光"这类字样,置信度能到 0.6 ~ 0.95,绿框 + 英文标签实时叠加在画面里,效果就是文章开头那张成品图。


四、模块二:昇腾 Atlas 200I DK A2 + YOLOv5 检测

4.1 借力 ascend-devkit 样例

开发板上电后进到自带的 ascend-devkit 欢迎页,里面有主页、文档、在线课程、在线实验、论坛、代码仓几个入口。在线实验里直接给了 YOLOv5 目标检测的开箱即用样例,我偷懒直接借力,省掉了自己训练 + 转 om 模型的流程。

在这里插入图片描述

4.2 JupyterLab 环境搭建

用 MobaXterm 通过 SSH 登录开发板:

主机: 192.168.137.100
用户: HwHiAiUser

登录后跑 jupyter lab,服务在 8888 端口,日志里会打印带 token 的访问链接。把链接复制到本机浏览器即可进 JupyterLab。

在这里插入图片描述

4.3 编码:camera 模式实时推理

打开 samples/notebooks/01-yolov5 样例,main.ipynb 支持 image / camera / video 三种推理模式。我把它改成摄像头实时模式

infer_mode = 'camera'        # 摄像头实时推理
# yolo.om 是 YOLOv5 转好的昇腾模型格式
infer_camera(model, labels_dict, cfg)

工程里还有 det_utils.py、转好的 yolo.om 模型、coco 类别文件,结构如图:

在这里插入图片描述

4.4 运行效果

notebook 一跑,摄像头画面里就用绿框标出目标并显示类别和置信度,能稳定识别 personbottle 等。这部分的成品就是文章开头那张 YOLOv5 检测图。

在这里插入图片描述


五、模块三:华为云 IoTDA 物联中转

5.1 账号与实例

先注册华为云账号、做个人实名认证,然后进"统一身份认证 → 我的凭证"拿 API 凭证(IAM 用户名、账号 ID、项目 ID),我用的区域是华北-北京四 cn-north-4。接入信息里确认平台支持 MQTTS(8883)、MQTT(1883) 等协议。

在这里插入图片描述
在这里插入图片描述

接着在 IoTDA 控制台开一个标准版实例(我取名"咕咕嘎嘎"),状态显示"运行中"就算中转空间搭好了。

在这里插入图片描述

5.2 产品与物模型

建了两个产品:

  • 温湿度计T&H 服务,属性 temperature(温度)、humidity(湿度)
  • 智能吸顶灯Light 服务(属性 lightproportion 亮度比例、V 电压)+ Color 服务(属性 colornow 当前颜色、命令"设置颜色")

在这里插入图片描述

5.3 MQTT 模拟联调(Publish / Subscribe)

这是模块三里最关键的一步,正好对应你说的"温湿度 Publish 上报、吸顶灯 Subscribe 接收"。

温湿度计(Publish 上报):注册直连设备后,用 MQTT 客户端按 device_id / 密钥 接入,向
$oc/devices/{device_id}/sys/properties/report 周期上报温湿度。平台设备列表显示在线,物模型能看到 temperature=26.8humidity=62.5 的实时值。

在这里插入图片描述
在这里插入图片描述

吸顶灯(Subscribe 接收命令):设备侧 Subscribe 订阅命令主题,平台下发"设置颜色"命令,设备回 {"code":0,"message":"success"}。平台日志完整记录了"属性上报→下发命令→设备响应"全过程,colornow 也更新成了 green

在这里插入图片描述
在这里插入图片描述


六、模块四:CodeArts 智慧路灯构建与部署

6.1 项目创建与代码托管

CodeArts 里基于"智慧路灯"模板建项目 streetlight,平台自动配好代码仓、制品仓。源码托管在 master 分支,是个标准 Maven 结构的 Spring Boot 应用,核心是通过 IoTDA 数据接入服务读路灯设备数据。

6.2 编译构建

建构建任务 streetlight-26913855,步骤:环境准备 → 代码检出 → Maven 构建 → 上传软件包到软件发布库,产物名 huawei-0.0.1-SNAPSHOT.jar。手动触发后日志一路绿到底,最后 Finished: SUCCESS;软件发布库里也生成了多个版本的 jar 制品。
在这里插入图片描述
在这里插入图片描述

6.3 本地部署与踩坑(重点)

把 jar 下到本地 Windows,先配 JAVA_HOME 指向 jdk1.8.0_192

在这里插入图片描述

然后 java -jar huawei-0.0.1-SNAPSHOT.jar 启动。第一个坑来了

login status: HTTP/1.1 401
java.lang.NullPointerException

一开始以为是 jar 坏了,其实是访问凭证没配。在浏览器开 http://127.0.0.1:8080/index.html,到"参数设置"里填齐这些字段就通了:

  • 数据接入服务访问密钥 ID / 密钥
  • 通道名称(如 lightChannel
  • 资源空间 APPID
  • API 凭证(账号名 / IAM 用户名 / 密码)
  • 项目 ID、产品 ID

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配完保存,应用顺利从 IoTDA 拉到设备数据,智慧路灯跑起来了——实训全部内容收工。


七、总结与心得

  1. 视觉和物联是两半,串起来才是"具身智能":前面相机/OCR、开发板检测解决"能看能认",后面 IoTDA + CodeArts 解决"能上报能被控",补齐了感知到执行的闭环。
  2. 借力官方样例能省大把时间:昇腾的 ascend-devkit 在线实验、CodeArts 的智慧路灯模板,都是现成的,先把样例跑通再改,比从零搭快得多。
  3. 两个最常见坑:OpenCV 画不了中文(用中英映射字典绕开)、Spring Boot 启动 401(多半是云平台凭证没填)。
  4. 真机数据比想像中稳:温湿度、颜色命令、目标检测置信度跑下来都符合预期,说明这套工具链在工程上是能直接用的。

参考资料 / 工具入口

  • 海康机器人 MVS 客户端(官网下载)
  • PaddleOCR 官方文档
  • 华为云 IoTDA、CodeArts 文档中心
  • 昇腾 ascend-devkit 在线实验(Atlas 200I DK A2)
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐