Please enable java script to visit.
NOTEBOOK
HOMEPHP / MySQLJS / HTMLWXappPythonC++Blender其他
如何用 python 识别图片文字 - NOTEBOOK
如何用 python 识别图片文字
Python
Posted on 2023-05-24
摘要 : 要用Python识别图片文字,可以使用Python的一个名为Tesseract OCR的库。Tesseract OCR是一个开源OCR引擎,可以将图像中的文字转换为机器可读的文本字符串。
安装了Tesseract OCR之后,仍然需要安装pytesseract库,以便在Python中使用Tesseract OCR进行图像文本识别。
Tesseract OCR是一种命令行程序,不能直接在Python中使用。要在Python中使用Tesseract OCR,需要安装pytesseract库。这个库提供了一个包装器,可以在Python代码中使用Tesseract OCR。

具体来说,pytesseract库是Tesseract OCR引擎的Python接口。它允许在Python应用程序中使用Tesseract OCR进行文本识别,而不需要编写大量的底层代码。该库提供了一个简单的API,可用于将图像中的文本转换为机器可读的文本格式。
❱ 安装Homebrew:Homebrew是macOS上的软件包管理器。在终端中运行以下命令来安装Homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"


❱ 安装Tesseract OCR:在终端中运行以下命令来安装Tesseract OCR:

brew install tesseract


❱ 安装Python 3

在macOS上,Python 2和Python 3同时存在。为了确保安装了Python 3版本,可以在终端中输入以下命令来检查Python 3版本是否已安装:
python3 --version


如果已安装Python 3,则会显示Python 3的版本号。如果未安装,则可以通过以下命令安装:
brew install python3


❱ 安装Tesseract OCR的Python绑定库pytesseract

安装Python 3后,可以使用pip来安装pytesseract。在终端中输入以下命令即可安装
pip3 install pytesseract

安装完成后,可以在Python 3中使用pytesseract库来进行图像文本识别。

注意:为了确保Tesseract OCR可以正确识别图像中的文本,需要确保图像的清晰度和质量。建议根据需要对图像进行预处理,例如裁剪、旋转和灰度化等操作,以提高识别准确率。







❱ 安装Tesseract OCR,可以通过以下命令在线安装

pip install pytesseract


❱ 导入pytesseract和Pillow(Python Imaging Library)库

import pytesseract
from PIL import Image


❱ 加载输入的图片并将其转换为灰度图像

image = Image.open('example.png').convert('L')


❱ 使用pytesseract库中的image_to_string函数来获取图像中的文本内容:

text = pytesseract.image_to_string(image, lang='eng')

其中lang='eng'参数指定要识别的语言为英语。如果要识别其他语言,可以更改此参数以指定要使用的语言。

❱ 完整的代码示例:

import pytesseract
from PIL import Image

# 加载输入的图片并将其转换为灰度图像
image = Image.open('example.png').convert('L')

# 识别图像中的文本内容
text = pytesseract.image_to_string(image, lang='eng')

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



❱ 还可以对图像进行二值化处理(只有黑白)

# 二值化处理
threshold = 200
image = image.point(lambda x: 0 if x < threshold else 255, '1')

在二值化处理中,将灰度图像中低于阈值的像素点设置为黑色(0),高于阈值的像素点设置为白色(255),得到一张只有黑白两种颜色的图像。
在这段代码中,point() 方法可以应用一个函数到每个像素点上,并返回一个新的图片对象。

lambda 表达式 lambda x: 0 if x < threshold else 255 表示对于每个像素点的亮度值 x,如果它小于阈值,则返回 0,否则返回 255。

第二个参数 '1' 表示输出图片的模式为二值图像,即每个像素只有两种可能的值:黑色或白色。

因此,image.point(lambda x: 0 if x < threshold else 255, '1') 表示将原灰度图像中亮度值小于阈值的像素点设置为黑色,其余像素点设置为白色。