tesseract ไม่รู้จักข้อความที่อ่านได้ง่าย

Aug 16 2020

ฉันได้ใช้การใช้งานPyTorchต่อไปนี้ของEAST (เครื่องตรวจจับข้อความฉากที่มีประสิทธิภาพและแม่นยำ) เพื่อระบุและวาดกรอบล้อมรอบข้อความในรูปภาพจำนวนมากและมันก็ใช้ได้ดี

อย่างไรก็ตามขั้นตอนต่อไปของ OCR ที่ฉันกำลังพยายามpytesseractเพื่อดึงข้อความจากรูปภาพเหล่านี้และแปลงเป็นสตริง - ล้มเหลวอย่างมาก เมื่อใช้การกำหนดค่าที่เป็นไปได้ทั้งหมดของ--oemและ--psmฉันไม่สามารถpytesseractตรวจจับสิ่งที่ดูเหมือนจะเป็นข้อความที่ชัดเจนได้เช่น:

ข้อความที่จำได้จะอยู่ด้านล่างของรูปภาพ แม้ว่าฉันจะใช้การเพิ่มความเปรียบต่างและพยายามขยายและกัดเซาะ แต่ฉันก็ไม่สามารถรับ tesseract เพื่อจดจำข้อความได้ นี่เป็นเพียงตัวอย่างหนึ่งของรูปภาพจำนวนมากที่ข้อความมีขนาดใหญ่และชัดเจนยิ่งขึ้น ข้อเสนอแนะใด ๆ เกี่ยวกับการเปลี่ยนแปลงการกำหนดค่าหรือไลบรารีอื่น ๆ จะเป็นประโยชน์!

อัปเดต: หลังจากลองใช้เกณฑ์ Gaussian เบลอ + Otso แล้วฉันสามารถรับข้อความสีดำบนพื้นหลังสีขาวได้ (เห็นได้ชัดว่าเหมาะสำหรับ pytesseract) และเพิ่มภาษาสเปนด้วย แต่ก็ยังไม่สามารถอ่านข้อความธรรมดาได้เช่น:

อ่านว่าพูดพล่อยๆ

รูปภาพข้อความที่ประมวลผลคือ

และ
และรหัสที่ฉันใช้:


img_path = './images/fesa.jpg'
img = Image.open(img_path)
boxes = detect(img, model, device)
origbw = cv2.imread(img_path, 0)

for box in boxes:
    
    box = box[:-1]
    poly = [(box[0], box[1]),(box[2], box[3]),(box[4], box[5]),(box[6], box[7])]
    x = []
    y = []

    for coord in poly:
        x.append(coord[0])
        y.append(coord[1])

    startX = int(min(x))
    startY = int(min(y))
    endX = int(max(x))
    endY = int(max(y))


    #use pre-defined bounding boxes produced by EAST to crop the original image 
    
    cropped_image = origbw[startY:endY, startX:endX]

    #contrast enhancement 

    clahe = cv2.createCLAHE(clipLimit=4.0, tileGridSize=(8,8))
    res = clahe.apply(cropped_image)

    text = pytesseract.image_to_string(res, config = "-psm 12")
    
    plt.imshow(res)
    plt.show()
    print(text)

คำตอบ

1 HernánAlarcón Aug 16 2020 at 11:48

ใช้ไฟล์ข้อมูลที่อัปเดตเหล่านี้

คู่มือนี้วิจารณ์ประสิทธิภาพนอกกรอบ (และความแม่นยำอาจได้รับผลกระทบด้วย):

ข้อมูลการฝึกอบรม ในขณะที่เขียนแพ็คเกจ tesseract-ocr-eng APT สำหรับ Ubuntu 18.10 มีประสิทธิภาพนอกกรอบแย่มากซึ่งอาจเป็นเพราะข้อมูลการฝึกอบรมเสียหาย

จากการทดสอบต่อไปนี้ที่ฉันทำการใช้ไฟล์ข้อมูลที่อัปเดตดูเหมือนจะให้ผลลัพธ์ที่ดีกว่า นี่คือรหัสที่ฉันใช้:

import pytesseract
from PIL import Image
print(pytesseract.image_to_string(Image.open('farmacias.jpg'), lang='spa', config='--tessdata-dir ./tessdata --psm 7'))

ฉันดาวน์โหลดspa.traineddata (ภาพตัวอย่างของคุณมีคำภาษาสเปนใช่มั้ย?) ./tessdata/spa.traineddataไป และผลลัพธ์คือ:

ARMACIAS


และสำหรับภาพที่สอง:

PECIALIZADA:


ฉันใช้--psm 7เพราะในที่นี้บอกว่า "ถือว่ารูปภาพเป็นบรรทัดข้อความเดียว" และฉันคิดว่าน่าจะเหมาะสมกับภาพทดสอบของคุณ

ในGoogle Colab นี้คุณจะเห็นการทดสอบที่ฉันทำ