码峰博客 – 码而思

分享积累从此时此刻开始

Python 使用 pytesseract 进行图像中的文字提取

近日小编在研究一款国外软件,奈何英文水平太差,而且软件专业性较强,很是费劲。再加上文字提取的使用场景还是比较普遍的,于是决定研究一番。

虽然使用百度翻译勉强能用,但百度图片翻译有两个问题:
一个是翻译出来的文字格式和图片上的不一致,不换行,都是放在一起的
二是部分文字识别有问题,文字中间小写的i经常丢失

说明

pytesseract 依赖 Tesseract OCR ,因此需要先安装 Tesseract OCR。
1. 下载 Tesseract OCR 并安装、配置。
2. 通过 pip 安装 pytesseract。
3. 运行代码

Tesseract OCR 安装

windows安装

下载路径二:点击百度网盘下载

2.安装
双击下载的 .exe文件 进行安装,需要记住安装目录
默认为 C:\Program Files\Tesseract-OCR

3.配置用户环境变量
将安装路径配置到用户环境变量 Path 里即可,
提示:配置完环境变量记得重启 IDE,如果IDE开了多个窗口,都要关闭
推荐使用 windows 环境变量修改工具

4.其它语言支持
Tesseract 支持130多种语言,如果需要其它语言的支持,点 这里 下载 .traineddata 文件,放到安装目录下 C:\Program Files\Tesseract-OCR\tessdata

Linux、mac安装

参考官网:https://tesseract-ocr.github.io/tessdoc/Installation.html

pytesseract 安装

pip安装pytesseract

pip install Pillow
pip install pytesseract

实例代码1-识别英文数字

import pytesseract
from PIL import Image

# 如果报错找不到Tesseract,也可以在这里指定具体路径
# pytesseract.pytesseract.tesseract_cmd = r'D:\Program Files\Tesseract-OCR\tesseract.exe'

# 加载图片
image_path = r'textExtraction1.jpg'
img = Image.open(image_path)

# 使用 pytesseract 进行文本识别
text = pytesseract.image_to_string(img)

print(text)

效果展示(英文 数字)

实例代码2-识别中文

import pytesseract
from PIL import Image

# 加载图片
image_path = r'textExtraction2.png'
img = Image.open(image_path)

# 使用 pytesseract 进行文本识别,确保已经下载了 Tesseract 对应的多语言 .traineddata 文件
text = pytesseract.image_to_string(img, lang='chi_sim')
print(text)

效果展示(汉字 英文 数字)

实例代码3-识别中文
需要安装 opencv 进行灰度转换 和 降噪处理, pip install opencv-python

import cv2
# 读取图片
img = cv2.imread(r'textExtraction2.png')
# 灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 去除噪点
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)
# 识别文字
custom_config = r'--psm 1 -c preserve_interword_spaces=1 -l chi_sim'
text = pytesseract.image_to_string(thresh, config=custom_config)
print(text)

效果展示(汉字 英文 数字)
还是使用 上个实例中的图片进行识别

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Index