Rae*_*rji 6 python ocr python-imaging-library google-vision
我正在使用Google Vision API从某些图片中提取文本,但是,我一直在努力提高结果的准确性(可信度),但并不算幸运。
每次我从原始图像更改图像时,都会丢失检测某些字符的准确性。
我已经隔离了一个问题,使不同的单词具有多种颜色,例如,红色的单词比其他单词的错误结果更多。
例:
灰度或黑白图像上的某些变化
我有什么想法可以使它更好地工作,特别是将文本的颜色更改为统一的颜色,或者将白色背景上的颜色更改为黑色,因为大多数算法都希望这样做?
我已经尝试过的一些想法,也有一些门槛。
dimg = ImageOps.grayscale(im)
cimg = ImageOps.invert(dimg)
contrast = ImageEnhance.Contrast(dimg)
eimg = contrast.enhance(1)
sharp = ImageEnhance.Sharpness(dimg)
eimg = sharp.enhance(1)
Run Code Online (Sandbox Code Playgroud)
我需要更多关于此的背景信息。
由于视频压缩,图像过于模糊,因此即使对图像进行预处理以提高质量,也可能无法获得足够高的图像质量以实现准确的 OCR。如果您决定使用 OCR,您可以尝试一种方法:
对图像进行二值化以获得白色的非红色文本和黑色背景,如二值化图像中一样:
from PIL import Image
def binarize_image(im, threshold):
"""Binarize an image."""
image = im.convert('L') # convert image to monochrome
bin_im = image.point(lambda p: p > threshold and 255)
return bin_im
im = Image.open("game_text.JPG")
binarized = binarize_image(im, 100)
Run Code Online (Sandbox Code Playgroud)使用过滤器仅提取红色文本值,然后将其二值化:
import cv2
from matplotlib import pyplot as plt
lower = [15, 15, 100]
upper = [50, 60, 200]
lower = np.array(lower, dtype = "uint8")
upper = np.array(upper, dtype = "uint8")
mask = cv2.inRange(im, lower, upper)
red_binarized = cv2.bitwise_and(im, im, mask = mask)
plt.imshow(cv2.cvtColor(red_binarized, cv2.COLOR_BGR2RGB))
plt.show()
Run Code Online (Sandbox Code Playgroud)然而,即使进行了这种过滤,它仍然不能很好地提取红色。
添加在 (1.) 和 (2.) 中获得的图像。
combined_image = binarized + red_binarized
Run Code Online (Sandbox Code Playgroud)