图片文字识别一直是个老大难的问题。要是能把图片里的文字直接提取出来,那该多爽啊!这不,Python就有个特别好使的库 - PyTesseract 。它就是基于谷歌的 Tesseract-OCR 引擎开发的,简单几行代码就能搞定文字识别。
安装 PyTesseract 可不能光装 Python 包,还得装 Tesseract-OCR 引擎。Windows 用户得去官网下安装包,Mac 用户直接用 brew 装就完事了。装好引擎后,再用 pip 装 Python 包:
pip install pytesseract
pip install Pillow # 处理图片用的
温馨提示:Windows 用户装完记得把 Tesseract-OCR 的安装路径加到环境变量,不然等会儿代码跑不动哦!
来看个最简单的例子,识别一张图片里的文字:
import pytesseract
from PIL import Image
# 读取图片
img = Image.open('test.png')
# 识别文字
text = pytesseract.image_to_string(img, lang='chi_sim')
print(text)
这代码看着简单吧?lang='chi_sim'
是指定识别中文简体,要是识别英文就用 eng
。不过图片质量不好的话,识别结果可能不太准。
图片要是不清晰,识别准确率就低了,咱们可以先对图片做个预处理:
import cv2
import numpy as np
def preprocess_image(image_path):
# 读取图片
img = cv2.imread(image_path)
# 转灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
return thresh
温馨提示:二值化阈值别瞎设,用 THRESH_OTSU 算法自动算最佳阈值准没错!
有时候咱们就想识别图片里的某个区域,这也简单:
def get_text_by_region(image, region):
# 裁剪区域
x, y, w, h = region
roi = image[y:y+h, x:x+w]
# 识别文字
text = pytesseract.image_to_string(roi, lang='chi_sim')
return text.strip()
要是想知道文字在图片里的具体位置,用 image_to_data
就搞定了:
def get_text_position(image_path):
img = Image.open(image_path)
data = pytesseract.image_to_data(img, output_type=pytesseract.Output.DICT)
for i, word in enumerate(data['text']):
if word.strip():
x, y = data['left'][i], data['top'][i]
w, h = data['width'][i], data['height'][i]
print(f'文字:{word}, 位置:({x}, {y}), 大小:{w}x{h}')
识别效果不好?试试这几招:
图片放大一点,小图片识别准确率低
调整图片对比度,文字要跟背景形成强烈对比
去噪处理,把图片上的小斑点去掉
PyTesseract 虽说不是啥高大上的 AI,但处理普通的文字识别够用了。要是发现识别率不够高,那就得上深度学习的模型了。不过对付日常工作中遇到的文字识别需求,这个小工具已经相当给力了!
代码写好了,赶紧去试试效果吧!这玩意儿用得好,以后遇到要从图片提取文字的活儿就不用手敲了。