PyTesseract:一个OCR识别利器,让图像文字更清晰的Python库!

文摘   2024-11-15 10:19   重庆  

图片文字识别一直是个老大难的问题。要是能把图片里的文字直接提取出来,那该多爽啊!这不,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}')

识别效果不好?试试这几招:


  1. 图片放大一点,小图片识别准确率低

  2. 调整图片对比度,文字要跟背景形成强烈对比

  3. 去噪处理,把图片上的小斑点去掉


PyTesseract 虽说不是啥高大上的 AI,但处理普通的文字识别够用了。要是发现识别率不够高,那就得上深度学习的模型了。不过对付日常工作中遇到的文字识别需求,这个小工具已经相当给力了!


代码写好了,赶紧去试试效果吧!这玩意儿用得好,以后遇到要从图片提取文字的活儿就不用手敲了。

重庆城市TV
重庆广电城市TV旗下优质内容品牌,感谢您的关注!
 最新文章