आसानी से पठनीय पाठ को टेसेरैक्ट द्वारा मान्यता प्राप्त नहीं है

Aug 16 2020

मैंने कई छवियों में पाठ के चारों ओर बाउंडिंग बॉक्स को पहचानने और आकर्षित करने के लिए EAST (कुशल और सटीक दृश्य पाठ डिटेक्टर) के निम्नलिखित पायोरच कार्यान्वयन का उपयोग किया है !

हालाँकि, OCR का अगला चरण जिसे मैं pytesseractइन चित्रों को पाठ रूप निकालने और उन्हें तार में परिवर्तित करने के लिए प्रयास कर रहा हूँ - बुरी तरह से विफल हो रहा है। के सभी संभव विन्यास का उपयोग करते हुए --oemऔर --psm, मैं प्राप्त करने में असमर्थ हूँ pytesseractक्या बहुत स्पष्ट पाठ, उदाहरण के लिए प्रतीत होता है पता लगाने के लिए:

मान्यता प्राप्त पाठ छवियों के नीचे है। भले ही मैंने कंट्रास्ट एन्हांसमेंट लागू किया हो, और मैंने इसे पतला करने और मिटाने की कोशिश की है, लेकिन मुझे टेक्स्ट को पहचानने के लिए टेसरैक्ट नहीं मिल सकता है। यह कई छवियों का सिर्फ एक उदाहरण है जहां पाठ और भी बड़ा और स्पष्ट है। परिवर्तनों, कॉन्फ़िगर या अन्य पुस्तकालयों पर कोई सुझाव मददगार होगा!

अद्यतन: गाऊसी धुंधला + ओट्सो थ्रेसहोल्ड की कोशिश करने के बाद, मैं सफेद पृष्ठभूमि पर काला पाठ प्राप्त करने में सक्षम हूं (जाहिरा तौर पर जो कि 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

इन अद्यतन डेटा फ़ाइलों का उपयोग करें ।

यह मार्गदर्शिका बॉक्स प्रदर्शन से बाहर की आलोचना करती है (और शायद सटीकता भी प्रभावित हो सकती है):

प्रशिक्षित डेटा। लेखन के क्षण में, 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क्योंकि यहाँ यह कहना है कि इसका मतलब है कि "एक ही पाठ लाइन के रूप में छवि इलाज" और मैंने सोचा था कि अपने परीक्षण छवियों के लिए अर्थपूर्ण होनी चाहिए।

में इस गूगल Colab आप परीक्षण मैंने किया था देख सकते हैं।