मैं एक छवि से पाठ निकालने के लिए देख रहा हूं, मुझे जो आउटपुट मिल रहा है वह बहुत सटीक नहीं है। मुझे आश्चर्य है कि इस ओसीआर की सटीकता को बढ़ाने के लिए छवि को और अधिक संसाधित करने के लिए मैं कोई अतिरिक्त कदम उठा सकता हूं।
मैंने छवि को संसाधित करने और ओसीआर परिणामों में सुधार करने के कुछ अलग-अलग तरीकों पर ध्यान दिया है। छवि काफी छोटी है और मैं इसे थोड़ा ऊपर उड़ाने में सक्षम हूं, लेकिन कोई फायदा नहीं हुआ।
छवि हमेशा क्षैतिज रहेगी, संख्याओं के अलावा कोई अन्य पाठ मौजूद नहीं होगा। अधिकतम संख्या 55000 तक जाएगी।
विचाराधीन छवि का एक उदाहरण:
छवि प्रसंस्करण के बाद, मेरी छवि को एक्स और वाई अक्ष पर 4 तक बढ़ाया जाता है। और कुछ संतृप्ति हटा दी जाती है, हालांकि इससे सटीकता में बिल्कुल भी सुधार नहीं होता है।
image = self._process(scale=6, iterations=2)
text = pytesseract.image_to_string(image, config="--psm 7")
मेरी प्रक्रिया विधि निम्नलिखित कर रही है:
# Resize and desaturate.
image = cv2.resize(image, None, fx=scale, fy=scale,
interpolation=cv2.INTER_CUBIC)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Apply dilation and erosion.
kernel = np.ones((1, 1), np.uint8)
image = cv2.dilate(image, kernel, iterations=iterations)
image = cv2.erode(image, kernel, iterations=iterations)
return image
अपेक्षित: "10411"
वास्तविक मान भिन्न होता है, आमतौर पर एक अपरिचित स्ट्रिंग, या कुछ संख्याओं को पार्स किया जाता है लेकिन सटीकता दर प्रयोग करने योग्य होने के लिए बहुत कम है।
1 उत्तर
मेरे पास ओसीआर के साथ अनुभव नहीं है, लेकिन मुझे लगता है कि आप सही रास्ते पर हैं: छवि का आकार बढ़ाना ताकि एल्गोरिदम में काम करने के लिए और संख्याओं और पृष्ठभूमि के बीच अंतर को बढ़ाने के लिए और अधिक पिक्सेल हों।
मेरे द्वारा जोड़ी गई ट्रिक्स: थ्रेसहोल्डिंग छवि, जो एक मुखौटा बनाता है जहां केवल सफेद पिक्सेल रहते हैं। कुछ सफेद बूँदें थीं जो संख्याएँ नहीं थीं, इसलिए मैंने findContours।
नतीजा:
कोड:
import numpy as np
import cv2
# load image
image = cv2.imread('number.png')
# resize image
image = cv2.resize(image,None,fx=5, fy=5, interpolation = cv2.INTER_CUBIC)
# create grayscale
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# perform threshold
retr, mask = cv2.threshold(gray_image, 230, 255, cv2.THRESH_BINARY)
# find contours
ret, contours, hier = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# draw black over the contours smaller than 200 - remove unwanted blobs
for cnt in contours:
# print contoursize to detemine threshold
print(cv2.contourArea(cnt))
if cv2.contourArea(cnt) < 200:
cv2.drawContours(mask, [cnt], 0, (0), -1)
#show image
cv2.imshow("Result", mask)
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।