具身智能工业视觉分析与 IoT 物联管控系统实训报告
1 工效组合展示

2 具身智能工业视觉获取与分析应用
2.1 工具软件安装




2.2 工业视觉环境构建与应用


2.3 昇腾工业视觉终端应用展现



3 具身智能工业视觉识别快速编码实现
3.1 IMA-DS借力
给出PYTHON虚拟环境OCR文字识别的编码及其运行过程,包括汉字,WINDPWS环境,非COnDA,使用本机连接的网络摄像机。

3.2 运行环境构造

3.3 编码实现
import numpy as np
import cv2, easyocr, time, sys
# ========== 配置区域 ==========
# 海康USB摄像头索引(根据实际情况调整)
# 0 = 内置摄像头,1 = 第一个外接USB摄像头,以此类推
CAMERA_INDEX = 1
# OCR 配置
OCR_LANG = ['ch_sim', 'en'] # 简体中文 + 英文
OCR_INTERVAL = 2.0 # 识别间隔(秒),CPU模式建议≥2秒保证性能
CONFIDENCE_THRESHOLD = 0.5 # 置信度阈值
# 显示配置
WINDOW_NAME = "Hikvision USB Camera OCR (CPU Mode)"
BOX_COLOR = (0, 255, 0) # 绿色检测框
TEXT_COLOR = (0, 255, 0) # 绿色文字
BG_COLOR = (0, 0, 0) # 文字背景黑色
FONT_SCALE = 0.6
THICKNESS = 2
# =============================
def find_hik_camera(max_index=10): # 动寻找海康USB摄像头索引,返回首个或None
print("正在扫描USB摄像头...")
for i in range(max_index):
cap = cv2.VideoCapture(i, cv2.CAP_DSHOW) # Windows下使用DSHOW优化
if cap.isOpened():
# 读取一帧确认可用
ret, frame = cap.read()
if ret and frame is not None:
height, width = frame.shape[:2]
print(f" [索引 {i}] 可用 - 分辨率: {width}x{height}")
cap.release()
return i
cap.release()
return None
def preprocess_frame(frame): # 图像预处理:提升OCR识别率,CPU模式,识别前轻量级优化
# 转为灰度图
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 自适应直方图均衡化(CLAHE)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
enhanced = clahe.apply(gray)
# 轻微降噪
denoised = cv2.fastNlMeansDenoising(enhanced, h=10)
# 返回3通道图像(EasyOCR需要)
return cv2.cvtColor(denoised, cv2.COLOR_GRAY2BGR)
def main():
print(f"正在初始化 EasyOCR[CPU模式],首次运行会下载模型...")
print("模型下载约100-200MB,请保持网络畅通")
# 初始化 OCR Reader(CPU模式)
reader = easyocr.Reader( OCR_LANG,
gpu=False, # 显式指定CPU模式
model_storage_directory=None, # 使用默认模型路径
download_enabled=True # 允许自动下载模型
)
print("✅ OCR引擎初始化完成")
# 1. 自动扫描海康USB摄像头
cam_index = find_hik_camera()
if cam_index is None:
print("❌ 未找到任何USB摄像头")
print(" 请检查:")
print(" 1. 摄像头USB连接是否正常")
print(" 2. 设备管理器中是否识别为图像设备")
sys.exit(1)
print(f"✅ 海康USB摄像头已找到,使用索引: {cam_index}")
# 2. 打开摄像头(使用CAP_DSHOW减少延迟[3]
cap = cv2.VideoCapture(cam_index, cv2.CAP_DSHOW)
if not cap.isOpened():
print(f"❌ 无法打开摄像头索引 {cam_index}")
sys.exit(1)
# 3. 尝试设置分辨率(根据实际摄像头支持情况调整)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
cap.set(cv2.CAP_PROP_FPS, 30)
# 获取实际分辨率
actual_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
actual_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
actual_fps = cap.get(cv2.CAP_PROP_FPS)
print(f"�� 相机分辨率: {actual_width}x{actual_height} | 帧率: {actual_fps:.1f}fps[3]")
# 4. 创建显示窗口
cv2.namedWindow(WINDOW_NAME, cv2.WINDOW_NORMAL)
cv2.resizeWindow(WINDOW_NAME, 640, 480)
print("�� 开始实时识别...")
print("操作提示:")
print(" 'q' - 退出程序")
print(" 's' - 保存当前帧")
print(" 'p' - 暂停/继续识别")
print(" 'd' - 显示调试信息")
last_ocr_time = 0; frame_count = 0; paused = False; show_debug = False
try:
while True:
# 读取帧
ret, frame = cap.read()
if not ret:
print("⚠️ 无法读取帧,重试中...")
time.sleep(1)
continue
current_time = time.time()
frame_count += 1
# 准备显示图像
display_frame = frame.copy()
# 如果未暂停且到达识别间隔
if not paused and (current_time - last_ocr_time) >= OCR_INTERVAL:
# 预处理:提升文字清晰度
processed_frame = preprocess_frame(frame)
# 执行OCR识别(传入预处理后的图像)
results = reader.readtext(processed_frame)
# 绘制识别结果
for (bbox, text, confidence) in results:
if confidence < CONFIDENCE_THRESHOLD:
continue
# 提取边界框坐标
points = np.array(bbox, dtype=np.int32)
top_left = tuple(points); bottom_right = tuple(points[2])
# 绘制矩形框
cv2.rectangle(display_frame, top_left, bottom_right, BOX_COLOR, THICKNESS)
# 准备显示文字
label = f"{text} ({confidence:.2f})"
# 获取文字大小
(text_width, text_height), _ = cv2.getTextSize(
label, cv2.FONT_HERSHEY_SIMPLEX, FONT_SCALE, THICKNESS )
# 绘制文字背景
cv2.rectangle( display_frame,(top_left[0], top_left[1] - text_height - 10),
(top_left[0] + text_width, top_left[1]), BG_COLOR, -1 )
# 绘制文字
cv2.putText( display_frame, label, (top_left[0], top_left[1] - 5),
cv2.FONT_HERSHEY_SIMPLEX, FONT_SCALE, TEXT_COLOR, THICKNESS )
# 控制台输出
print(f"[帧 {frame_count}] 识别: '{text}' | 置信度: {confidence:.3f}")
last_ocr_time = current_time
# 显示调试信息
if show_debug:
fps = 1.0 / (current_time - last_ocr_time + 0.001) if current_time > last_ocr_time else 0
info_lines = [ f"帧数: {frame_count}", f"帧率: {actual_fps:.1f}",
f"OCR间隔: {OCR_INTERVAL}s", f"状态: {'暂停' if paused else '运行中'}", ]
y_offset = 30
for line in info_lines:
cv2.putText( display_frame, line, (10, y_offset),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1 )
y_offset += 25
# 显示状态指示
status_text = "⏸️ PAUSED" if paused else "▶️ RECOGNIZING"
cv2.putText( display_frame, status_text, (actual_width - 200, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 255) if paused else (0, 255, 0), 2 )
# 显示图像
cv2.imshow(WINDOW_NAME, display_frame)
# 按键处理
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
print("�� 用户退出")
break
elif key == ord('s'):
timestamp = time.strftime("%Y%m%d_%H%M%S")
filename = f"ocr_capture_{timestamp}.jpg"
cv2.imwrite(filename, display_frame)
print(f"�� 已保存: {filename}")
elif key == ord('p'):
paused = not paused
print(f"{'⏸️ 暂停识别' if paused else '▶️ 继续识别'}")
elif key == ord('d'):
show_debug = not show_debug
print(f"{'�� 显示调试信息' if show_debug else '�� 隐藏调试信息'}")
except KeyboardInterrupt:
print("\n⛔ 用户中断")
finally:
# 资源释放
cap.release(); cv2.destroyAllWindows(); print("✅ 程序结束,资源已释放")
if __name__ == "__main__":
main()
3.4 运行测试

4 IoTDA中转空间构建
4.0 IoTDA构造




4.1 产品及其模型构建
4.1.1 温湿度计
温湿度计产品信息如下:
产品信息:
- 产品名称:温湿度计
- 协议类型:MQTT
- 数据格式:JSON
- 所属行业:智能家居
- 所属子行业:智能家居
服务列表:
- 服务ID:T&H
- 属性名称:temperature
- 数据类型:decimal
- 访问权限:可读可写
- 取值范围:-100~100
- 属性名称:humidity
- 数据类型:decimal
- 访问权限:可读可写
- 取值范围:0~100 点击“产品 》 创建产品”。

4.1.2 吸顶灯
智能吸顶灯产品信息如下:
产品信息:
- 产品名称:智能吸顶灯
- 协议类型:MQTT
- 数据格式:JSON
- 所属行业:智能家居
- 所属子行业:智能家居
- 服务 ID:Light
- 属性名称:光照强度
- 数据类型:decimal
- 访问权限:可读可写
- 取值范围:0~5000
- 属性名称:功率
- 数据类型:decimal
- 访问权限:可读可写
- 取值范围:0~10000
- 命令名称:Light
- 下发参数名称:turn
- 数据类型:string
- 长度:10
- 下发参数名称:power
- 数据类型:decimal
- 取值范围:0~10000
- 服务 ID:Color
- 属性名称:当前颜色
- 数据类型:string
- 长度:10
- 命令名称:设置颜色
- 下发参数名称:color
- 数据类型:string
- 长度:10
根据以上“智能吸顶灯”信息,参考“温湿度计”产品创建的方式,完成“智能吸顶灯”产品的创建,其中命令 在命令列表中创建,创建方式和属性类似。 智能吸顶灯产品创建完成如下:

4.2 设备实例化应用

4.2.1 温湿度计设备注册及模拟测试
打开浏览器,访问如下链接下载MQTT设备模拟器zip包。
https://obs-pipeline.obs.cn-north-4.myhuaweicloud.com/sdkDeploy/simulator/MQTT_Simulator.zip
解压已下载的MQTT_Simulator.zip 包。进入解压后的目录,双击device_demo_mqttnet.exe 运行MQTT设备模拟器。
填写对接参数后,单击“Connect”按钮:
- SSL Connection:勾选则使用8883端口,不勾选则使用1883端口;
- Server Address:设备接入服务实例的设备侧MQTT(S)接入地址;
- Device ID:填写注册设备成功后生成的设备ID;
- Device Secret:填写注册设备时使用的设备秘钥



4.2.2 吸顶灯设备注册及模拟测试


JSON 消息如下所示,需要输入属性名、属性值和服务ID:
{"services":[{"properties":{"temperature":23,"humidity":35},"service_id":"T&H","event_time":null}]}




5 CodeArts智慧路灯快速构建与部署

5.1 应用项目创建


5.2 代码托管操作



5.3 构建任务设立



5.4 项目构建实现


5.5 项目部署运行


DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)