Tesseract:从命令行到网页 OCR 图文识别实践
一、Tesseract 是什么
Tesseract 是谷歌开源的 OCR(光学字符识别,Optical Character Recognition)引擎,由 HP 实验室最初研发、后由 Google 维护。它能把图片中的文字识别为可编辑的文本,支持 100 多种语言,包括简体中文和英文。它能识别常见的 JPG、PNG、WEBP 等格式图片,是目前应用最广的免费开源 OCR 方案之一。
本文通过 myblog 项目里的一个「图文识别」小工具,讲解它是如何把 Tesseract 的命令行能力封装成一整套 网页端识别流程 的。

二、识别是如何工作的
Tesseract 本身是一个命令行程序,本项目通过 Node.js 的 child_process.execFile 调用它:
execFile(
'tesseract',
[image, 'stdout', '-l', 'chi_sim+eng', '--psm', '6', 'tsv'],
{ maxBuffer: 1024 * 1024 * 50 },
...
)参数解读:
image:待识别的图片路径stdout:直接输出到标准输出,而不是写入文件-l chi_sim+eng:同时加载简体中文 + 英文两种语言包--psm 6:把整张图当作一个统一的文本块处理,适用于大多数文档截图tsv:输出 TSV 格式的详细结果 - 每个被识别的「词」都会带坐标、宽高和置信度
返回的 TSV 再用 csv-parser 解析成结构化数据,每条记录包含:
text 识别的文字
x / y 词在图片中的左上角坐标
width/height 宽高
conf 置信度(只有 conf >= 0 的词才会被收录)有了这些坐标数据,前端才能真正实现「识别框叠加在图片上」的联动效果。
三、安装与使用
1. 安装 Tesseract
本项目是通过系统命令调用 Tesseract,所以 服务器上必须先安装它及其语言包 :
- macOS :
brew install tesseract tesseract-lang - Ubuntu/Debian :
apt-get install tesseract-ocr tesseract-ocr-chi-sim - Windows :下载发行版安装并加入 PATH
确认安装成功: tesseract --version 。
2. 页面使用流程
页面上分为三步卡片式布局( 1. 图片输入 → 2. 图片预览 → 3. 识别结果 ):
- 选择识别模式 :通用文本 / 表格识别
- 输入图片 :本地上传,或粘贴图片链接
- 点击「开始识别」 ,稍候即可查看:
- 图片预览 区会展示原图,并在识别出的文字处叠加 红色识别框 ;鼠标悬停某段文字时,对应的识别框会高亮为蓝色。
- 识别结果 区按段落展示文字,每段带序号, 点击即可复制该段 ,还支持「复制全部」「下载 TXT」。
- 表格模式则输出表格并支持「复制 Markdown」「下载 CSV」。
3. 前端调用后端
前后端通过接口 /api/v1/tesseract 通信。controller 在 tesseract.js 里根据 mode 参数分发:
const data = await (mode === 'table'
? this.ctx.service.tesseract.table(filepath)
: this.ctx.service.tesseract.index(filepath));mode = text→ 通用文本识别mode = table→ 表格识别
最终返回 { code, data, success, mode } ,前端拿到 data 渲染结果。
四、识别表格的原理
表格识别复用了相同的基础识别,但额外对「词」的坐标做了 启发式聚类 ,把文字重新拼回行列网格:
- 按 x 坐标聚合成列 :位置相近的词归到同一列。
- 按 y 坐标聚合成行 :纵向距离相近的词归到同一行。
- 为每个词定位行列 :填入对应的格子。
- 每个格子内的词按 x 排序拼接成单元格文本(中英混合拼接时有针对性的空格处理)。
- 输出:
cells:二维数组网格markdown:拼好的 Markdown 表格(自动在第二行加---分隔线)rows / cols:行列数
这种方案 无需安装额外的表格识别模型 ,特别适合 有清晰边框、排版规整 的表格图片。
五、文本分段的细节
通用文本识别后,还做了一层「从词 → 行 → 段落」的归并:
- 词合并成行 :
mergeLines按 y 坐标把同一水平线上的词归为一行,并按 x 排序拼接文字。 - 行合并成段落 :
mergeParagraphs根据行间垂直间距和左对齐程度,判断哪些连续的行属于同一个段落,间隔过大或缩进明显变化时另起一段。 - 中英拼接空格规则 :两个相邻单词都是字母/数字时自动加空格,中文则不加,避免「中文和英文粘连」。
每个段落都带 bbox (边界框)坐标,这正是前端画识别框的数据来源。
六、注意事项
- 依赖前置安装 :本项目靠系统
tesseract命令工作,部署时必须保证命令和 简体中文语言包chi_sim可用,否则中文识别会失败。 - 图片质量很关键 :清晰、对比度高、文字行尽量水平的图片效果最好;模糊、倾斜、光照不均会明显降低识别率。
--psm 6的适用场景 :适合整块文本;如果图片是单行文字、多页文档或带复杂结构,可能需要换用其他 PSM 模式。- 表格要求 :启发式聚类依赖坐标, 适合规整、有边框 的表格;复杂合并单元格、无边框、歪斜的表格效果会打折扣。
- 低置信度过滤 :
conf >= 0的阈值会滤掉识别置信度过低的残句,减少噪声但对低质量图片可能丢字。 - 大文件限制 :命令设置了
maxBuffer(50MB),超大或超长图片要注意内存占用与超时。 - 性能 :识别是同步阻塞进程,图片较大时耗时较长,页面也提供了「识别中…」的加载提示与按钮禁用。
七、小结
Tesseract 的单机文字识别能力 + 坐标级结构化输出,配合简单的坐标聚类,就组合出了一套「通用文本 + 表格」的完整 OCR 工具。坐标信息让它不只是返回文字,还能在前端与原图做 可视化联动比对 ,这比单纯给出一段文本要实用得多。
在线测试地址: https://www.wenjiangs.com/tool/tesseract






