用Tesseract OCR识别图片文字

用tesseract ocr识别图片中的文字 

  • 准备

 

OCR与Tesseract介绍

将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR 库,或者是在上面进行定制。   Tesseract 是一个OCR 库,目前由Google 赞助(Google 也是一家以OCR 和机器学习技术闻名于世的公司)。Tesseract 是目前公认最优秀、最精确的开源OCR 系统。   除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体(只要这些字体的风格保持不变就可以),也可以识别出任何Unicode 字符。

Tesseract的安装

Tesseract的Windows安装包下载地址为: http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe ,下载后双击直接安装即可。

配置环境变量

安装完后,需要将Tesseract添加到系统变量中。 不会配置环境变量可以看这个文章:配置环境变量

在cmd中输入tesseract -v, 如显示以下界面则表示Tesseract安装完成且添加到系统变量中


  • 开始使用

在cmd界面输入

其中第一个目录是要识别的图片路径,第二个目录是识别出的文字写入txt文件的目录,

发现报错:

Error opening data file /usr/local/share/tessdata/eng.traineddata

Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.

Failed loading language 'eng'

Tesseract couldn't load any languages!

解决方法:添加一个新的系统环境变量:

变量名:TESSDATA_PREFIX

变量值是你下载的tesseract文件包里tessdata的路径,如下图:

添加完环境变量之后,可能依然会出现同样的错误,可以重启电脑试一下

识别英文图片

这个问题解决了之后,就可以识别英文图片了

如下图

识别结果:

Hello everyone. I'm facing this above problem when my input image is the attached file. My os: 04 My input image: | in attached file(which is a .png file) My command: tesseract 0a2d.png out My output: "Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica Warning. Invalid resolution 0 dpi. Using 70 instead. Estimating resolution as 281 Empty page!! Estimating resolution as 281 Empty page!!" This engine is supposed to give the correct answer "Oa2d" I'm new to this ocr engine, so anyone can help me with this problem, many thanks:) You received this message because you are subscribed to the Google Groups "tesseract-ocr" group. To unsubscribe from this group and stop receiving emails from it, send an email to tesseract-ocrtunsubscr. . . @googlegroups. com. To post to this group, send email to tesseract-ocr@googlegroups.com.

效果还是不不错的

接下来识别中文

需要下载中文包(可以先看一下你的tessdata文件里有没有chi_sim.traineddata文件,这是一个中文包)如果有的话就跳过这一步;如果没有,点下面的链接下载https://github.com/tesseract-ocr/tessdata/find/master/chi_sim.traineddata 下载之后,把它放到tessdata文件里面,就可以识别中文了,在终端输入指令时要加一个命令,如下图

注意:

红圈圈住的地方这个不是一根竖线,是language的第一个字母‘l’

试一下效果:如图

识别结果:

 回 All Notes ˇ | 10/26/18 09:06 ,4379 中 国 共 产 党 建 党 以 来 革 命 、 建 设 、 改 革 的 历 史 证 明 , 我 们 党 善 于 审 时 度 势 , 善 于 发 现 和 抓 住 机 遥 , 善 打 游 击 战 、 持 久 战 、 攻 坚 战 , 善 于 化 危 为 机 , 化 被 动 为 主 动 。 面 对 贸 易 战 , 不 能 临 战 而 怯 , 自 乱 阵 脚 , 争 取 胜 利 的 重 要 前 提 是 保 持 战 略 定 力 , 万 众 一 心 , 群 策 群 力 。 在 未 来 的 现 代 化 进 程 中 , 中 国 将 通 过 全 面 深 化 改 革 不 断 加 长 体 制 短 板 , 通 过 发 挥 市 场 决 定 性 作 用 , 更 好 发 挥 政 府 作 用 , 高 效 率 配 置 资 源 , 实 现 高 质 量 发 展 。 中 美 贸 易 战 为 什 么 必 须 打 或 者 说 , 这 场 贸 易 战 能 不 能 避 免 ? 结 论 是 : 不

可以说已经很准确了。


参考文献

https://blog.csdn.net/jclian91/article/details/80628188

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
1. 安装Tesseract OCR 首先需要安装Tesseract OCRTesseract OCR是一个开源的OCR引擎,能够对图片进行文字识别。 在Linux系统下,可以通过以下命令进行安装: ``` sudo apt-get install tesseract-ocr ``` 在Windows系统下,可以从官网(https://github.com/UB-Mannheim/tesseract/wiki)下载安装程序进行安装。 2. 创建Node.js项目 创建一个新的Node.js项目,并在项目中安装以下依赖: ``` npm install express multer tesseract.js ``` 其中,express是一个Node.js的Web框架;multer是一个Node.js的中间件,用于处理文件上传;tesseract.js是一个Node.js的Tesseract OCR库。 3. 创建文件上传接口 在项目中创建一个文件上传接口,用于接收用户上传的图片。 ``` const express = require('express'); const multer = require('multer'); const app = express(); app.use(express.static('public')); const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'public/uploads/') }, filename: function (req, file, cb) { cb(null, file.originalname) } }) const upload = multer({ storage: storage }) app.post('/upload', upload.single('file'), (req, res) => { res.send('File uploaded successfully'); }); app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 在上述代码中,通过multer中间件设置文件上传的存储路径,并通过upload.single('file')指定上传的文件参数名为file。最后,在文件上传成功后,返回一个成功信息。 4. 实现图片文字识别功能 在文件上传成功后,通过Tesseract OCR对上传的图片进行文字识别,并将识别结果返回给用户。 ``` const Tesseract = require('tesseract.js'); app.post('/upload', upload.single('file'), (req, res) => { Tesseract.recognize(req.file.path) .then(result => { res.send(result.text); }) .catch(err => { res.send(err); }); }); ``` 在上述代码中,通过Tesseract.recognize()方法对上传的图片进行文字识别,并将识别结果返回给用户。 完整代码如下: ``` const express = require('express'); const multer = require('multer'); const Tesseract = require('tesseract.js'); const app = express(); app.use(express.static('public')); const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'public/uploads/') }, filename: function (req, file, cb) { cb(null, file.originalname) } }) const upload = multer({ storage: storage }) app.post('/upload', upload.single('file'), (req, res) => { Tesseract.recognize(req.file.path) .then(result => { res.send(result.text); }) .catch(err => { res.send(err); }); }); app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 启动应用程序,并访问http://localhost:3000,在网页中上传一张包含文字图片,即可看到识别结果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值