TrOCR 的 handwritten 权重适合试验单行手写文字识别。这里限定英文单行输入,把识别候选与人工转录逐字比较;整页手写笔记、中文便签或复杂表格不应直接套用这个示例。
先裁出完整的一行英文
准备自有 handwritten_line.png:一行文字、正常阅读方向、字符没有被裁断,留少量边缘。自己先抄写一份人工答案。例如手写“Meet at ten.”可以作为自制测试内容,但这不是模型已识别出的输出。

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