具身智能工业视觉分析与物联监护应用演练
1 工效组合展示

本次实训主要完成工业视觉识别+物联网设备接入+云端项目部署整套流程。通过端侧智能视觉设备采集画面、AI识别分析,再通过物联网平台转发设备数据,最后用云端工具完成项目搭建与部署,实现工业智能可视化监测与设备远程控制。
2 具身智能工业视觉获取与分析应用
2.1 工具软件安装



安装本次实训所需配套软件与Python视觉依赖库,配置系统环境变量,解决版本兼容问题,确保后续图像处理、代码运行、设备调试工具可以正常使用。
2.2 工业视觉环境构建与应用




搭建本地工业视觉运行环境,配置图像采集参数,完成图片读取、降噪、预处理等基础功能测试。模拟工业场景,验证环境可以正常完成视觉数据采集和简单分析。
2.3 昇腾工业视觉终端应用展现

连接昇腾工业视觉终端设备,完成设备联网与调试。利用终端摄像头实时采集现场画面,实现端侧实时图像采集、视觉分析,展示硬件终端的智能视觉感知能力。
3 具身智能工业视觉识别快速编码实现
3.1 IMA-DS借力

使用IMA-DS智能开发工具,调用内置工业视觉算法模板,复用成熟代码框架,快速搭建视觉识别程序,减少重复开发,提升编码效率。
3.2 运行环境构造


配置算法运行环境,补齐依赖库,适配昇腾终端运行参数,导入测试数据集,完成环境校验,保证代码可以正常编译和运行。
3.3 编码实现
基于模板编写工业视觉识别代码,实现图像采集、预处理、目标识别、结果输出功能。根据实训场景微调代码参数,保证识别效果适配工业场景。
# -*- coding: utf-8 -*-
"""
网络摄像机实时 OCR 文字识别(支持中文,CPU 运行)
用法:
python ocr_camera.py --image test.jpg # 单图测试
python ocr_camera.py --url "rtsp://用户:密码@IP:554/..." # 实时识别
窗口操作:q / ESC 退出,s 保存画面。
"""
import argparse
import os
import time
import cv2
import numpy as np
_WIN_FONTS = [
r"C:\Windows\Fonts\msyh.ttc", # 微软雅黑
r"C:\Windows\Fonts\msyhbd.ttc",
r"C:\Windows\Fonts\simhei.ttf", # 黑体
r"C:\Windows\Fonts\simsun.ttc", # 宋体
]
def load_font(size=22):
from PIL import ImageFont
for path in _WIN_FONTS:
if os.path.exists(path):
try:
return ImageFont.truetype(path, size)
except Exception:
continue
print("[警告] 未找到中文字体,画面中文标签可能显示为方块(不影响识别)。")
return ImageFont.load_default()
def init_ocr():
from paddleocr import PaddleOCR
return PaddleOCR(
use_angle_cls=True, # 方向分类,提升旋转/竖排识别
lang="ch", # 中文+英文
use_gpu=False, # CPU 推理
show_log=False,
)
def parse_ocr_result(result):
items = []
if not result:
return items
page = result
if isinstance(result, list) and len(result) == 1 and isinstance(result[0], list):
page = result[0]
for det in page:
if det is None:
continue
try:
box, (text, score) = det[0], det[1]
except (TypeError, ValueError, IndexError):
continue
pts = np.array(box, dtype=np.int32).reshape(-1, 2)
items.append((pts, str(text), float(score)))
return items
def run_ocr_once(ocr, frame):
return parse_ocr_result(ocr.ocr(frame, cls=True))
def draw_results(img, items, font, fps):
for pts, _t, _s in items:
cv2.polylines(img, [pts], True, (0, 255, 0), 2)
cv2.putText(img, f"FPS: {fps:.1f}", (10, 28),
cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)
if items:
from PIL import Image, ImageDraw
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
pil = Image.fromarray(rgb)
draw = ImageDraw.Draw(pil)
for pts, text, score in items:
x, y = int(pts[:, 0].min()), int(pts[:, 1].min())
draw.text((x, max(0, y - 28)), f"{text} ({score:.2f})",
font=font, fill=(0, 255, 0))
img = cv2.cvtColor(np.array(pil), cv2.COLOR_RGB2BGR)
return img
def open_camera(url):
cap = cv2.VideoCapture(url, cv2.CAP_FFMPEG)
if not cap.isOpened():
return None
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
return cap
def camera_loop(ocr, url, interval, save_dir, font):
cap = open_camera(url)
if cap is None:
print("[错误] 无法打开摄像机,请先用 VLC 测试该地址。")
return
print(f"[信息] 已连接:{url}")
if save_dir:
os.makedirs(save_dir, exist_ok=True)
cv2.namedWindow("OCR - 网络摄像机", cv2.WINDOW_NORMAL)
items, last_ocr, t0, frame_count, fps = [], 0.0, time.time(), 0, 0.0
while True:
ok, frame = cap.read()
if not ok:
print("[警告] 读取失败,重连...")
cap.release(); time.sleep(2)
cap = open_camera(url)
if cap is None:
time.sleep(3); continue
print("[信息] 重连成功。"); continue
now = time.time(); frame_count += 1
if now - t0 >= 1.0:
fps = frame_count / (now - t0); frame_count = 0; t0 = now
if now - last_ocr >= interval:
items = run_ocr_once(ocr, frame); last_ocr = now
for _p, text, score in items:
print(f"[识别] {text} 置信度 {score:.3f}")
frame = draw_results(frame, items, font, fps)
cv2.imshow("OCR - 网络摄像机", frame)
key = cv2.waitKey(1) & 0xFF
if key in (ord("q"), 27):
break
elif key == ord("s") and save_dir:
p = os.path.join(save_dir, f"ocr_{time.strftime('%Y%m%d_%H%M%S')}.jpg")
cv2.imwrite(p, frame); print(f"[保存] {p}")
cap.release(); cv2.destroyAllWindows()
def image_mode(ocr, image_path, font):
frame = cv2.imread(image_path)
if frame is None:
print("[错误] 无法读取图片。"); return
items = run_ocr_once(ocr, frame)
print("\n================ 识别结果 ================")
for _p, text, score in items:
print(f"{text}\t置信度 {score:.3f}")
print("==========================================\n")
frame = draw_results(frame, items, font, 0)
cv2.imshow("OCR 结果", frame); cv2.waitKey(0); cv2.destroyAllWindows()
def main():
ap = argparse.ArgumentParser(description="网络摄像机实时 OCR(中文,CPU)")
ap.add_argument("--url", default="", help="摄像机 RTSP/HTTP 地址")
ap.add_argument("--image", default="", help="单图测试路径")
ap.add_argument("--interval", type=float, default=1.0, help="OCR 间隔秒")
ap.add_argument("--save", default="", help="保存截图目录")
args = ap.parse_args()
if not args.url and not args.image:
ap.print_help(); return
print("[信息] 初始化 PaddleOCR(首次自动下载模型)...")
ocr = init_ocr(); font = load_font(22)
if args.image:
image_mode(ocr, args.image, font)
else:
camera_loop(ocr, args.url, args.interval, args.save, font)
if __name__ == "__main__":
main()
3.4 运行测试
本地调试代码,排查报错,连接昇腾终端进行实景测试。测试识别准确率、运行速度,优化程序,最终实现稳定的工业视觉识别功能。

4 IoTDA中转空间构建

4.0 IoTDA构造
登录物联网IoTDA平台,创建实训项目空间,配置设备接入、数据转发权限,搭建云端数据中转环境,为后续设备上云做准备。

4.1 产品及其模型构建
4.1.1 温湿度计
在平台新建温湿度计产品,定义设备数据模型,设置温度、湿度、设备在线状态等属性,配置数据上报和查询功能,完成设备云端建模。

4.1.2 吸顶灯
新建吸顶灯产品,定义灯具开关、亮度、色温等设备属性,配置云端控制指令,支持远程开关灯、调参等控制功能。

4.2 设备实例化应用
4.2.1 温湿度计设备注册及模拟测试
在对应产品下注册设备实例,获取设备密钥并完成设备绑定。启动模拟设备,测试数据上云,查看平台能否正常接收温湿度数据、查询设备状态。

4.2.2 吸顶灯设备注册及模拟测试
注册吸顶灯设备并完成上云配置。通过云端平台下发控制指令,测试远程开灯、关灯、调光功能,验证设备可正常响应云端命令。


5 CodeArts智慧路灯快速构建与部署
5.1 应用项目创建
进入CodeArts云端开发平台,新建智慧路灯项目,规划项目目录与功能模块,初始化项目运行环境。


5.2 代码托管操作
将项目代码上传至云端代码仓库,完成代码托管、版本管理,实现代码云端保存、随时更新与回溯。



5.3 构建任务设立
新建项目构建任务,绑定代码仓库,配置编译环境、依赖参数与触发规则,设置自动化构建条件。

5.4 项目构建实现
启动云端自动构建,平台自动拉取代码、编译、打包。排查构建报错,生成可部署的项目运行安装包。



5.5 项目部署运行
将构建好的智慧路灯项目部署到云端服务器,启动项目并测试功能,验证项目可以正常联网、接收设备数据、实现路灯智能管控,完成整体实训部署。
更多推荐

所有评论(0)