python爬虫学习第三十六天

本文介绍了使用Python结合Selenium和Tesseract进行OCR操作的方法,并通过实战案例展示了如何从网页中抓取图片并识别文字。此外,还详细讲解了如何训练Tesseract以提高其识别率,特别是针对验证码这类特殊场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天完成昨天说的识别图片文字的内容

练习 将tesseract与爬虫结合起来

import time
from urllib.request import urlretrieve
import subprocess
from selenium import webdriver

driver=webdriver.PhantomJS(executable_path="C:/Users/gaoji/Documents/python/phantomjs-2.1.1-windows/bin/phantomjs.exe")
driver.get("http://www.amazon.com/War-Peace-Leo-Nikolayevich-Tolstoy/dp/1427030200")
time.sleep(8)
driver.find_element_by_id("sitbLogoImg").click()
imageList = set()
time.sleep(9)

while "pointer" in driver.find_element_by_id("sitbReaderRightPageTurner").get_attribute("style"):
    driver.find_element_by_id("sitbReaderRightPageTurner").click()
    time.sleep(9)
    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()

for image in sorted(imageList):
    urlretrieve(image,"page.jpg")
    p = subprocess.Popen(["tesseract","page.jpg","page"],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    p.wait()
    f = open("page.txt","r")
    print(f.read())
input()

selenium其实是一个比较好用的自动化测试工具,但掌握起来不是那么容易,我对与这个的掌握处于了解阶段,所以这个练习做的很吃力。

接下来简单介绍以下训练tesseract来让他变得更加优秀
在实际应用中,OCR的一个重要用途就是自动识别验证码。
什么样的验证码更易于OCR程序识别?这里列取了一个样例:
这里写图片描述

这个图片用tesseract的指令直接就可以识别(基本正确)
他大概有以下的特点:

• 字母没有相互叠加在一起,在水平方向上也没有彼此交叉。也就是说,可以在每一个字 母外面画一个方框,而不会重叠在一起。
• 虽然不能因一个图片下定论,但是这个验证码用的字体种类很少,其实只有一种
• 白色背景色与深色字母之间的对比度很高。

但是只要加一点小小的改动就会让它变得非常难以识别,比如下面这张
这里写图片描述
直接用tesseract会提示empty page,而这张图片在我们看来是相当好识别的。

• 字母和数据都使用了,这会增加待搜索字符的数量。
• 字母随机的倾斜程度会迷惑OCR软件,但是人类还是很容易识别的。
• 验证码所使用的字体不是规范字体,尽管它在我们看来以及足够“规范”了

通过训练tesseract,可以让这种情况得到改善,至于能改善多少,与训练所用样例有关。
要训练 Tesseract 识别一种文字,无论是晦涩难懂的字体还是验证码,你都需要向 Tesseract 提供每个字符不同形式的样本

训练的具体执行分成几步:
• 首先要把大量的验证码样本下载到一个文件夹里。下载的样本数量由验证码 的复杂程度决定,有些特别复杂的验证码(google)等,样例的选用上还需要特殊的技巧,这个过程非常枯燥而且很有可能会倒回到这步重做。
• 第二步是准确地告诉 Tesseract 一张图片中的每个字符是什么,以及每个字符的具体位置。 这里需要创建一些矩形定位文件(box file) ,一个验证码图片生成一个矩形定位文件。一 个图片的矩形定位文件如下所示:
4 15 26 33 55 0
M 38 13 67 45 0
m 79 15 101 26 0
C 111 33 136 60 0
3 147 17 176 45 0

第一列符号是图片中的每个字符,后面的 4 个数字分别是包围这个字符的最小矩形的坐标 (图片左下角是原点 (0,0),4 个数字分别对应每个字符的左下角 x 坐标、左下角 y 坐标、右 上角 x 坐标和右上角 y 坐标) ,最后一个数字“0”表示图片样本的编号
Tesseract OCR Chopper可以帮助你完成这些矩形的标记。
矩形定位文件必须保存在一个 .box 后缀的文本文件中。图片和box文本文最好用验证码的实际结果命名
•接下来是完成所有的数据分析工作和创建 Tesseract 所需的训练文件,一共有六个步骤。这一部是比较麻烦的,虽然有些工具可以辅助你完成任务,完成这一步需要的对tesseract了解的深入一点。
•最后一步,就是用Linux 和 Mac 命令行把刚刚创建的 eng. traineddata 文件复制到 tessdata 文件夹里,Windows 系统类似

完成这些后,你就可以用这些 Tesseract 训练过的验证码来识别新图片了,效果应该回改善许多。

要一两天掌握OCR程序几乎是不可能的,想要熟练应用这些工具甚至需要阅读他们的源码及大量用例,这里只能是简单介绍以下。
今天就这样了,OCR好难,不过了解下还是感觉挺好的,打卡~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值