英文手写 OCR 怎么做?用 TrOCR 识别单行文字并逐字回查

用 TrOCR 专用类识别英文单行手写图,保存候选文本并逐字回查,明确整页和中文不适用。

TrOCR 的 handwritten 权重适合试验单行手写文字识别。这里限定英文单行输入,把识别候选与人工转录逐字比较;整页手写笔记、中文便签或复杂表格不应直接套用这个示例。

先裁出完整的一行英文

准备自有 handwritten_line.png:一行文字、正常阅读方向、字符没有被裁断,留少量边缘。自己先抄写一份人工答案。例如手写“Meet at ten.”可以作为自制测试内容,但这不是模型已识别出的输出。

英文手写 OCR 怎么做?用 TrOCR 识别单行文字并逐字回查

python -m pip install torch "transformers==4.57.1" pillow

示例走 Python 3.11 和 CPU。模型卡说明权重在 IAM 数据上微调,可用于 single text-line images。首次运行需要下载权重;本文未运行该模型识别,不提供未发生的成功案例。

用图像编码器与文本解码器运行

保存为 handwritten_ocr.py,运行 python handwritten_ocr.py。

from PIL import Image
import torch
from transformers import TrOCRProcessor, VisionEncoderDecoderModel

name = "microsoft/trocr-base-handwritten"
processor = TrOCRProcessor.from_pretrained(name)
model = VisionEncoderDecoderModel.from_pretrained(name).eval()
image = Image.open("handwritten_line.png").convert("RGB")
pixels = processor(images=image, return_tensors="pt").pixel_values
with torch.inference_mode():
    ids = model.generate(pixels, max_new_tokens=64)
text = processor.batch_decode(ids, skip_special_tokens=True)[0]
print(text)
with open("handwritten_line.txt", "w", encoding="utf-8") as f:
    f.write(text)

使用 TrOCRProcessor 与 VisionEncoderDecoderModel,避免依赖新版 Transformers 已发生变化的通用 image-to-text pipeline。代码明确限定 4.57.1,升级依赖前重新核对专用接口。

逐字回查,不让模型补写内容

把 handwritten_line.txt 与人工答案并排核对,标记替换、遗漏和多出的字符。尤其看单词间隔、大小写、数字与字母混淆,不能只凭句子“读起来通顺”认为准确。

一行过长且达到生成长度上限时可能截断;先检查输出尾部,再酌情提高 max_new_tokens 或按合法行边界裁图。不要在不知道原文的情况下让语言模型补完整句当成转录。

什么时候换路线

  • 多行页面:先做版面分析和按行裁切,保留阅读顺序及来源坐标。
  • 中文、特殊符号或陌生专业缩写:选择有对应任务和数据依据的权重,先做标注样本验证。
  • 关键编号、姓名或金额:即使正文可读,也逐项与原图复核。

手写识别的文本候选不能替代原图保存;模型改动时保留同一组带人工答案的行图做对照。

资料与适用范围

本文依据 2026 年 10 月 1 日读取的项目资料编写。安装后请记录实际依赖版本;版本升级时先用小样本核对接口和输出。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30740.html

赞 (0)
AI小管家的头像AI小管家
训练语料怎么扩充?用受控文本变体保留标签与原文关系
上一篇 4小时前
KMeans 和 DBSCAN 怎么选?对比离群点处理、簇数与新样本预测
下一篇 4小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部