简体   繁体   English

使用 OpenCV 优化 OCR 的各种亮度图像

[英]Optimize various brightness image for OCR using OpenCV

I have following types of images:我有以下类型的图像:

示例 1 示例 2 示例 3 示例 4 示例 5 例 6 例 7 示例 8 示例 9

I would like to preprocess them to do best OCR result, but as you can see they are in different brightness and different sharpness ... is possible to do some "generic" adjustments to extract text for OCR with the best result?我想对它们进行预处理以获得最佳 OCR 结果,但正如您所见,它们具有不同的亮度和不同的清晰度……是否可以进行一些“通用”调整以提取 OCR 文本并获得最佳结果?

You can use easy ocr is giving proper result for these cases.您可以使用简单的 ocr为这些情况提供正确的结果。 This will work for blurred and unblurred cases.这将适用于模糊和不模糊的情况。

import easyocr
import cv2
import numpy as np
from PIL import Image, ImageEnhance


def unsharp_mask(image, kernel_size=(5, 5), sigma=1.0, amount=1.0, threshold=0):
    """Return a sharpened version of the image, using an unsharp mask."""
    blurred = cv2.GaussianBlur(image, kernel_size, sigma)
    sharpened = float(amount + 1) * image - float(amount) * blurred
    sharpened = np.maximum(sharpened, np.zeros(sharpened.shape))
    sharpened = np.minimum(sharpened, 255 * np.ones(sharpened.shape))
    sharpened = sharpened.round().astype(np.uint8)
    if threshold > 0:
        low_contrast_mask = np.absolute(image - blurred) < threshold
        np.copyto(sharpened, image, where=low_contrast_mask)
    return sharpened

def increase_brightness(img, value):
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    h, s, v = cv2.split(hsv)

    lim = 255 - value
    v[v > lim] = 255
    v[v <= lim] += value

    final_hsv = cv2.merge((h, s, v))
    img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR)
    return img

image = cv2.imread('if8nC.png')
sharpened = unsharp_mask(image)
imag = increase_brightness(sharpened, value=10) # 60 ->5qoOk.png #10 -> if8nC.png
cv2.imwrite('resize.png',imag)

reader = easyocr.Reader(['en'],gpu=False)
result = reader.readtext('resize.png')
for detection in result:
        print(detection)

The only adjustment u have to make is change in brightness value from 0 to 100. It worked for all cases.您必须进行的唯一调整是将亮度值从 0 更改为 100。它适用于所有情况。 The output is输出是

([[1, 0], [282, 0], [282, 68], [1, 68]], 'Tvrdosin', 0.4517089309490733)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM