跳到主要内容
PulsarKit

图片转文字

从照片、截图或扫描件里识别印刷文字,下载为.txt文件,或下载带每个文本块位置和置信度的JSON。

把文件拖到这里

.jpg, .jpeg, .png, .webp, .bmp, .gif, .avif · 最大100 MB

更多设置

如何提取文字

  1. 1

    添加图片

    支持JPG、PNG、WebP、BMP、GIF或AVIF,最多20个文件。格式从文件内容本身读取,所以扩展名写错了,也会交给正确的解码器。

  2. 2

    选择文字的语言

    大多数扫描件选一种语言就够了;页面确实混用多种语言时,再加第二种或第三种。每多一种语言,就要多下载一份数据,准确率也会略降。

  3. 3

    点击“提取”,下载.txt

    你会得到识别出的文字、字符数和平均置信度。需要坐标时,把输出切换为JSON。

浏览器里的文字识别能读什么,不能读什么

这里用的是Tesseract,也就是大多数开源文字识别(OCR)背后的引擎,它被编译成WebAssembly,在你的标签页里运行。它擅长印刷文字:书页、截图、发票、招牌、表单,以及任何用普通字体、字号适中的内容。它不擅长手写、高度花哨的艺术字、叠在复杂照片上的文字,以及斜着拍的内容。分辨率比文件大小更重要:一段文字清晰的1500像素宽截图,比在房间另一头用手机拍的同一段文字的千万像素照片更好识别。如果平均置信度低于30,工具会直接告诉你没有找到可读的内容,而不是给你一页看似合理的乱码。

预处理开关,什么时候有用

打开预处理后,图片先转为灰度,再用大津法(Otsu)二值化。这种方法根据图片自身的直方图选出黑白分界值,而不是用一个固定数字。对光线不均的翻拍页面、字迹很淡的小票和发灰的扫描件,效果提升很大,因为它去掉了识别器原本会试图解读的阴影。但对本来就很干净的文字、深色背景浅色文字的截图,以及彩色背景上的彩色文字,它反而有害:硬性二值化可能把字母整个抹掉。先不开预处理试一次,结果不满意时再打开。

纯文字,还是带坐标的文字

默认输出是纯.txt文件,换行和引擎看到的一致。选择JSON时,得到的是一个文本块数组,每个块包含识别出的文字、置信度,以及用四个数字表示的边界框:x、y、宽度和高度,单位是实际参与识别的那张图片的像素。想把结果高亮回原图、从表单里取出某个字段,或者查看是页面哪部分拉低了平均置信度时,要的就是这个。

图片和文字都不会上传

识别引擎和语言数据只下载一次,之后由浏览器缓存,后面的一切都在本地运行:图片在标签页里解码、在标签页里识别,文本文件也在标签页里生成。内容的任何部分都不会发送出去。当你要识别的是合同、工资单或身份证件时,这一点很重要。

常见问题

支持哪些语言?

英语、俄语、德语、法语、西班牙语、简体中文、阿拉伯语和日语。页面确实混用多种语言时,最多可以同时选三种,不过选对一种语言几乎总是比选两种更准确。

图片会发送到服务器吗?

不会。文字识别引擎是在你浏览器里运行的WebAssembly。唯一的网络流量,是一次性下载引擎和你所选语言的数据;图片和识别出的文字都留在你的设备上。

为什么第一次运行慢那么多?

因为第一次运行要下载约3 MB的引擎,再加上所选语言的数据,按语言不同在0.7到3 MB之间。浏览器会缓存这两者,所以第二次运行会立刻开始识别。

能识别手写字吗?

不可靠。这里的模型是用印刷字体训练的,手写内容要么识别错,要么低于置信度门槛。写得非常工整的大写印刷体有时可以;普通的连笔字不行。任何手写识别结果都只能当作需要核对的草稿,不能当作准确的转录。

没有识别出文字怎么办?

先打开预处理选项再试一次,大多数光线不均的情况都能解决。如果还是不行,通常是分辨率的问题:重新扫描或重新拍照,让字母至少有二十像素高。把图片裁剪到只剩文字,并选对语言,效果也比很多人想的要好。

分辨率要多高才能识别好?

让文字高约20到40像素,对普通文档扫描来说大约是300 DPI。低于这个值,字母开始粘连,准确率急剧下降。高于这个值,主要是多花时间:图片宽10000像素并不会更好识别,而且任何一边超过12000像素的图片,在识别前都会先缩小。

能得到每个词的位置吗?

能得到每个文本块的位置,这是引擎报告的单位:包括它的文字、置信度和以像素表示的边界框。把输出从纯文字改为JSON,下载的就是这个数组,而不是纯文本文件。

手机上能用吗?

能,但有两点要注意。第一次运行要通过你当前的网络下载好几MB的数据;手机上识别所需时间大约是笔记本电脑的三倍,所以一整页扫描件可能要半分钟。一切仍然在本地运行。

相关工具