python
import cv2
import paddle
from paddleocr import PaddleOCR
# 1. 加载 PP-OCRv4 检测模型 + PP-OCRv5 识别模型
ocr = PaddleOCR(
use_gpu=True,
lang="ch",
# 用 v4 的检测模型
det_model_dir="./det_v4_inference",
# 用 v5 的识别模型
rec_model_dir="./rec_v5_inference",
# 统一预处理参数
det_db_thresh=0.3,
det_db_box_thresh=0.5,
rec_image_shape="3, 48, 320"
)
# 2. 读取图片并推理
img = cv2.imread("your_image.jpg")
result = ocr.ocr(img, cls=False)
# 3. 打印结果
for idx in range(len(result)):
res = result[idx]
for line in res:
print(f"文本框: {line[0]}, 识别结果: {line[1][0]}, 置信度: {line[1][1]}")
针对元器件场景,调整配置文件:
yaml
Global:
use_det: True
use_rec: True
Det:
det_db_thresh: 0.25 # 降低阈值,提升小目标检出率
det_db_box_thresh: 0.4 # 降低框过滤阈值,避免误删有效框
det_limit_side_len: 960 # 可根据图像分辨率调整,保证小字符足够清晰
一、基础标注格式硬规则
标注文件格式
最终生成的 Label.txt 每行格式必须为:
python
图片路径 [{"transcription": "文本内容", "points": [[x1,y1],[x2,y2],[x3,y3],[x4,y4]]}]
图片路径和 JSON 之间必须用 Tab 键(\t) 分隔,不能用空格
每个文本框用一个 {},多个框用逗号分隔,外层用 \[\] 包裹
文本框坐标要求
必须用四点标注(按键盘 Q 进入四点模式),顺序为顺时针 / 逆时针(左上→右上→右下→左下)
框要完整包围字符区域,并保留少量边缘空白,避免裁剪到字符边缘
倾斜 / 旋转字符必须画倾斜四边形框,不能画正矩形,否则矫正后会变形
文本内容规范
清晰可识别的字符:直接输入真实内容(如 A5、R102)
模糊 / 无法识别的区域:统一标注为 ###,模型会自动忽略
特殊符号(如 ●、○):如果要作为有效字符识别,需在自定义字典中添加,不能用空格或其他符号代替
二、电子元器件场景的专项要求
- 字符拆分与合并规则
单个元器件上的独立字符:每个字符 / 独立文本段单独画一个框,比如 A5 要标注为一个框(transcription: "A5"),不要拆成 A 和 5 两个框
连体 / 模糊字符:不要强行拆分,按整体标注,比如丝印连笔字符直接标为整体文本 - 背景与噪声处理
反光 / 油污 / 氧化导致的字符模糊:优先标记为 ###,不要猜测标注
元器件边缘、引脚等背景区域:不要误标注为文本框,避免模型学习噪声 - 标注质量控制
所有标注框必须紧贴字符边缘,避免框过大包含过多背景,或过小裁剪字符
倾斜 / 镜像字符:四点框必须与字符方向一致,保证后续矫正后字符是正立的。
三、常见错误与避坑
错误类型 错误示例 正确做法
用空格代替 Tab 分隔路径和 JSON img.jpg {"transcription": "A5", ...} img.jpg\t{"transcription": "A5", ...}
倾斜字符画正矩形框 用正矩形框住倾斜的 A5 用四点标注画倾斜四边形框
无法识别的区域不标记 留空或用自定义符号代替 直接写 ###
特殊字符不添加到字典 标注 ● 但未在 custom_dict.txt 中添加 在字典文件中单独添加 ● 并在配置中指定
四、标注后校验步骤
1.导出 Label.txt 后,用以下代码一键校验 JSON 格式:
python
import json
with open("Label.txt", "r", encoding="utf-8") as f:
for line in f:
img_path, label_str = line.strip().split("\t", 1)
json.loads(label_str) # 格式错误会直接报错
print("✅ 所有标注格式合法!")
随机抽取 10% 的图片,检查:
四点框是否完整包围字符
文本内容是否正确,无猜测标注
无法识别区域是否标记为 ###
四、全局快捷键(必须背熟,效率翻倍)
W:矩形框(正立、工整字符用)
Q:四点框(元器件倾斜 / 歪字符必用)
Backspace:删除选中框
D:下一张;A:上一张
Ctrl+R:对当前框重新识别
Ctrl+Shift+R:整张图重新识别
Ctrl + 鼠标左键:多选框
五、标准标注流程(元器件场景)
Step 1:自动预标注(先跑一遍,减少手动)
点界面 自动标注,等待跑完。
跑完后图片列表前面会变成 √/×,表示已处理 / 待处理。
Step 2:优先用四点标注(Q 键)------ 重中之重
元器件歪字 / 丝印 / 倾斜字符,必须用四点框!
按 Q 进入四点模式。
沿字符外轮廓顺时针点 4 个角:左上 → 右上 → 右下 → 左下。
双击左键结束当前框。
框要:包住全部字符 + 留 1~2 像素边距,不要太大、不要切字。
正立、很工整的字符才用 W 矩形框;歪字一律 Q 四点。
Step 3:修正识别内容(右侧文本框)
清晰字符:直接改对(如 R103、C47、A5)。
模糊 / 反光 / 看不清:标 ###(训练时会忽略)。
特殊符号(如 ●、○):如实输入,后续在字典里加上。
Step 4:逐图检查要点(每图必查)
所有丝印字符一个不漏,漏的用 Q 补框。
没有正矩形框去套歪字(必须四点倾斜框)。
每个框内容准确无误,不乱猜、不留空。
没有把背景 / 引脚 / 板边标成文本框。
Step 5:确认保存并下一张
检查无误 → 点右下角 确认(√) 保存。
自动跳到下一张;或按 D 手动下一张。
四、标注文件导出(最后一步)
全部标完后:菜单 → 文件 → 导出标注结果。
会生成:
Label.txt(核心,训练用)
train/val/test 拆分文件夹(可选)
校验 Label.txt 格式(必做)
每行:图片路径\t{"transcription":"xxx","points":\[\[x1,y1,...]})
分隔是 Tab(\t),不能是空格。
用我之前给你的小 Python 脚本跑一遍,确保无 JSON 错误。
五、电子元器件场景:硬性规定(不遵守必掉精度)
倾斜字符 → 四点倾斜框(Q),严禁矩形框。
一个独立丝印单元一个框(如 R102 一个框,不拆 R/1/0/2)。
模糊 / 反光 / 油污 → 统一 ###,不要猜字。
四点顺序必须顺时针,不要乱点,否则矫正后字会歪 / 变形。
不要框太大(带大量背景)、不要框太小(切笔画)。
python
python
python
python
python