乐趣区

关于爬虫:爬虫系列处理格式规范的文字

解决格局标准的文字

在上一篇文章中咱们介绍了图像识别与文字处理,同时还解说了有哪些根本的 OCR 库。

你要解决的大多数文字都是比拟洁净、格局标准的。格局标准的文字通常能够满足一些需 求,不过到底什么是“格局凌乱”,什么算“格局标准”,的确因人而异。

  • 应用一个规范字体(不蕴含手写体、草书,或者非常”花哨的“字体)
  • 尽管被复印或拍照,字体还是很清晰,没有多余的痕迹或污点
  • 排列参差,有歪歪斜斜的字
  • 没有超出图片范畴,也没有残缺不全,或紧紧贴在图片的边缘

文字的一些格局问题在图片预处理时能够进行解决。例如,能够把图片转换成灰度图,调整亮度和对比度,还能够依据须要进行裁剪和旋转。然而, 这些做法在进行更具扩展性的训练时会遇到一些限度。

上面是一个规范文字的现实示范:

下面的图片咱们转换成 tif 文件格式,应用 Tesseract 来读取。

咱们应用如下命令将图片中的文字转换成文本内容:

tesseract.exe "E:\ 我的文档 \My Pictures\Saved Pictures\test-text.max_344x194.tif" "E:\ 我的文档 \My Pictures\Saved Pictures\textoutput.txt"

最初运行后果如下:

第一行输入的是 Tesseract 版本信息,咱们查看一下后果:

This is some test text for image
recognition.

咱们呢能够看到辨认的很精确,然而互联网上的图片有的蕴含突变,有的还蕴含有背景,这会使文字变得越来越难以辨认,当咱们遇到这类问题的时候,咱们首先须要应用 Python 脚本对图片进行清理。

例如上面的图片,蕴含突变和特殊符号,咱们应用 Tesseract 来辨认图片中的内容。

应用 Tesseract 辨认后果:

利用 Pillow 库,咱们能够创立一个阈值来过滤突变的背景色,只把文字留下,从而让图片更加清晰,便于 Tesseract 读取:

import os

from PIL import Image, ImageFilter


class ImageRecognitionWordProcessing(object):

    @staticmethod
    def clean_file(file_path, new_file_path):
        image = Image.open(file_path)

        # 对图片进行阈值过滤,而后保留
        image = image.point(lambda x: 0 if x < 180 else 255)
        image.save(new_file_path)


if __name__ == '__main__':
    ImageRecognitionWordProcessing().clean_file(os.path.join(os.getcwd(), "files/test-text_has_symbol.max_340x194.jpg"),
                                                "text_2_clean.png")

咱们看看解决后的图片成果:

咱们应用 Tesseract 读取图片内容,后果如下:

通过上图能够看到与方才的后果更精确了,大部分的符号被读取进去了。

! 被辨认成了 1^ 被辨认成了 A() 被辨认成了 0,通过下面谬误的局部,咱们看出符号与辨认谬误的内容非常相像,所以才呈现这些谬误。

Tesseract 最大的毛病是对突变背景色的解决。之前那个版本中,Tesseract 的算法在读取文字之前主动尝试调整图片对比度,然而如果你用 Pillow 库这样的工具对图片进行预处理,成果会更好。

在提交给 Tesseract 解决之前,那些带题目的、带有大片空白的图片,或者有其余问题的图片,都应该做预处理。

从网站图片中抓取文字

用 Tesseract 读取硬盘里图片上的文字,可能不怎么令人兴奋,但当咱们把它和网络爬虫组合应用时,就能成为一个弱小的工具。网站上的图片可能并不是故意把文字做得很花哨(就像餐馆菜单的 JPG 图片上的艺术字),但它们下面的文字对网络爬虫来说就是暗藏起来了,我将在下一个例子里演示。

尽管亚马逊的 robots.txt 文件容许抓取网站的产品页面,然而图书的预览页通常不让网络机器人采集。图书的预览页是通过用户触发 Ajax 脚本进行加载的,预览图片暗藏在 div 节点上面;其实,一般的访问者会感觉它们看起来更像是一个 Flash 动画,而不是一个图片文件。当然,即便咱们能取得图片,要把它们读成文字也没那么简略。

退出移动版