python怎么处理文字_python 处理给规范的文字

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

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

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

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

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

格式规范文字的理想示例

通过下面的命令运行 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 就可以“学会”识别同一种字体,而且可以达到极高的精确率和准确率,甚至可以忽略图 片中文字的背景色和相对位置等问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php自定义商品属性,php – 可变产品属性:自定义每个显示的单选按钮文本值

以下是您重新访问的代码,该代码仅显示“Tab”属性单选按钮自定义显示的文本a< span>基于属性slug和$term_slug的组合,使用不同的类值标记.因此,您可以将一些CSS样式颜色应用于每个单选按钮显示的’pa_tab’属性的自定义文本,将这些CSS规则添加到您的活动主题style.css ……

腾讯 深圳 25928-PHP开发工程师(深圳)

工作地点&#xff1a;深圳职位类别&#xff1a;技术类招聘人数&#xff1a;1人 工作职责&#xff1a;负责游戏研运体系流程工具及相关产品的开发、维护&#xff1b;参与支撑系统的需求分析、设计、编码&#xff1b;承担外包开发成员技术导师&#xff0c;解决技术难点&#xff0…

什么是物联网?常见IoT协议最全讲解

作者&#xff1a;付强来源&#xff1a;IoT物联网技术&#xff08;ID&#xff1a;IoT-Tech-Expo&#xff09;01 什么是物联网?物联网&#xff08;Internet of Things&#xff09;这个概念读者应该不会陌生。物联网的概念最早于1999年被提出来&#xff0c;曾被称为继计算机、互联…

is在python中是什么意思_Python 中 is 与 == 有啥区别?

在 Python 中&#xff0c;比较两个对象(变量)是否相等&#xff0c;可以用 “is” 和 “” 操作&#xff0c;但它俩有什么区别&#xff1f;什么时候用 “is”&#xff0c;什么时候用 “” &#xff1f;在面试时&#xff0c;发现不少候选人很难把这两者完全说清楚&#xff0c;因此…

java下发命令nbiot,NB物联网之天翼物联(3)——编解码插件上传规则细解(java开发物联网)...

前言电信的编解码插件本意上是可以让我们的开发更加灵活&#xff0c;但是你好歹把文档写明白啊。。。同时在正常的生产中我们的产品不可能只使用电信的模块&#xff0c;有时甚至是客户要求使用移动还是电信的模块&#xff0c;所以兼容性给我们的体验非常直观&#xff01;我们先…

netcat使用

前言 最近在做渗透测试的时候遇到了端口监听和shell的反弹问题&#xff0c;在这个过程中自己对Netcat这一款神器有了新的认识&#xff0c;现将一些Netcat的用法做一个小总结&#xff0c;希望对各位有帮助&#xff01; Netcat简介 Netcat是一款非常出名的网络工具&#xff0c;简…

重磅:国家正式出台学术不端行为界定

来源&#xff1a;科研大匠大家都在反对学术不端&#xff0c;何为学术不端&#xff1f;如何界定学术不端行为&#xff1f;其实&#xff0c;此前并没有一个明确的标准。2019年5月29日&#xff0c;国家新闻出版署才正式发布我国首个针对学术不端行为的行业标准——《学术出版规范—…

数据结构化与保存

1. 将新闻的正文内容保存到文本文件。 f open(gzccnews.txt,a,encodingutf-8)f.write(content)f.close()2. 将新闻数据结构化为字典的列表: 单条新闻的详情-->字典news一个列表页所有单条新闻汇总-->列表newsls.append(news)所有列表页的所有新闻汇总列表newstotal.exte…

Gartner:解开关于人工智能的六个迷思

来源&#xff1a;Gartner“人工智能将自动执行所有工作并让人类失业。”“人工智能只是一种虚构的技术。”“机器人将占领整个世界。”围绕人工智能的炒作给主流媒体、董事会议和各企业机构留下了许多迷思。有人担心“万能”的人工智能将占领全世界&#xff0c;有人则认为人工智…

python计算三角函数的计算器_一个工具箱 之 三角函数计算器

三角函数是基本初等函数之一&#xff0c;是以角度(数学上最常用弧度制&#xff0c;下同)为自变量&#xff0c;角度对应任意角终边与单位圆交点坐标或其比值为因变量的函数。也可以等价地用与单位圆有关的各种线段的长度来定义。三角函数在研究三角形和圆等几何形状的性质时有重…

java搭建线程池框架,JAVA线程池管理及分布式HADOOP调度框架搭建

大家看到了线程的好处了吧&#xff01;单线程需要10S&#xff0c;10个线程只需要1S。充分利用了系统资源实现并行计算。也许这里会产生一个误解&#xff0c;是不是增加的线程个数越多效率越高。线程越多处理性能越高这个是错误的&#xff0c;范式都要合适&#xff0c;过了就不好…

H5项目常见问题汇总及解决方案

H5项目常见问题及注意事项 补充&#xff1a; https://github.com/aligay/fastclick/blob/master/lib/fastclick.js Meta基础知识&#xff1a; H5页面窗口自动调整到设备宽度&#xff0c;并禁止用户缩放页面//一、HTML页面结构 <meta name"viewport" content"…

IBM将收购Instana公司,持续推进其混合云和人工智能战略

来源&#xff1a;IBM中国收购 Instana 后&#xff0c;IBM 将帮助企业在多团队和多云&#xff08;平均 2到 15个&#xff09;环境下更好地管理他们的应用性能。[1]这也是 IBM 持续完善其由人工智能所驱动的自动化能力的又一例证&#xff0c;IBM 的其他相关举措还包括&#xff1a…

python调用大漠找图_[教程贴]按键精灵调用大漠插件后台找图示例

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//------大漠注册-------------------------------------------------------------DMPath "c:\test_game\"注册大漠的文件夹DMVer "3.1233"当前使用的大漠版本号////Call 大漠注册标准版(DMPath, DMVer)//--…

1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册

基本查询查询单个数据使用find方法&#xff1a;// table方法必须指定完整的数据表名Db::table(think_user)->where(id,1)->find();最终生成的SQL语句可能是&#xff1a;SELECT * FROM think_user WHERE id 1 LIMIT 1find 方法查询结果不存在&#xff0c;返回 null&#…

[原创]关于在VS解决方案下使用文件夹管理多个项目层次关系的说明

由于所创建的应用项目或类库项目较多&#xff0c;于是将这些类库放到一个文件夹下。在VS解决方案下确实能看到一个文件夹下多个类库项目这种层次关系。如下图所示&#xff1a; 但打开“我的电脑”&#xff0c;看到的只有类库&#xff0c;并未看到维护层次关系的文件夹。如下图所…

java进阶(二)-java小干货

java一些精干知识点分享 2. java小干货2.1循环遍历2.2可变参数2.3 list和数组转化2.3.1 数组转list2.3.2 list转数组 2.4 值传递和地址传递2.4.1值传递2.4.2 地址传递2.4.3易错点总结 2.5 数组数组帮助类Arrays 2.5 基本数据类型和包装类2.5集合2.6文件流2.7java代码块、内部类…

机器直觉

来源&#xff1a;专知当前以深度学习代表的人工智能技术所能解决的问题往往需要具有大量可以借鉴学习的训练 集, 同时要求所获取的信息是完备的. 但在复杂时变的真实应用环境中, 采集到的数据往往包含大量 噪声与不确定性, 且仅包含环境的局部信息, 导致了基于深度学习的人工智…

vb.net读取excel并写入dgv_读取PDF中的表格写入EXCEL?30行代码搞定

办公自动化系列1现在&#xff0c;各类数据分析的书籍&#xff0c;都可以在网上找到PDF版本&#xff1b;同时&#xff0c;百度文库、各类数据统计文库、行业研究等众多论文报告&#xff0c;是通过PDF的形式去展示输出的&#xff1b;但是&#xff0c;令人都头疼的是&#xff0c;各…

reshape [] matlab,matlab之reshape函数

简单来说&#xff0c;reshape(A,m,n)就是用来把原矩阵的元素&#xff0c;按照列读取排成一行&#xff0c;然后按照指定的m*n矩阵再按列放好。比如原矩阵为A 1 2 34 5 67 8 910 11 12我们先给他按列拍成一排(变相说也就是看看reshape(A,1,12))的效…