阅读条形码pytesseract python下面的文本

2024-05-15 13:42:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在图像中获取条形码下方的数字。我在其他一些图像中尝试了相同的代码,效果很好,但不适用于该图像 这是图片 enter image description here

这是到目前为止的代码

def readNumber():
    image = cv2.imread(sTemp)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray, (3,3), 0)
    thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
    opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
    invert = 255 - opening
    data = pytesseract.image_to_string(invert, lang='eng', config='--psm 6 -c tessedit_char_whitelist=0123456789')
    print(data)
    try:
        data  = re.findall('(\d{9})\D', data)[0]
    except:
        data = ''
    return data

我用这条线

readNumber()

这是另一个例子 enter image description here

这是我承诺的最后一个例子 enter image description here

我在第三个例子中尝试了这个方法,效果很好

img = cv2.imread("thisimage.png")
blur = cv2.GaussianBlur(img, (3,3), 0)
#gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
txt = pytesseract.image_to_string(blur)
print(txt)

但是我如何采用所有案例来处理这三个案例呢? 我尝试了这样的代码,但无法实现第三种情况

import pytesseract, cv2, re

def readNumber(img):
    img = cv2.imread(img)
    gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    try:
        txt = pytesseract.image_to_string(gry)
        #txt  = re.findall('(\d{9})\D', txt)[0]
    except:
        thr = cv2.adaptiveThreshold(gry, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 51, 4)
        txt = pytesseract.image_to_string(thr, config="digits")
        #txt  = re.findall('(\d{9})\D', txt)[0]

    return txt

# M5Pr5         191876320
# RWgrP         202131290
# 6pVH4         193832560
print(readNumber('M5Pr5.png'))

Tags: to代码图像imageretxtimgdata
1条回答
网友
1楼 · 发布于 2024-05-15 13:42:56

输入图像不需要任何预处理方法或配置。因为图像中没有瑕疵

import cv2
import pytesseract

img = cv2.imread("RWgrP.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
txt = pytesseract.image_to_string(gry)
print(txt)

结果:

202131290

我的PyteSeract版本是4.1.1

更新-1


第二个映像需要preprocessing

如果应用adaptive-thresholding

enter image description here

但输出也包含不需要的字符。因此,如果将配置设置为数字,结果将是:

193832560

更新-2


对于第三幅图像,您需要更改自适应方法,使用ADAPTIVE_THRESH_MEAN_C将导致:

191876320

其余的都一样

代码:

import cv2
import pytesseract

img = cv2.imread("6pVH4.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.adaptiveThreshold(gry, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 51, 4)
txt = pytesseract.image_to_string(thr, config="digits")
print(txt)
cv2.imshow("thr", thr)
cv2.waitKey(0)

相关问题 更多 >