Spaces:
Sleeping
Sleeping
| ## OCR Gradio ## | |
| import numpy as np | |
| import gradio as gr | |
| import pytesseract | |
| import re | |
| import cv2 | |
| def bmd_reader(input_img): | |
| pytesseract.pytesseract.tesseract_cmd = 'tesseract' | |
| image = cv2.resize(input_img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) | |
| # Convert the image to grayscale | |
| gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| # Threshold the image to remove noise and improve OCR accuracy | |
| threshold = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1] | |
| # Set the configuration parameters for pytesseract | |
| config = ('-l eng --oem 1 --psm 6') | |
| # Run pytesseract on the thresholded image | |
| text = pytesseract.image_to_string(threshold, config=config) | |
| matches = re.finditer(r'\b[Nn]ormal\b|\b[Oo]steopenia\b|\b[Oo]steoporosis\b|\b[Ll]ow [Bb]one\b', text) | |
| hipmatches = re.finditer(r'\b[Hh]ip\b|\b[Ff]emur\b|\b[Nn]eck\b|\b[Tt]roch\b',text) | |
| spinematches = re.finditer(r'\b[Ss]pine\b|\b[Ll]umber\b|\bL1\b|\bL2\b|\bL3\b',text) | |
| wristmatches = re.finditer(r'\b[Ww]rist\b|\b[Ff]orearm\b|\b[Ra]adius\b',text) | |
| # Iterate over the matches and print the location of each match | |
| for match in matches: | |
| #print(f"Match '{match.group()}' found at ({match.start()}, {match.end()})") | |
| diag = match.group() | |
| # change low bone to osteopenia | |
| if diag == "Low Bone" or diag == "low bone" or diag == "Low bone" or diag == "low Bone": | |
| diag = "Osteopenia" | |
| if not diag: | |
| diag = "Diagnosis not found." | |
| #return diag | |
| h = 0 | |
| for match in hipmatches: | |
| hip = match.group() | |
| h = h + 1 | |
| s = 0 | |
| for match in spinematches: | |
| spine = match.group() | |
| s = s + 1 | |
| f = 0 | |
| for match in wristmatches: | |
| wrist = match.group() | |
| f = f + 1 | |
| #print(h, s, f) | |
| if h == 0 and s == 0 and f == 0: | |
| location = "หาตำแหน่งจากรูปภาพได้ไม่ชัดเจน" | |
| elif h > 0: | |
| location = "ผลการตรวจมวลกระดูกของบริเวณสะโพก" | |
| elif s > 0: | |
| location = "ผลการตรวจมวลกระดูกของบริเวณกระดูกสันหลัง" | |
| elif f > 0: | |
| location = "ผลการตรวจมวลกระดูกของบริเวณกระดูกข้อมือ" | |
| return location, diag | |
| #demo = gr.Interface(sepia, gr.Image(),"text") | |
| demo = gr.Interface( | |
| fn = bmd_reader, | |
| inputs = "image", | |
| outputs = [gr.Textbox( | |
| label="บริเวณตำแหน่งที่ตรวจ", | |
| value="กระดูกสันหลัง หรือกระดูกสะโพก", | |
| ) , | |
| gr.Textbox( | |
| label="ผลอ่านจากการประมวลผลตัวอักษร", | |
| value="ผลวินิจฉัย", | |
| ) ], | |
| ) | |
| demo.launch() | |