阅读提示

本文将提到Tesseract-OCR的简介、配置使用并附带超实用案例,包括pdf文字识别、图形验证码提取等。

目录

  • 阅读提示
  • 一、工具介绍
  • 二、配置环境变量
    • 2.1 进入环境变量配置界面
    • 2.2 添加系统变量
    • 2.3 添加 tessdata 系统变量
  • 三、使用 Tesseract-OCR
    • 3.1 进入cmd 输入下面的命令查看版本,正常运行则安装成功:
    • 3.2 使用下面命令识别图片
  • 四、处理给规范的文字
    • 4.1 格式规范文字的理想示例
    • 4.2 通过Python代码实现
    • 4.3 对图片进行阈值过滤和降噪处理(了解即可)
    • 4.4 从网站图片中抓取文字
    • 4.5 执行 JavaScript 语句

在尝试破解12306验证码的时候,提前了解了一下应对各种验证码的解决方案,这里主要是学习到了面对文字图片验证码,例如亚马逊、豆瓣等平台的登录时会遇到的情况,效果还不错。

一、工具介绍

​    Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎。与Microsoft Office Document Imaging(MODI)相比,我们可以不断的训练的库,使图像转换文本的能力不断增强;如果团队深度需要,还可以以它为模板,开发出符合自身需求的OCR引擎。
GitHub 地址:https://github.com/tesseract-…
安装包官方下载地址:https://digi.bib.uni-mannheim…
安装包百度云盘下载地址:https://pan.baidu.com/s/1AOsJ…

二、配置环境变量

2.1 进入环境变量配置界面

右键点击此电脑–属性–高级系统设置–环境变量–系统变量–Path

2.2 添加系统变量

找到系统变量的 Path ,将 Tesseract-OCR 的安装目录添加进去:

2.3 添加 tessdata 系统变量

如下图新建系统变量 : TESSDATA_PREFIX
   变量值为 tessdata 文件夹的路径(在Tesseract-OCR的安装目录下):

三、使用 Tesseract-OCR

3.1 进入cmd 输入下面的命令查看版本,正常运行则安装成功:

tesseract --version

3.2 使用下面命令识别图片

tesseract 图片路径 输出文件

查看输出的 result.txt文件:

结果正确!

四、处理给规范的文字

处理的大多数文字最好都是比较干净、格式规范的。格式规范的文字通常可以满足一些需求,通常格式规范的文字具有以下特点:

  • 使用一个标准字体(不包含手写体、草书,或者十分“花哨的”字体)
  • 即使被复印或拍照,字体还是很清晰,没有多余的痕迹或污点
  • 排列整齐,没有歪歪斜斜的字
  • 没有超出图片范围,也没有残缺不全,或紧紧贴在图片的边缘

文字的一些格式问题在图片预处理时可以进行解决。例如,可以把图片转换成灰度图,调整亮度和对比度,还可以根据需要进行裁剪和旋转(详情需要了解图像与信号处理)等。

4.1 格式规范文字的理想示例

识别结果很准确,不过符号^*分别被表示成了双引号和单引号。大体上可以让你很舒服地阅读。

4.2 通过Python代码实现

import pytesseract
from PIL import Imageimage = Image.open('test.jpg')
text = pytesseract.image_to_string(image)
print text

运行结果:

This is some text, written in Arial, that will be read by
Tesseract. Here are some symbols: !@#$%"&*()

4.3 对图片进行阈值过滤和降噪处理(了解即可)

随着背景色从左到右不断加深,文字变得越来越难以识别,Tesseract 识别出的 每一行的最后几个字符都是错的。

遇到这类问题,可以先用 Python 脚本对图片进行清理。利用 PIL 库,我们可以创建一个阈值过滤器来去掉渐变的背景色,只把文字留下来,从而让图片更加清晰,便于 Tesseract 读取:

from PIL import Image
import subprocessdef cleanFile(filePath, newFilePath):image = Image.open(filePath)# 对图片进行阈值过滤(低于143的置为黑色,否则为白色)image = image.point(lambda x: 0 if x < 143 else 255)# 重新保存图片image.save(newFilePath)# 调用系统的tesseract命令对图片进行OCR识别     subprocess.call(["tesseract", newFilePath, "output"]) #第三个参数是保存后的文件名# 打开文件读取结果with open("output.txt", 'r') as f:print(f.read())if __name__ == "__main__":cleanFile("text2.png", "text2clean.png")

通过一个阈值对前面的“模糊”图片进行过滤的结果

4.4 从网站图片中抓取文字

用 Tesseract 读取硬盘里图片上的文字,可能不怎么令人兴奋,但当我们把它和网络爬虫组合使用时,就能成为一个强大的工具。

网站上的图片可能并不是故意把文字做得很花哨,但它们上面的文字对网络爬虫来说就是隐藏起来 了,举个例子:

  • 虽然亚马逊的 robots.txt 文件允许抓取网站的产品页面,但是图书的预览页通常不让网络机 器人采集。
  • 图书的预览页是通过用户触发 Ajax 脚本进行加载的,预览图片隐藏在 div 节点 下面;其实,普通的访问者会觉得它们看起来更像是一个 Flash 动画,而不是一个图片文 件。当然,即使我们能获得图片,要把它们读成文字也没那么简单。
  • 下面的程序就解决了这个问题:首先导航到托尔斯泰的《战争与和平》的大字号印刷版 1, 打开阅读器,收集图片的 URL 链接,然后下载图片,识别图片,最后打印每个图片的文 字。因为这个程序很复杂,利用了前面几章的多个程序片段,所以我增加了一些注释以让 每段代码的目的更加清晰:
#!/usr/bin/python3
# -*- coding:utf-8 -*-
"""
@author: GaoYang
@file: 网站图片和获取文字.py
@time: 2019/12/4 21:14
@desc:
"""
import time
from urllib.request import urlretrieve
import subprocess
from selenium import webdriver# 创建新的selenium driver
driver = webdriver.Chrome()# 调用浏览器
driver.get('http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200')# 点击图片
driver.find_element_by_xpath("//div[@id='img-canvas']/img").click()
time.sleep(5)
#
imageList = set()
# 等箭头可以点击时,开始翻页
while "pointer" in driver.find_element_by_id("sitbReaderRightPageTurner").get_attribute('style'):driver.find_element_by_id("sitbReaderRightPageTurner").click()time.sleep(2)# 获取已经加载的新页面(一次可加载多个,但是重复的页面不能进到集合里)pages = driver.find_elements_by_xpath("//div[@class='pageImage']/div/img")for page in pages:image = page.get_attribute("src")imageList.add(image)# print(imageList)
driver.quit()# 用Tesseract处理我们收集的图片URL链接
for image in sorted(imageList):# 保存图片urlretrieve(image, "page.jpg")p = subprocess.Popen(["tesseract", "page.jpg", "page"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)f = open("page.txt", 'r')p.wait()print(f.read())

和前面使用 Tesseract 读取的效果一样,这个程序也会完美地打印书中很多长长的段落,第六页的预览如下所示:

Prince Vasily wanted this post for his son, but other people were
working through the Empress Maria Fyodorovna to get it for the
baron. Anna Pavlovna half-closed her eyes to indicate that neither she
nor anyone else could pass judgement on what the Empress might feel
like doing or want to do. 'Baron Funke has been recommended to the
Dowager Empress by her sister,) was all she said, in a dry, Tugubrious
tone. As she pronounced the name of the Empress, Anna Paviovna's
face took on an expression of profound and sincere devotion mixed
with respect and tinged with sadness, which invariably came upon her
when she had occasion to mention her exalted patroness. She said that
her Majesty had been gracious enough to show Baron Funke great
respect, at which her face once again dissolved into sadness.

但是当文字出现在彩色封面上时,结果就不那么完美了:

   WEI' nrrd PeaceLen Nlkelayevldu IolfluyReadmg shmdd be axwlnvame asnossxble Wenfleran mm m our cram: Llhvary- Leo Tmsloy was a Russian rwovelwstI and moval phflmopher med lurA ms Ideas 01 nonviolenx reswslance m 5 We range     0, "and"

如果想把文字加工成普通人可以看懂的效果,还需要花很多时间去处理。

比如,通过给 Tesseract 提供大量已知的文字与图片映射集,经过训练 Tesseract 就可以“学会”识别同一种字体,而且可以达到极高的精确率和准确率,甚至可以忽略图片中文字的背景色和相对位置等问题。

4.5 执行 JavaScript 语句

  • 隐藏百度图片
#!/usr/bin/python3
# -*- coding:utf-8 -*-
"""
@author: GaoYang
@file: 练习2.py
@time: 2019/12/5 11:35
@desc:
"""from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get("https://www.baidu.com/")# 给搜索输入框标红的javascript脚本
js = "var q=document.getElementById(\"kw\");q.style.border=\"2px solid red\";"# 调用给搜索输入框标红js脚本
driver.execute_script(js)# 查看页面快照
driver.save_screenshot("redbaidu.png")# js隐藏元素,将获取的图片元素隐藏
img = driver.find_element_by_xpath("//*[@id='lg']/img")
driver.execute_script('$(arguments[0]).fadeOut()', img)# 向下滚动到页面底部
driver.execute_script("$('.scroll_top').click(function(){$('html,body').animate({scrollTop: '0px'}, 800);});")# 查看页面快照
driver.save_screenshot("nullbaidu.png")
time.sleep(3)driver.quit()
  • 模拟滚动条滚动到底部
#!/usr/bin/python3
# -*- coding:utf-8 -*-
"""
@author: GaoYang
@file: 练习2.py
@time: 2019/12/5 10:35
@desc:
"""
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get("https://movie.douban.com/typerank?type_name=剧情&type=11&interval_id=100:90&action=")# 向下滚动10000像素
js = "document.body.scrollTop=10000"
#js="var q=document.documentElement.scrollTop=10000"
time.sleep(3)#查看页面快照
driver.save_screenshot("douban.png")# 执行JS语句
driver.execute_script(js)
time.sleep(3)#查看页面快照
driver.save_screenshot("newdouban.png")driver.quit()

★★以上是我的学习笔记,如有不足或错误之处还请各位读者指正,谢谢!

详细解读文字识别工具———Tesseract-OCR相关推荐

  1. 【PC工具】更新在线图片文字识别工具,OCR免费文字识别工具

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 之前分享过两个windows上的OCR文字识别工具: [PC工具]更新!windows ...

  2. 精品软件 推荐 ABBYY FineReader 世界排名第一的 OCR 文字识别工具

    ABBYY FineReader 是世界排名第一的 OCR 文字识别工具,提供高效和精准的文档识别.数据提取解决方案,支持多国字符和彩色文件识别,主要用于将扫描图像.图片型PDF转化成可编辑的文本. ...

  3. Prizmo Pro for Mac(OCR图像文字识别工具)

    Prizmo Pro mac版可以自动扫描相机中的图片,可根据用户选择的文档类型进行特殊处理,支持常用的扫描仪.数码相机.iPhone.iPad 等,也支持自动截图桌面部分区域然后识别出文字,非常的有 ...

  4. yorc.json_天若OCR文字识别工具 v5.0.0 开源轻量级最全桌面OCR软件

    天若OCR文字识别工具是一款轻量级最全桌面OCR软件,有些图片或视频中的信息想复制下来,这就要求我们要将这些图片或视频上的的信息截图后转换成可以编辑的文字,解决这个问题有些人知道用专业的OCR识别软件 ...

  5. TOOLFK工具-在线OCR图片文字识别工具

    本文要推荐的[TOOLFK]在线OCR图片文字识别工具 ,提供图像文字识别,提取图片文字,OCR图片文字识别,图片转文字,把图片拖拽到上传框中自动上传识别,图片文件最大3M 網站名稱:ToolFk 網 ...

  6. PearOCR - 完全免费的 OCR 文字识别工具,识别简单方便,识别率高

    免费好用的 OCR 软件,告别那些收费的软件吧,照片提取文字再也不是难题了. 关于 PearOCR PearOCR 是一款在线应用,用于把图像上的文字识别出来(OCR),以便于复制,二次修改,检索等操 ...

  7. yorc.json_天若ocr文字识别工具

    天若ocr文字识别工具是一款你可以帮助用户朋友进行本地ocr截图文字识别的强大工具,这款天若ocr文字识别工具不花一分钱,只需体验三分钟,就可以让你感受到免费迅速截图识别的魅力. 相似软件 版本说明 ...

  8. yorc.json_天若ocr文字识别工具软件

    天若ocr文字识别工具是一款免费的ocr识别软件可以帮助用户朋友进行本地ocr截图文字识别的强大工具,这款天若ocr文字识别工具不花一分钱,只需体验三分钟,就可以让你感受到免费迅速截图识别的魅力!需要 ...

  9. 超快速ocr文字识别工具:Text Scanner for Mac

    Text Scanner Mac版是Mac平台上的一款非常好用的ocr文字识别工具,识别图片上文字信息只需几秒,包含文字识别.卡证照识别,支持十多个语种专项识别,非常实用!本站现在提供text sca ...

最新文章

  1. 企业IT运维管理的发展有章可寻
  2. java016.集合
  3. lda 可以处理中文_LDA数学八卦索引及全文文档
  4. 类型两个数相减_小学数学简便计算12种分类+5种易错类型,打印出来给孩子练习!(可打印!)...
  5. php excel 垂直居中,完美实现文字图片水平垂直居中
  6. vue错误:vue.esm.js?efeb:628 [Vue warn]: Error in render: “TypeError: Cannot read property ‘matched‘ of
  7. 巧用HashSet装载非重数据(洛谷P2250题题解,Java语言描述)
  8. @MapperScan扫描包的问题
  9. 【英语学习】【Daily English】U01 Greetings / L02 What brings you here?
  10. 循环智能杨植麟:“人机耦合”将是对话语义应用的新趋势!
  11. 写给软件工程师的 30 条建议
  12. OSPFv3中LSA详解(二)——Router LSA详解
  13. Spring Data Rest如何暴露ID字段
  14. 野指针?悬空指针? 一文带你搞懂!
  15. 三校生计算机教学计划,三校生高考英语教学计划.doc
  16. 2022年N1叉车司机考试题目及答案
  17. xxxiNetxxxxx2
  18. html遮罩层动画制作,flash简单制作遮罩动画效果
  19. 详解eclipse如何配置tomcat
  20. 聚美自建的“真品联盟”被京东捅破的窗户纸

热门文章

  1. 衡水中学2021年的高考成绩查询,2021年全国百强高中排名,它拥有90%一本升学率,超衡水中学成第一...
  2. 苹果敢对“赞赏”分成30%真的是靠垄断吗?
  3. Python学习笔记---merge和concat数据合并(1)
  4. vue3.0 组合式API 加加减减
  5. 表白套路计算机公式,520 超酷表白公式 520表白套路
  6. matlab中周期延拓,如何周期延拓函数?
  7. 一个web项目中web.xmlcontext-param的作用
  8. VS2013出现未能正确加载 microsoft.visualstudio.editor.implementation.editorpackage的解决方法
  9. Google Earth Engine(GEE)实例代码学习十一——影像全色波段融合提高分辨率(HSV Pan Sharpening)
  10. python判断输入的是否为数字_python怎么判断是否为数字 将罗马数字转为阿拉伯数字,用python解...