Tesseract Output not correct in hindi text.

68 views
Skip to first unread message

lalit joshi

unread,
Jun 26, 2024, 2:42:54тАпAM6/26/24
to tesseract-ocr
I am trying to build an app where I have to extract some data from pdf containing election roll data for the indian constituencies. I have attached a sample PDF. Below is the code I am running:-

data = []
current_page = np.array(pdf2image.convert_from_path('/home/spxlpt087/Downloads/New folder/2024-FC-EROLLGEN-S07-49-FinalRoll-Revision2-HIN-61-WI.pdf',
┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а first_page=3,
┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а last_page=3,
┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а dpi=300)[0])
sharpened_image = cv2.filter2D(current_page, -1, kernel_sharpening)
kernel = np.ones((1, 1), np.uint8)
img_dilation = cv2.dilate(sharpened_image, kernel, iterations=5)
gray_img = cv2.cvtColor(img_dilation, cv2.COLOR_BGR2GRAY)
thr = cv2.threshold(gray_img, 128, 255, cv2.THRESH_BINARY_INV)[1]
cnts = cv2.findContours(thr, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
contours_new = ()
cnts_tables = [cnt for cnt in cnts if cv2.contourArea(cnt) > 50000]
rects = sorted([cv2.boundingRect(cnt) for cnt in cnts_tables], key=lambda r: (r[1], r[0]))
for i_r, (x, y, w, h) in enumerate(rects, start=1):
┬а ┬а cell = current_page[y+1:y+h-1, x+1:x+w-1]
┬а ┬а text = pytesseract.image_to_string(
┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а cell,
┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а config='--oem 3 --psm 11', ┬а#--oem 1 --psm 3
┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а lang='Devanagari+eng',
┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а ┬а nice=1)
┬а ┬а text = text.replace('\f', '')
┬а ┬а text = text.replace('\n\n', '')
┬а ┬а print(text)
┬а ┬а data.append(text)


The data I am getting :-┬а
SOI0798389iрдирд╛рдо: рдЙрдШрд╛рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдордГ рдЬрдЧрджреАрд╢ рдЪрдВрджреНрд░~рдордХрд╛рди рдирдВ. : 001рдЖрдпреБ : 33 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ $011000827[|рдирд╛рдо : рд╕реБрд░реЗрд╢ рдХреБрдорд╛рд░рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рд░рд╛рдЬрдмреАрд░~рдордХрд╛рди рдирдВ, : 01рдЖрдпреБ : 21 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ MXMI5749203рдирд╛рдо : рдЕрд╢реЛрдХ рдХреБрдорд╛рд░рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рд░реБрдкрдЪрдиреНрджрдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдордХрд╛рди рдирдВ, : 79рдЖрдпреБ : 39 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ $011142009рдирд╛рдо : рдкреНрд░рдХрд╛рд╢ рдХреМрд░рдкрддрд┐ рдХрд╛ рдирд╛рдордГ рд░рд╛рдо рд▓реБрднрд╛рдпрд╛рдордХрд╛рди рдирдВ. : 10~рдЖрдпреБ : 49 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ [ 3]$011145184рдирд╛рдо : рдореЛрдирд┐рдХрд╛рдкрддрд┐ рдХрд╛ рдирд╛рдордГ рдзрд░реНрдорд╡реАрд░рдордХрд╛рди рдирдВ. : 11рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдЖрдпреБ : 27 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ $011146356рдирд╛рдо : рдЕрд░рд╕рд┐рдпрд╛рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рд░рд╛рдЬрдХреБрдорд╛рд░рдордХрд╛рди рдирдВ. : 11рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдз рд╣реИрдЖрдпреБ : 18 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓ SOI07983637рдирд╛рдо : рд╕реБрдиреАрд▓рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдордГ рд░рд╛рдорджрд┐рдпрд╛~рдордХрд╛рди рдиреС. : 17рдЖрдпреБ : 24 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ $011146208[9рдирд╛рдо : рд╕реБрдордирдкрддрд┐ рдХрд╛ рдирд╛рдордГ рд╕реБрднрд╛рд╖рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдордХрд╛рди рдиреС. : 18рдЖрдпреБ : 31 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ $011146133|рдирд╛рдо : рд╕реБрднрд╛рд╖рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рд░рд╛рдЬ рдХреБрдорд╛рд░~рдордХрд╛рди рдиреС. : 18рдЖрдпреБ : 33 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ | 10] 0$011141548рдирд╛рдо : рд╡реАрд░реЗрдВрджреНрд░рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рд░рд╛рдордлрд▓рдордХрд╛рди рдирдВ. : 19~рдЖрдпреБ : 28 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ [dl 1$011146257рдирд╛рдо : рд░реЛрд╣рд┐рддрдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рджреАрдкрдХрдордХрд╛рди рдирдВ. : 19рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдВрдЖрдпреБ : 20 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ | 12$010958629рдирд╛рдо : рд╕реБрдордирдкрддрд┐ рдХрд╛ рдирд╛рдо: рд░рд╛рдорджрд┐рдпрд╛рдордХрд╛рди рдирдВ. : 34рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдЖрдпреБ : 33 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SO1092028013 |рдирд╛рдо : рд╡рдВрд╢реАрдХрд╛рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдордГ рдЬрд┐рддреЗрдВрджреНрд░~рдордХрд╛рди рдиреС. : 35рдЖрдпреБ : 22 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ $011145994рдирд╛рдо : рд╡реАрд░реЗрдиреНрджреНрд░рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рд▓рдХреНрд╖реНрдордг рджрд╛рд╕~рдордХрд╛рди рдиреС. : 37рдЖрдпреБ : 29 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ | 15$011141563рдирд╛рдо : рд╕реЛрдиреА рдХреБрдорд╛рд░реАрдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рд▓рдХреНрд╖реНрдордгрдордХрд╛рди рдиреС. : 37рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдЖрдпреБ : 21 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ $011143296[ 1a]рдирд╛рдо : рд╕рд╡рд┐рддрд╛рдкрддрд┐ рдХрд╛ рдирд╛рдордГ рдЬрдпрдмреАрд░рдордХрд╛рди рдирдВ. : 45~рдЖрдпреБ : 39 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ | 7]$011152537рдирд╛рдо : рдЬреНрдпреЛрддрд┐рдкрддрд┐ рдХрд╛ рдирд╛рдордГ рдкреНрд░рд╡реАрдирдордХрд╛рди рдирдВ. : 45~рдЖрдпреБ : 27 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ $011164177a)рдирд╛рдо : рд╕рдВрдЬрдпрдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рд░рд╛рдорджрд┐рдпрд╛рдордХрд╛рди рдирдВ. : 50рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдЖрдпреБ : 22 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ 19 |$011152560рдирд╛рдо: рдореАрдиреВрдкрддрд┐ рдХрд╛ рдирд╛рдордГ рд╕реЛрдиреВрдордХрд╛рди рдирдВ. : 52~рдЖрдпреБ : 24 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ $010562264рдирд╛рдо : рд╕реВрд░рдЬрдорд▓рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рд░рд╛рдо рд╕рд░реВрдкрдордХрд╛рди рдирдВ. : 54~тАЬрдЖрдпреБ : 69 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ MXM1751585[ 21рдирд╛рдо : рдХрд╡рд┐рддрд╛рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рдкреНрд░рд╡реАрди рдХреБрдорд╛рд░рдордХрд╛рди рдирдВ. : 54/1рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдЖрдпреБ : 37 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ MXM1010024[ 2]рдирд╛рдо: рд░рд╛рдорд╛рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдордГ рдореЗрд╣рд░ рдЪрдиреНрджрдордХрд╛рди рдирдВ. : 55~рдЖрдпреБ : 67 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ MXM1009422| 23]рдирд╛рдо : рдореБрдиреАрд╢рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдордГ рд░рд╛рдорд╛рдордХрд╛рди рдирдВ. : 55~рдЖрдпреБ : 40 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ Ll$010959718рдирд╛рдо : рдкрд░рд╡реАрдирдкрддрд┐ рдХрд╛ рдирд╛рдордГ рд╕рддреАрд╢ рдХреБрдорд╛рд░рдордХрд╛рди рдирдВ, : 55рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдЖрдпреБ : 32 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ 25]S010998013рдирд╛рдо : рд╕рддреАрд╢ рдХреБрдорд╛рд░рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рд░рд╛рдордордХрд╛рди рдирдВ. : 55~рдЖрдпреБ : 31 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ SOI0998054[ 2реи]рдирд╛рдо : рдХреБрд╕реБрдо рджреЗрд╡реАрдкрддрд┐ рдХрд╛ рдирд╛рдордГ рдореБрдиреАрд╢рдордХрд╛рди рдирдВ. : 55рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдЖрдпреБ : 24 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ тАФтАФ╦Ж╦Ж#227$011240217рдирд╛рдо : рд░рд╛рдЬрдХреБрдорд╛рд░рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдо: рдЪреСрджрдЧреАрдордХрд╛рди рдирдВ. : 56рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдЖрдпреБ : 73 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ HR/09/71/004262528]рдирд╛рдо : рдЬреАрд╡рдиреАрдкрддрд┐ рдХрд╛ рдирд╛рдордГ рд░рд╛рдЬ рдХреБрдорд╛рд░рдордХрд╛рди рдирдВ. : 56~рдЖрдпреБ : 69 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ HR/09/71/0042599[ 2] 29 |рдирд╛рдо: рдИрд╢реНрд╡рд░рдкрд┐рддрд╛ рдХрд╛ рдирд╛рдордГ рдорд╛рдВрдЧреЗ рд░рд╛рдо~рдордХрд╛рди рдирдВ. : 56рдЖрдпреБ : 65 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ | 30HR/09/71/0042600рдирд╛рдо : рдХрд┐рддрд╛рдмреЛрдкрддрд┐ рдХрд╛ рдирд╛рдордГ рдИрд╢реНрд╡рд░рдордХрд╛рди рдирдВ. : 56рдлреЛрдЯреЛ рдЙрдкрд▓рдмреНрдзрдЖрдпреБ : 64 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛
So, I am abe to extract data from this text:-
SOI0798389 рдирд╛рдо: рдЙрдШрд╛ рдЖрдпреБ : 33 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SO000827 рдирд╛рдо : рд╕реБрд░реЗрд╢ рдХреБрдорд╛рд░ рдЖрдпреБ : 21 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ MXM1574920 рдирд╛рдо : рдЕрд╢реЛрдХ рдХреБрдорд╛рд░ рдЖрдпреБ : 39 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ OoN142009 рдирд╛рдо : рдкреНрд░рдХрд╛рд╢ рдХреМрд░ рдЖрдпреБ : 49 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SOo45184 рдирд╛рдо : рдореЛрдирд┐рдХрд╛ рдЖрдпреБ : 27 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ OIN46356 рдирд╛рдо : рдЕрд░рд╕реНрд░рд┐рдпрд╛ рдЖрдпреБ : 18 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SOI0798363 рдирд╛рдо : рд╕реБрдиреАрд▓ рдЖрдпреБ : 24 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ OIN46208 рдирд╛рдо : рд╕реБрдорди рдЖрдпреБ : 31 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SO46133 рдирд╛рдо: рд╕реБрднрд╛рд╖ рдЖрдпреБ : 33 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ SON41548 рдирд╛рдо : рд╡реАрд░реЗрдВрджреНрд░ рдЖрдпреБ : 28 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ SO46257 рдирд╛рдо : рд░реЛрд╣рд┐рдд рдЖрдпреБ : 20 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ SOI0958629 рдирд╛рдо : рд╕реБрдорди рдЖрдпреБ : 33 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SOI0 рдирд╛рдо : рд╡рдВрд╢реАрдХрд╛ рдЖрдпреБ : 22 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SON41563 рдирд╛рдо : рд╕реЛрдиреА рдХреБрдорд╛рд░реА рдЖрдпреБ : 21 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SO143296 рдирд╛рдо : рд╕рд╡рд┐рддрд╛ рдЖрдпреБ : 39 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SOI1152537 рдирд╛рдо : рдЬреНрдпреЛрддрд┐ рдЖрдпреБ : 27 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SON64177 рдирд╛рдо : рд╕рдВрдЬрдп рдЖрдпреБ : 22 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ INS2560 рдирд╛рдо: рдореАрдиреВ рдЖрдпреБ : 24 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SO0562264 рдирд╛рдо : рд╕реВрд░рдЬрдорд▓ рдЖрдпреБ : 69 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ MXM1751585 рдирд╛рдо : рдХрд╡рд┐рддрд╛ рдЖрдпреБ : 37 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ MXM1010024 рдирд╛рдо : рд░рд╛рдорд╛ рдЖрдпреБ : 67 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ MXM1009422 рдирд╛рдо : рдореБрдиреАрд╢ рдЖрдпреБ : 40 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ SOI0959718 рдирд╛рдо : рдкрд░рд╡реАрди рдЖрдпреБ : 32 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SOI0998013 рдирд╛рдо : рд╕рддреАрд╢ рдХреБрдорд╛рд░ рдЖрдпреБ : 31 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ SOI0998054 рдирд╛рдо : рдХреБрд╕реБрдо рджреЗрд╡реА рдЖрдпреБ : 24 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ SOI240217 рдирд╛рдо: рд░рд╛рдЬрдХреБрдорд╛рд░ рдЖрдпреБ : 73 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ HR/ рдирд╛рдо : рдЬреАрд╡рдиреА рдЖрдпреБ : 69 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛ HR/ рдирд╛рдо: рдИрд╢реНрд╡рд░ рдЖрдпреБ : 65 рд▓рд┐рдВрдЧ : рдкреБрд░реБрд╖ HR/ рдирд╛рдо : рдХрд┐рддрд╛рдмреЛ рдЖрдпреБ : 64 рд▓рд┐рдВрдЧ : рдорд╣рд┐рд▓рд╛

but I am having problem with the voter number as tesseract sometime considering the character as %. Also, I have 10000+ pdf in same format can anyone how can I fast this process as this is taking too much time approx 10 minutes for 1 pdf.
Thanks!
2024-FC-EROLLGEN-S07-49-FinalRoll-Revision2-HIN-61-WI.pdf

Ger Hobbelt

unread,
Jun 26, 2024, 4:21:48тАпPM6/26/24
to tesser...@googlegroups.com
If you want more speed, give tesseract less to work on. Your scenario sounds like you will have a large number of PDFs, all containing the same (scanned) form. From the look of this sample, it seems page alignment, etc. has already been taken care of, so that would allow us to assume that all those forms (scans), would we stack them all on top of one another, all look the same, i.e. the data you are looking for is to be found at predetermined fixed rectangle coordinates within the page.
Create a mask that erases everything else to white, so only the fields of interest remain and feed that to tesseract. Output TSV or HOCR to get coordinates alongside the OCRed text and you can reconstruct the fields' content easily. At least that's the assumption here & now.

The key is: image preprocessing
In your case, there's a lot that can be done in that preprocessing stage so that tesseract has only a few text areas to process in an otherwise white page.

Reference material: read it all, as a lot depends on context and you are the one who can determine whether each item is applicable / may have an effect in your particular scenario.

- image scaling can have a significant impact; see┬аhttps://groups.google.com/g/tesseract-ocr/c/Wdh_JJwnw94/m/24JHDYQbBQAJ



Met vriendelijke groeten / Best regards,

Ger Hobbelt

--------------------------------------------------
web:┬а ┬а http://www.hobbelt.com/
┬а ┬а ┬а ┬а http://www.hebbut.net/
mail:┬а┬а g...@hobbelt.com
mobile: +31-6-11 120 978
--------------------------------------------------


--
You received this message because you are subscribed to the Google Groups "tesseract-ocr" group.
To unsubscribe from this group and stop receiving emails from it, send an email to tesseract-oc...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tesseract-ocr/3f002c65-517c-4a32-8d52-cde41a69485an%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages