1 工效组合展示

2 具身智能工业视觉获取与分析应用

2.1 工具软件安装

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

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

3 具身智能工业视觉识别快速编码实现

3.1 IMA-DS借力

3.2 运行环境构造

3.3 编码实现

import argparse

import os

import time

import cv2

import numpy as np

# 必须在读取 RTSP 流之前设置:Windows 下用 TCP 传输更稳定、延迟更低

os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;tcp"

from PIL import Image, ImageDraw, ImageFont

from paddleocr import PaddleOCR

from config import CAMERA, OCR, RUNTIME

# ---------- 初始化 ----------

def init_ocr():

"""初始化 PaddleOCR(首次运行会自动下载模型)"""

print("[1/3] 正在初始化 PaddleOCR(首次运行需下载模型,请稍候)...")

return PaddleOCR(

lang=OCR["lang"],

use_angle_cls=OCR["use_angle_cls"],

use_gpu=OCR["use_gpu"],

show_log=OCR["show_log"],

)

def open_camera(url):

"""打开网络摄像机视频流"""

print(f"[2/3] 正在连接摄像机: {url}")

cap = cv2.VideoCapture(url, cv2.CAP_FFMPEG)

if not cap.isOpened():

return None

# 关闭内部缓冲,降低画面延迟

cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)

return cap

def load_font():

"""加载中文字体;找不到就用 PIL 默认字体"""

for path in (

RUNTIME["font_path"],

"C:/Windows/Fonts/msyh.ttc", # 微软雅黑

"C:/Windows/Fonts/simsun.ttc", # 宋体

):

if os.path.exists(path):

return ImageFont.truetype(path, 22)

return ImageFont.load_default()

# ---------- 结果绘制 ----------

def draw_chinese_text(frame, text, pos, color=(0, 255, 0), font=None):

"""用 PIL 在画面上绘制中文(OpenCV 的 putText 无法显示汉字,会变乱码)"""

rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

pil_img = Image.fromarray(rgb)

draw = ImageDraw.Draw(pil_img)

draw.text(pos, text, font=font, fill=color)

return cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR)

def draw_results(frame, results, font):

"""把识别结果(框 + 文字 + 置信度)画到画面上"""

if not results or not results[0]:

return frame

for item in results[0]:

box = item[0] # 4 个顶点 [[x,y], [x,y], [x,y], [x,y]]

text, conf = item[1] # 识别文字, 置信度

pts = np.array(box, dtype=np.int32).reshape((-1, 1, 2))

cv2.polylines(frame, [pts], True, (0, 255, 0), 2) # 绿色框

label = f"{text} {conf:.2f}"

x, y = int(box[0][0]), int(box[0][1])

frame = draw_chinese_text(frame, label, (x, max(y - 26, 4)), font=font)

return frame

def print_results(results):

"""在控制台打印识别出的文字"""

if not results or not results[0]:

return

for item in results[0]:

text, conf = item[1]

print(f" 识别: {text} (置信度 {conf:.2f})")

# ---------- 主流程 ----------

def run_camera(ocr, font):

url = CAMERA["url"]

cap = open_camera(url)

if cap is None:

print("[错误] 无法连接摄像机,请检查 config.py 里的地址、账号密码、网络。")

return

print("[3/3] 启动成功!按 q 退出。")

last_results = None

last_ocr_time = 0.0

while True:

ret, frame = cap.read()

if not ret:

print("[提示] 读取帧失败,3 秒后尝试重连...")

cap.release()

time.sleep(3)

cap = open_camera(url)

if cap is None:

print("[错误] 重连失败,继续重试...")

time.sleep(3)

continue

# 按时间间隔做 OCR,其余帧沿用上次结果,保证画面流畅

now = time.time()

if now - last_ocr_time >= RUNTIME["ocr_interval"]:

results = ocr.ocr(frame, cls=True)

last_results = results

last_ocr_time = now

print_results(results)

frame = draw_results(frame, last_results, font)

cv2.imshow(RUNTIME["window_name"], frame)

if cv2.waitKey(1) & 0xFF == ord(RUNTIME["quit_key"]):

break

cap.release()

cv2.destroyAllWindows()

def run_image(ocr, font, image_path):

"""本地图片测试模式:先验证 OCR 是否正常,再连摄像机"""

frame = cv2.imread(image_path)

if frame is None:

print(f"[错误] 无法读取图片: {image_path}")

return

results = ocr.ocr(frame, cls=True)

print_results(results)

frame = draw_results(frame, results, font)

cv2.imshow(RUNTIME["window_name"], frame)

print("按任意键关闭窗口")

cv2.waitKey(0)

cv2.destroyAllWindows()

if __name__ == "__main__":

parser = argparse.ArgumentParser(description="网络摄像机 + PaddleOCR 汉字识别")

parser.add_argument(

"--source", type=str, default=None,

help="本地图片路径(用于先测试 OCR 是否正常)",

)

args = parser.parse_args()

ocr = init_ocr()

font = load_font()

if args.source:

run_image(ocr, font, args.source)

else:

run_camera(ocr, font)

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,数据类型:string,取值范围:0~10000 --服务ID:Color

---属性名称:crtColor,数据类型:string,长度:10

---命令名称:setColor,数据类型:string,长度:10

4.2 设备实例化应用

4.2.1 温湿度计设备注册及模拟测试

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

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

5.1 应用项目创建

5.2 代码托管操作

5.3 构建任务设立

5.4 项目构建实现

5.5 项目部署运行

Logo

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

更多推荐