gpt4 book ai didi

python - python 中的数字识别(OpenCV 和 pytesseract)

转载 作者:行者123 更新时间:2023-11-30 09:31:01 25 4
gpt4 key购买 nike

我目前正在尝试从小屏幕截图中检测数字。然而,我发现准确度相当差。我一直在使用 OpenCV,图像以 RGB 格式捕获并转换为灰度,然后使用全局值执行阈值处理(我发现自适应效果不太好)。

下面是其中一个数字的灰度示例,后面是阈值保持后的图像示例(数字范围为 1-99)。请注意,图像的初始屏幕截图非常小,因此被放大。

enter image description here

enter image description here

任何关于如何使用 OpenCV 或完全不同的系统来提高准确性的建议都非常感谢。下面包含一些代码,该函数传递数字的 RGB 屏幕截图。

def getNumber(image):
image = cv2.resize(image, (0, 0), fx=3, fy=3)
img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

thresh, image_bin = cv2.threshold(img, 125, 255, cv2.THRESH_BINARY)

image_final = PIL.Image.fromarray(image_bin)

txt = pytesseract.image_to_string(
image_final, config='--psm 13 --oem 3 -c tessedit_char_whitelist=0123456789')
return txt

最佳答案

这是我可以改进的地方,使用 otsu treshold 比给出任意值更有效地将文本与背景分开。超立方体在白色背景上的黑色文本上效果更好,而且我还添加了填充,因为超立方体很难识别距离边框太近的字符。

这是最终图像 [final_image][1],pytesseract 设法读取“46”

import cv2,numpy,pytesseract
def getNumber(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Otsu Tresholding automatically find best threshold value
_, binary_image = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)

# invert the image if the text is white and background is black
count_white = numpy.sum(binary_image > 0)
count_black = numpy.sum(binary_image == 0)
if count_black > count_white:
binary_image = 255 - binary_image

# padding
final_image = cv2.copyMakeBorder(image, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=(255, 255, 255))
txt = pytesseract.image_to_string(
final_image, config='--psm 13 --oem 3 -c tessedit_char_whitelist=0123456789')

return txt

函数执行如下:

>> getNumber(cv2.imread(img_path))

编辑:请注意,您不需要此行:

image_final = PIL.Image.fromarray(image_bin)

因为你可以将 numpy 数组格式的图像传递给 pytesseractr (cv2 使用),而 Tesseract 的准确度仅在 35 像素以下的字符上下降(而且更大,35px 高度实际上是最佳高度),所以我没有调整它的大小。[1]:/image/OaJgQ.png

关于python - python 中的数字识别(OpenCV 和 pytesseract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58031612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com