爬虫——文字识别

机器视觉

从Google的无人驾驶汽车到可以识别假钞的自动售卖机,机器视觉一直都是一个应用广泛且具有深远的影响和雄伟的愿景的领域。

这里我们将重点介绍机器视觉的一个分支:文字识别。介绍如何用一些Python库来识别和使用在线图片中的文字。

我们可以很轻松的阅读图片里的文字,但是机器阅读这些图片就会非常困难,利用这种人类用户可以正常读取但是大多数存贮器没法读取的图片,这时验证码(CAPTCHA)就出现了。验证码读取的难易程序也大不相同。

将图像翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR的底层库并不多,目前很多库都是使用共同的几个底层OCR库,或者是在上面进行定制。

OCR库概述

在读取和处理图像、图像相差的机器学习以及创建图像等任务中,Python一直都是非常出色的语言。虽然有很多库可以进行图像处理,但是这里我们只介绍Tesseract库。

Tesseract

Tesseract是一个OCR库,目前由Google赞助。Tesseract是目前公认最优秀、最精确的开源OCR系统。除了极高的精确度,Tesseract也具有很高的灵活性。它可以通过训练识别出任何字体,也可以识别出任何Unicode字符。

安装Tesseract:Windows系统

  下载可执行安装文件安装即可。

安装pytesseract

Tesseract是一个Python的命令行工具,不是通过import语句导入的库。安装之后,要用tesseract命令在Python的外面运行,但我们可以通过pip安装支持Python版本的Tesseract库:

  pip install pytesseract

处理规范的文字

你要处理的大多数文字都是比较干净、格式规范的。格式霍英东的文字通常具有以下特点:

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

文字的一些格式问题在图片预处理时可以进行解决。例如,可以把图片转换成灰度图,调整亮度和对比度,还可以根据需要进行裁剪和旋转,在这里不作介绍。

示例:

英文:

F:\DE209_F>tesseract english.jpg text
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica

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

识别结果的准确率还是挺高的。

通过Python代码实现

英文:

中文:

#!/usr/bin/python3
# -*- coding:utf-8 -*-
__author__ = 'mayi'

import pytesseract
from PIL import Image

# 打开图像:英文
image = Image.open('english.jpg')

# OCR识别:lang默认英文
text = pytesseract.image_to_string(image)

# 打印识别后的文本
print(text)

# 我是分割线
print("*" * 30)

# 打开图像:英文
image = Image.open('china.png')

# OCR识别:lang指定中文
text = pytesseract.image_to_string(image, lang = 'chi_sim')

# 打印识别后的文本
print(text)

运行结果

This is some text, written in Arial, that will be read by
Tesseract. Here are some symbols: !@#$%"&*()
******************************
中 华 人 民 共 和 国
### 使用Python OCR库和爬虫从PDF文件中提取文本 对于从PDF文件中提取文本的任务,可以采用多种方法和技术来完成这一目标。当涉及到OCR(光学字符识别),特别是针对包含图像或者扫描件的PDF文档时,Tesseract是一个广泛使用的开源OCR引擎[^1]。 为了处理PDF中的内容并应用OCR技术,通常会先利用专门用于读取PDF结构化信息的库如`PyMuPDF`或`pdf2image`将页面转换成图片形式,之后再调用Tesseract来进行文字识别工作。下面是一段简单的代码片段展示如何结合这两个过程: ```python from pdf2image import convert_from_path import pytesseract def extract_text_from_pdf(pdf_path): images = convert_from_path(pdf_path) text = "" for image in images: page_text = pytesseract.image_to_string(image, lang='chi_sim') # 设置语言参数为简体中文 text += page_text return text ``` 如果遇到的是纯文本型PDF,则可以直接通过像`PyPDF2`这样的库获取其中的文字而无需经过OCR流程。不过需要注意的是,在某些情况下即使是看似正常的文本也可能因为字体编码等问题无法被正确解析出来,这时同样可能需要用到上述提到过的间接方式——即先把每一页渲染成图象然后再做OCR分析[^2]。 另外值得注意的一点是在实际操作过程中可能会碰到各种各样的问题,比如不同版本间的兼容性差异、特定格式的支持程度不足等等。因此建议在项目初期就做好充分测试,并保持所依赖软件包处于最新稳定状态以获得更好的性能表现以及更完善的特性支持[^3]。 最后提醒一点,虽然这里讨论了很多有关于自动化抓取数据的话题,但在执行任何网络爬行活动之前都应该仔细阅读目标网站的服务条款,确保自己的行为合法合规;同时也要尊重版权法等相关法律法规的规定[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值