你要处理的大多数文字都是比较干净、格式规范的。格式规范的文字通常可以满足一些需求,不过究竟什么是“格式混乱”,什么算“格式规范”,确实因人而异。 通常,格式规范的文字具有以下特点:

使用一个标准字体(不包含手写体、草书,或者十分“花哨的”字体) • 虽然被复印或拍照,字体还是很清晰,没有多余的痕迹或污点

排列整齐,没有歪歪斜斜的字

没有超出图片范围,也没有残缺不全,或紧紧贴在图片的边缘

文字的一些格式问题在图片预处理时可以进行解决。例如,可以把图片转换成灰度图,调 整亮度和对比度,还可以根据需要进行裁剪和旋转(详情请关注图像与信号处理),但是,这些做法在进行更具扩展性的 训练时会遇到一些限制。

格式规范文字的理想示例

通过下面的命令运行 Tesseract,读取文件并把结果写到一个文本文件中: `tesseract test.jpg text

cat text.txt 即可显示结果。

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

通过Python代码实现

import pytesseract

from PIL import Image

image = 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: !@#$%"&*()

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

很多时候我们在网上会看到这样的图片:

Tesseract 不能完整处理这个图片,主要是因为图片背景色是渐变的,最终结果是这样:

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

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

from PIL import Image

import subprocess

def cleanFile(filePath, newFilePath):

image = Image.open(filePath)

# 对图片进行阈值过滤,然后保存

image = image.point(lambda x: 0 if x<143 else 255)

image.save(newFilePath)

# 调用系统的tesseract命令对图片进行OCR识别

subprocess.call(["tesseract", newFilePath, "output"])

# 打开文件读取结果

file = open("output.txt", 'r')

print(file.read())

file.close()

cleanFile("text2.jpg", "text2clean.png")

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

除了一些标点符号不太清晰或丢失了,大部分文字都被读出来了。Tesseract 给出了最好的 结果:

从网站图片中抓取文字

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

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

虽然亚马逊的 robots.txt 文件允许抓取网站的产品页面,但是图书的预览页通常不让网络机 器人采集。

图书的预览页是通过用户触发 Ajax 脚本进行加载的,预览图片隐藏在 div 节点 下面;其实,普通的访问者会觉得它们看起来更像是一个 Flash 动画,而不是一个图片文 件。当然,即使我们能获得图片,要把它们读成文字也没那么简单。

下面的程序就解决了这个问题:首先导航到托尔斯泰的《战争与和平》的大字号印刷版 1, 打开阅读器,收集图片的 URL 链接,然后下载图片,识别图片,最后打印每个图片的文 字。因为这个程序很复杂,利用了前面几章的多个程序片段,所以我增加了一些注释以让 每段代码的目的更加清晰:

import time

from urllib.request import urlretrieve

import subprocess

from selenium import webdriver

#创建新的Selenium driver

driver = webdriver.PhantomJS()

# 用Selenium试试Firefox浏览器:

# driver = webdriver.Firefox()

driver.get("http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200")

# 单击图书预览按钮 driver.find_element_by_id("sitbLogoImg").click() imageList = set()

# 等待页面加载完成

time.sleep(5)

# 当向右箭头可以点击时,开始翻页

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)

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 读取的效果一样,这个程序也会完美地打印书中很多长长的段 落,第六页的预览如下所示:

6

"A word of friendly advice, mon

cher. Be off as soon as you can,

that's all I have to tell you. Happy

he who has ears to hear. Good-by,

my dear fellow. Oh, by the by!" he

shouted through the doorway after

Pierre, "is it true that the countess

has fallen into the clutches of the

holy fathers of the Society of je-

sus?"

Pierre did not answer and left Ros-

topchin's room more sullen and an-

gry than he had ever before shown

himself.

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

WEI' nrrd Peace

Len Nlkelayevldu Iolfluy

Readmg shmdd be ax

wlnvame asnossxble Wenfler

an mm m our cram: Llhvary

- Leo Tmsloy was a Russian rwovelwst

I and moval phflmopher med lur

A ms Ideas 01 nonviolenx reswslance m 5 We range 0, "and"

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

下一节将介绍另一种方法来解决文字混乱的问题,尤其是当你愿意花一点儿时间训练 Tesseract 的时候。

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

python怎么处理文字_python 处理给规范的文字相关推荐

  1. python识别图片上的文字_Python如何识别图片中的文字 【转】

    Python如何识别图片中的文字,这里给个案例并附上详细步骤: 模块包的安装: 1.安装PIL:pip install Pillow 2.安装pytesser3:pip install pytesse ...

  2. python 百度ocr识别_Python使用百度Ocr识别文字保存CSV

    1.准备: 1)Python开发环境, 笔者用的是3.7; 工具用的是Pycharm 2)百度云后台创建文字识别的应用, 获取AppID, API key, Secret Key 百度云后台创建文字识 ...

  3. python 输出文字_Python中输出ASCII大文字、艺术字、字符字小技巧

    复制代码 代码如下: display text in large ASCII art fonts 显示大ASCII艺术字体 这种东西在源码声明或者软件初始化控制台打印时候很有用. 例如下图: 这是查看 ...

  4. python如何识别中文_python如何识别图片中的文字

    python如何识别图片中的文字,这里给个案例并附上详细步骤: 模块包的安装: 1.安装PIL:pip install Pillow 2.安装pytesser3:pip install pytesse ...

  5. python显示gif图片_Python给gif图片加文字水印

    为了成批地给图像增加水印,我们这里用到了枕头模块.它的英文名为pillow.安装它的方式为用cmd命令打开DOS提示符窗口,然后输入pip install pillow即可.就像下面这样: pytho ...

  6. python爬虫代码提取图片中的文字_python识别图像并提取文字的实现方法

    前言 python图像识别一般基础到的就是tesseract了,在爬虫中处理验证码广泛使用. 安装 安装教程网上大都差不多,Windows下确实比较麻烦,涉及到各种路径.环境变量甚至与linux不同的 ...

  7. python将照片转文字_Python将图片转化成文字

    我们之前学过词云能将数据变成图片展示出来,那么今天我们就来看个不同的,将图片变成字符输出. 看个效果图: 文字输出: 那么下面我们来看看代码吧!import argparse from PIL imp ...

  8. python百度语音实时识别成文字_python 上传百度语音识别+文字返回结果

    1文字生成语音 #!/usr/bin/python3 import urllib.request import requests#导入requests库 import urllib import js ...

  9. python怎样画动态文字_Python之pygame学习绘制文字制作滚动文字

    pygame绘制文字 ✕ 今天来学习绘制文本内容,毕竟游戏中还是需要文字对玩家提示一些有用的信息. 字体常用的不是很多,在pygame中大多用于提示文字,或者记录分数等事件. 字体绘制基本分为以下几个 ...

最新文章

  1. R语言探索性因子分析(Exploratory factor analysis)
  2. VTK修炼之道23:图像基本操作_灰度图像映射成伪彩色图像(查表法)
  3. JLabel跟label
  4. 使用VS制作MFC、libmysql.dll出现计算机缺少msvcr120.dll和msvcp120.dll问题
  5. 信安教程第二版-第19章操作系统安全保护
  6. 步步深入MySQL:架构-gt;查询执行流程-gt;SQL解析顺序!
  7. html微博首页布局,html+css微博布局
  8. 《缠中说禅108课》99:走势结构的两重表里关系 3
  9. 计算机自动维护有用吗,Win10怎么开启自动维护功能?系统自动维护有什么作用?...
  10. grafana-reporter
  11. zabbix 5.0所有依赖包_最详细的 Zabbix 使用教程
  12. 微信公众号怎么申请注册?看这一篇就够了
  13. 摘录魏国谋士轮胜败要素
  14. 微软新版edge浏览器如何开启画中画模式
  15. 哈达玛矩阵 matlab,哈达玛变换矩阵.ppt
  16. 针式打印机连续打印多走纸_针织打印机以及更多开放源代码的艺术品
  17. Python实现地图四色原理的遗传算法(GA)着色实现
  18. 77道JVM系列面试题总结(2万字解析)
  19. linux和window下mkdir函数问题(转-锦曦月)
  20. English Learning - L2-3 英音地道语音语调 小元音 [ʌ] [ɒ] [ʊ] [ɪ] [ə] [e] 2023.02.27 周一

热门文章

  1. LeetCode 993. 二叉树的堂兄弟节点(层序遍历)
  2. 动态规划算法(Dynamic Programming)之0-1背包问题
  3. mysql 字符串搜_mysql – 在表中搜索字符串的SQL查询?
  4. Codeforces Round #693 (Div. 3)A~G解题报告
  5. prompt你到底行不行?
  6. Spring Cloud构建微服务架构:分布式配置中心【Dalston版】
  7. 开源开放 | 《大词林》开源 75 万核心实体和围绕核心实体的细粒度概念、关系列表...
  8. Docker镜像大小
  9. 法律规则鬼畜图解||全面易懂的旅游投诉赔偿标准
  10. python下载网上的文件