1 工效组合展示

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

2.1 工具软件安装

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

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

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

3.1 IMA-DS借力

给出PYTHON虚拟环境OCR文字识别的编码及其运行过程,包括汉字,WINDOws环境,非 COnDA, 使用本机连接的网络摄像机,并且使用的是cpu

3.2 运行环境构造

     cd camera_ocr

:: 1. 创建虚拟环境

       python -m venv venv

:: 2. 激活(Windows 用 Scripts 目录)

       venv\Scripts\activate

:: 3. 安装依赖(国内可加镜像加速)

       python -m pip install --upgrade pip -i https://mirror.baidu.com/pypi/simple

       pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

:: 4. 运行实时识别

        python main.py

3.3 编码实现

main主函数

# -*- coding: utf-8 -*-

"""

实时网络摄像机 OCR(中文)识别主程序。

流程:读取视频流 -> 按间隔抽帧 -> PaddleOCR 识别 -> 画框显示 -> 打印到终端。

按键:

# -*- coding: utf-8 -*-
"""
实时网络摄像机 OCR(中文)识别主程序。

流程:读取视频流 -> 按间隔抽帧 -> PaddleOCR 识别 -> 画框显示 -> 打印到终端。

按键:
    q 或 ESC   退出
    s          保存当前帧的标注图 + 识别文本
"""

import os
import time

import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont

import config
from camera import CameraStream
from ocr_engine import OCREngine

_CN_FONT = None
_CN_FONT_LOADED = False


def get_cn_font(size=18):
    global _CN_FONT, _CN_FONT_LOADED
    if _CN_FONT_LOADED:
        return _CN_FONT
    _CN_FONT_LOADED = True
    for path in (
        "C:/Windows/Fonts/msyh.ttc",
        "C:/Windows/Fonts/simhei.ttf",
        "C:/Windows/Fonts/simsun.ttc",
    ):
        if os.path.exists(path):
            try:
                _CN_FONT = ImageFont.truetype(path, size)
                return _CN_FONT
            except Exception:
                pass
    _CN_FONT = ImageFont.load_default()
    return _CN_FONT


def draw_results(frame, items):
    for it in items:
        if it["box"]:
            pts = np.array([[int(x), int(y)] for x, y in it["box"]], dtype=np.int32)
            cv2.polylines(frame, [pts], True, (0, 255, 0), 2)

    if not items:
        return frame

    rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    pil = Image.fromarray(rgb)
    draw = ImageDraw.Draw(pil)
    font = get_cn_font(18)

    for it in items:
        if it["box"]:
            x, y = int(it["box"][0][0]), int(it["box"][0][1])
        else:
            x, y = 10, 10
        label = f"{it['text']} {it['score']:.2f}"
        bbox = draw.textbbox((x, y - 22), label, font=font)
        draw.rectangle(bbox, fill=(0, 0, 0))
        draw.text((x, y - 22), label, fill=(0, 255, 0), font=font)

    return cv2.cvtColor(np.asarray(pil), cv2.COLOR_RGB2BGR)


def save_result(frame, items, output_dir, prefix="capture"):
    os.makedirs(output_dir, exist_ok=True)
    ts = time.strftime("%Y%m%d_%H%M%S")
    img_path = os.path.join(output_dir, f"{prefix}_{ts}.jpg")
    txt_path = os.path.join(output_dir, f"{prefix}_{ts}.txt")
    cv2.imwrite(img_path, frame)
    with open(txt_path, "w", encoding="utf-8") as f:
        for it in items:
            f.write(f"{it['text']}\t{it['score']:.4f}\n")
    print(f"[保存] {img_path}")
    return img_path


def main():
    print("=" * 50)
    print("网络摄像机 OCR 识别(PaddleOCR 中文 / CPU)")
    print("=" * 50)

    cam = CameraStream(config.CAMERA_URL, use_tcp=config.CAMERA_USE_TCP)
    if not cam.open():
        print("[错误] 无法连接摄像机,请检查 config.py 里的 CAMERA_URL、网络与账号密码。")
        return

    print("[OCR] 正在加载模型,首次运行会自动下载(约 10~300MB),请稍候...")
    ocr = OCREngine(lang=config.OCR_LANG, use_gpu=config.OCR_USE_GPU).load()
    print("[OCR] 模型加载完成。")

    cv2.namedWindow("Camera OCR", cv2.WINDOW_NORMAL)

    frame_idx = 0
    last_items = []
    while True:
        frame = cam.read()
        if frame is None:
            print("[摄像头] 读取失败,尝试重连...")
            if not cam.reconnect():
                print("[错误] 重连失败,退出。")
                break
            continue

        frame_idx += 1
        if frame_idx % config.OCR_EVERY_N_FRAMES == 1:
            t0 = time.time()
            last_items = ocr.recognize(frame)
            cost = time.time() - t0
            if last_items:
                print(f"[OCR] 第 {frame_idx} 帧,识别 {len(last_items)} 条,耗时 {cost:.2f}s")
                for it in last_items:
                    print(f"    识别: {it['text']}  (置信度 {it['score']:.2f})")

        if config.DRAW_BOX:
            frame = draw_results(frame, last_items)

        cv2.imshow("Camera OCR", frame)
        key = cv2.waitKey(1) & 0xFF
        if key in (ord("q"), 27):
            break
        elif key == ord("s"):
            save_result(frame, last_items, config.OUTPUT_DIR)

    cam.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

- 数据类型:decima

- 访问权限:可读可写

- 取值范围:-100-100

- 属性名称:humidity

- 数据类型:decimal

- 访问权限:可读可写

- 取值范围:0-10

4.1.2 吸顶灯

产品信息:

 -- 产品名称:智能吸顶灯

-- 协议类型:MQTT

-- 数据格式:JSON

-- 所属行业:智能家居

-- 所属子行业:智能家居

服务列表:Light

  属性名称:光照强度

     数据类型:decimal

     访问权限:可读可写

     取值范围:0-5000

  属性名称:功率

     数据类型:decimal

     访问权限:可读可写

     取值范围:0-10000

  命令名称:Light

    下发参数名称:turn

       数据类型:string

       长度:10

下发参数名称:power

       数据类型:string

       取值范围:0-10000

服务ID:Color

  属性名称:当前颜色

    数据类型:string

    长度:10

  命令名称:设置颜色

    下发参数名称:color

       数据类型:string

       长度:10

    

4.2 设备实例化应用

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

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

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

5.1 应用项目创建

5.2 代码托管操作

5.3 构建任务设立

5.4 项目构建实现

5.5 项目部署运行

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐