SimpleHTR
SimpleHTR 是一个基于 TensorFlow 构建的开源手写文本识别(HTR)系统,旨在将包含手写单词或整行文本的图片自动转换为可编辑的数字文本。它有效解决了传统 OCR 工具在处理非标准、连笔或个性化手写内容时识别率低的问题,特别适用于需要从手写笔记、历史文档或表单中提取信息的场景。
该工具非常适合开发者、人工智能研究人员以及需要定制手写识别功能的技术团队使用。用户可以直接利用预训练模型进行推理,也能基于 IAM 数据集重新训练模型以适应特定需求。SimpleHTR 的核心亮点在于其灵活的解码策略:除了支持基础的 CTC 解码外,还集成了独特的“词束搜索(Word Beam Search)”算法。该算法结合词典约束,能显著降低拼写错误,即使在处理复杂语境时也能比常规解码器更准确地还原原文。此外,系统不仅支持单个单词识别,还能处理包含多个单词的整行文本,并提供了清晰的命令行接口和 Web 演示,方便用户快速上手验证效果。
使用场景
某档案馆数字化团队正致力于将大量 20 世纪的手写会议记录转化为可检索的电子文本,以便历史学家进行关键词研究。
没有 SimpleHTR 时
- 人工转录效率极低:工作人员需逐字手动输入手写内容,处理一页文档平均耗时数小时,项目周期被无限拉长。
- 通用 OCR 识别失败:传统印刷体识别工具无法适应潦草的手写笔迹,输出结果充满乱码,几乎不可用。
- 缺乏行级上下文理解:现有的简单模型只能识别单个单词,无法处理连贯的句子,导致语义断裂,后期校对成本极高。
- 部署门槛高:自行训练深度学习模型需要深厚的 TensorFlow expertise 和大量标注数据,团队难以在短时间内构建可用系统。
使用 SimpleHTR 后
- 自动化批量识别:利用预训练模型直接对整行手写图像进行推理,几分钟内即可完成过去数小时的人工工作量,效率提升百倍。
- 高精度手写适配:SimpleHTR 专为 IAM 手写数据集训练,能准确识别连笔和特殊字迹,字符错误率控制在 10% 左右,大幅减少人工修正。
- 智能行级解码:通过集成"Word Beam Search"解码器,模型能结合词典约束识别整句内容,有效纠正形近词错误,保证语句通顺。
- 开箱即用的灵活性:团队无需从头训练,只需下载预训练权重并运行简单的 Python 命令(如
python main.py --img_file),即可在本地快速部署验证。
SimpleHTR 通过将复杂的深度学习手写识别能力封装为易用的命令行工具,让非 AI 专家团队也能低成本实现高质量的历史文档数字化。
运行环境要求
- 未说明
- Windows (明确提及支持 Word Beam Search 解码器)
- 非必需,但推荐使用
- 文中提及在 GTX 1050 Ti 上训练耗时约 3 小时,表明低端 NVIDIA GPU 即可运行
- 未指定具体显存大小或 CUDA 版本要求
未说明

快速开始
使用 TensorFlow 进行手写文本识别
- 更新 2023/2:已提供一个 网页演示
- 更新 2023/1:请参阅 HTRPipeline,这是一个用于读取整页文本的工具包
- 更新 2021/2:支持行级文本识别(多个单词)
- 更新 2021/1:模型更加稳健,数据加载器速度更快,词束搜索解码器现在也适用于 Windows 系统
- 更新 2020:代码兼容 TF2
使用 TensorFlow (TF) 实现的手写文本识别 (HTR) 系统,并在 IAM 离线 HTR 数据集上进行训练。该模型以单个单词或文本行(多个单词)的图像作为输入,并输出识别后的文本。 验证集中的 3/4 的单词被正确识别,字符错误率约为 10%。

运行演示
- 下载其中一个预训练模型
- 基于单词图像训练的模型: 每张图像仅处理单个单词,但在 IAM 单词数据集上效果更好
- 基于文本行图像训练的模型: 可以处理一张图像中的多个单词
- 将下载的压缩包内容解压到仓库的
model目录中 - 进入
src目录 - 运行推理代码:
- 执行
python main.py来对单个单词的图像进行推理 - 执行
python main.py --img_file .https://oss.gittoolsai.com/images/githubharald_SimpleHTR_readme_f8c4e3545ac5.png来对文本行的图像进行推理
- 执行
以下展示了使用文本行模型时的输入图像及预期输出。

> python main.py
使用 ../model/snapshot-13 中存储的值初始化
识别结果: "word"
置信度: 0.9806370139122009

> python main.py --img_file .https://oss.gittoolsai.com/images/githubharald_SimpleHTR_readme_f8c4e3545ac5.png
使用 ../model/snapshot-13 中存储的值初始化
识别结果: "or work on line level"
置信度: 0.6674373149871826
命令行参数
--mode: 选择“train”(训练)、“validate”(验证)或“infer”(推理)。默认为“infer”。--decoder: 选择 CTC 解码器“bestpath”、“beamsearch”和“wordbeamsearch”。默认为“bestpath”。关于“wordbeamsearch”选项,请参见下文详细说明。--batch_size: 批量大小。--data_dir: 包含 IAM 数据集的目录(包含子目录img和gt)。--fast: 使用 LMDB 加速图像加载。--line_mode: 训练文本行识别而非单个单词。--img_file: 用于推理的图像。--dump: 将神经网络的输出转储到dump文件夹中保存的 CSV 文件中。这些文件可用作 CTCDecoder 的输入。
集成词束搜索解码器
词束搜索解码器可以替代 TF 自带的两种解码器使用。 单词会被限制在字典中包含的词汇范围内,但仍然可以识别任意非单词字符序列(如数字、标点符号)。 下图展示了一个示例,在这个例子中,词束搜索能够正确识别文本,而其他解码器则失败。

按照以下步骤集成词束搜索解码器:
- 克隆 CTCWordBeamSearch 仓库
- 在 CTCWordBeamSearch 仓库的根目录下运行
pip install .进行编译和安装 - 在执行
main.py时指定命令行选项--decoder wordbeamsearch,即可实际使用该解码器
字典会在训练和验证模式下自动创建,使用 IAM 数据集中包含的所有单词(包括验证集中的单词),并保存到文件 data/corpus.txt 中。此外,手动创建的单词字符列表可在文件 model/wordCharList.txt 中找到。束宽设置为 50,以与原生束搜索解码器的束宽保持一致。
在 IAM 数据集上训练模型
准备数据集
按照以下步骤获取 IAM 数据集:
- 在此 网站 上免费注册
- 下载
words/words.tgz - 下载
ascii/words.txt - 在您的磁盘上创建一个数据集目录,并创建两个子目录:
img和gt - 将
words.txt放入gt目录 - 将
words.tgz中的内容(目录a01,a02, 等)放入img目录
运行训练
- 如果您想从头开始训练,请删除
model目录中的文件 - 进入
src目录,执行python main.py --mode train --data_dir path/to/IAM - IAM 数据集被划分为 95% 的训练数据和 5% 的验证数据
- 如果指定了
--line_mode选项, 模型将基于将多个单词图像组合成一张图像的文本行图像进行训练 - 当经过固定数量的轮次后仍无改进时,训练将停止
预训练的单词模型是在 GTX 1050 Ti 显卡上使用以下命令训练的:
python main.py --mode train --fast --data_dir path/to/iam --batch_size 500 --early_stopping 15
而文本行模型则是使用以下命令训练的:
python main.py --mode train --fast --data_dir path/to/iam --batch_size 250 --early_stopping 10
快速图像加载
即使只使用小型 GPU,从磁盘加载和解码 PNG 图像文件仍然是瓶颈。为了加速图像加载,使用了 LMDB 数据库:
- 这里进入
src目录,运行create_lmdb.py --data_dir path/to/iam,指定 IAM 数据集目录 - 在 IAM 数据集目录中会创建一个名为
lmdb的子文件夹,其中包含 LMDB 文件 - 在训练模型时,添加命令行选项
--fast
数据集应位于 SSD 驱动器上。使用 --fast 选项并在 GTX 1050 Ti 上以 500 的批量大小训练单个单词大约需要 3 小时。而训练文本行则需要更长的时间。
模型相关信息
该模型是我为 我的论文 实现的 HTR 系统的精简版本。它保留了以可接受的准确率识别文本所需的最低限度功能。模型由 5 层 CNN、2 层 RNN(LSTM)以及 CTC 损失和解码层组成。更多细节请参阅这篇 Medium 文章。
参考文献
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器