本模型为基于 CRNN(卷积循环神经网络)的 OCR 文本识别模型,使用 ResNet 作为特征提取器,结合双向 LSTM 序列建模和 CTC 解码,能够识别图像中的文本内容并输出字符序列。
| 项目 | 说明 |
|---|---|
| 输入格式 | 灰度图像文件(支持 JPG、PNG 等常见格式) |
| 输入尺寸 | 高度缩放至 64 像素,宽度按比例缩放 |
| 输出格式 | JSON 文件,包含识别到的文本内容和置信度 |
| 字符集 | 英文大小写字母、数字、标点符号(96 类) |
本模型已适配华为昇腾 Ascend NPU,支持在 CPU 和 NPU 两种设备上运行推理。NPU 适配要点:
torch_npu 将模型权重加载到昇腾 NPU 设备torch.npu.synchronize() 确保正确的性能测量# 安装基础依赖
pip install torch torchvision opencv-python-headless numpy
# 安装昇腾 NPU 支持(根据 CANN 版本选择)
# pip install torch_npupython inference.py --image test_text.png --device cpupython inference.py --image test_text.png --device npu --model-path crnn_initial_weights.pthpython compare_cpu_npu.py下图为运行截图:

| 指标 | 值 |
|---|---|
| 识别文本 | 'r' |
| 平均推理时间(10 次) | 299.12 ms |
| 运行设备 | CPU |
| 指标 | 值 |
|---|---|
| 识别文本 | 'r' |
| 平均推理时间(10 次) | 12.85 ms |
| 运行设备 | Ascend 910B |
| 指标 | CPU | NPU | 加速比 |
|---|---|---|---|
| 平均推理时间 | 299.12 ms | 12.85 ms | 23.28x |
| 识别结果 | 'r' | 'r' | 完全一致 |
| 指标 | 数值 |
|---|---|
| 输出张量形状 | [1, 101, 96] |
| 最大绝对差异 | 1.27e-7 |
| 平均绝对差异 | 1.84e-8 |
| 最大概率差异(Softmax 后) | 2.80e-9 |
| 平均概率差异(Softmax 后) | 4.00e-10 |
| 余弦相似度 | 0.99999982 |
| 平均相对误差 | 0.00037% |
| 指标 | 数值 |
|---|---|
| CPU 识别文本 | 'r' |
| NPU 识别文本 | 'r' |
| 文本完全匹配 | 是 |
NPU 与 CPU 推理结果误差为 0.00037%,远低于 1% 的要求,符合精度标准。
NPU 与 CPU 推理结果误差 < 1%。
import torch
import torch.nn.functional as F
import torch_npu
# 加载模型
device = torch.device('npu:0')
model = CRNN(num_class=96, input_channel=1)
state = torch.load('crnn_initial_weights.pth', map_location='cpu')
model.load_state_dict(state)
model = model.to(device)
model.eval()
# 预处理图像
# ...(灰度化、缩放至 64 高度、归一化)
# 推理
with torch.no_grad():
output = model(input_tensor) # [1, T, num_class]
# CTC 贪婪解码
probs = F.softmax(output, dim=-1)
preds = probs.argmax(dim=-1).squeeze(0)
# 去重、去空白
text = decode_ctc(output)
print(f'Recognized: {text}')本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。
#+NPU #+OCR #+文本识别 #+CRNN #+昇腾 #+CV #+PyTorch
| 文件 | 说明 |
|---|---|
| inference.py | 推理脚本,支持 CPU 和 NPU |
| compare_cpu_npu.py | CPU/NPU 精度对比脚本 |
| requirements.txt | 依赖清单 |
| README.md | 本文档 |
| crnn_initial_weights.pth | CRNN 模型初始化权重 |
| test_text.png | 测试图像 |
| recognition_results_cpu.json | CPU 推理结果 |
| recognition_results_npu.json | NPU 推理结果 |
| compare_results.json | 精度对比结果 |
| terminal_screenshot.png | 终端运行截图 |