pytesseract文字识别,提高准确率的方法

该代码实现了一个Python类,用于识别图像中的文本。它首先通过欧几里得距离计算对图像进行颜色对比,转化为白底黑字,然后使用pytesseract库进行文字识别,主要针对数字进行识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


import math ,pytesseract ,cv2
from PIL import Image


class identifyText:

    def __init__(self) -> None:
        # 定义相似颜色的阈值,5~200之间为最佳值,5~500为有效值
        self.threshold = 100

        img_path = r'screen\screen.png'
        new_img_path = r'screen\new_screen.png'

        if self.transformedImage(img_path ,new_img_path):
            print(self.characterRecognition(new_img_path))


    # 计算两个颜色之间的欧几里得距离
    def color_distance(self ,c1 ,c2):
        # 如果图片没有透明通道则不需要传入和计算a通道
        r1, g1, b1, a1 = c1
        r2, g2, b2, a2 = c2
        return math.sqrt((r1-r2)**2 + (g1-g2)**2 + (b1-b2)**2 + (a1-a2)**2)

    # 转化图像为白底黑字,以提高识别准确性
    def transformedImage(self ,img_path ,new_img_path):

        # 打开原图
        img = Image.open(img_path)
        # 创建一个白色的背景图像
        new_img = Image.new('RGBA', img.size, (255, 255, 255, 255))

        # 遍历所有像素点
        for x in range(img.width):
            for y in range(img.height):
                # 获取当前像素点的颜色
                color = img.getpixel((x, y))
                # 如果原图当前坐标颜色与给定颜色相似,则在背景图中相同的坐标写入黑色像素点
                if self.color_distance(color, (247, 245, 244, 255)) < self.threshold:
                    new_img.putpixel((x, y), (0,0,0,255))

        # 保存新图像
        new_img.save(new_img_path)
        return True

    # 文字识别
    def characterRecognition(self ,new_img_path):
        # 感觉好像没有必要进行灰度和二值化处理了,白底黑字的准确性挺高的,代码留这,你们自己看着整

            # 读取新图像
            # img = cv2.imread(new_img_path)
            # # 将图片转换为灰度图像
            # gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            # # 对图像进行二值化处理
            # thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
            # config = "--psm 7 --oem 3 -c tessedit_char_whitelist=0123456789"
            # text = pytesseract.image_to_string(thresh, config=config)

        # 读取新图像
        img = cv2.imread(new_img_path)
        # 进行文字识别
        # --psm 7 单行识别 , --oem 3 使用 LSTM OCR 引擎 , -c tessedit_char_whitelist=0123456789 只识别数字字符
        config = "--psm 7 --oem 3 -c tessedit_char_whitelist=0123456789"
        text = pytesseract.image_to_string(img, config=config)

        # 防止识别不到报错
        try:
            # 去除其他符号,对数字进行重新整合
            return int(''.join(filter(str.isdigit, text)))
        except Exception:
            return '未能识别文字'

if __name__ == "__main__":
    identifyText()
提高pytesseract识别率,可以尝试以下方法: 1. 图片预处理:对图片进行二值化处理,可以使用OpenCV库中的阈值化函数来实现。二值化可以将图片转换为黑白两色,提高文字的清晰度和对比度,从而提高识别率。 2. 图片增强:使用图像处理技术,如锐化、平滑、对比度增强等方法,可以改善图片质量,使文字更加清晰,有利于识别。 3. 调整识别参数:pytesseract提供了一些参数可以调整,如语言模型、识别配置等。根据具体情况,可以尝试调整这些参数来提高识别率。 4. 使用训练数据:如果有大量特定领域的图片需要识别,可以考虑使用样本训练来提高识别准确率。但是这需要大量的样本数据和时间来训练,不适合所有项目。 5. 多种识别引擎结合使用:pytesseract支持多种OCR引擎,可以尝试结合其他OCR引擎来提高识别率。 下面是一个示例代码,演示了如何使用pytesseract进行图片识别并提高识别率: ```python import cv2 import pytesseract # 读取图片 image = cv2.imread('image.jpg') # 图片预处理 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) threshold = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] # 图片增强 enhanced = cv2.medianBlur(threshold, 3) # 设置识别参数 config = '--psm 6' # 进行识别 text = pytesseract.image_to_string(enhanced, config=config) # 输出识别结果 print(text) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值