mohammad2928git commited on
Commit
77f8541
·
verified ·
1 Parent(s): d77ac7c

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +129 -0
app.py ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+ import gradio as gr
4
+
5
+ import os
6
+
7
+ # Let's pick the desired backend
8
+ # os.environ['USE_TF'] = '1'
9
+ os.environ['USE_TORCH'] = '1'
10
+ import matplotlib.pyplot as plt
11
+ from doctr.io import DocumentFile
12
+ from doctr.models import ocr_predictor
13
+
14
+ # util functions
15
+
16
+ def prepreocess(text):
17
+ """
18
+ convert to lowercase
19
+ removing . from words
20
+ convert string numbers to number
21
+ """
22
+ text = text.lower()
23
+ try:
24
+ text = float(text)
25
+ return text
26
+ except:
27
+ pass
28
+ text = text.replace('.', '')
29
+ return text
30
+
31
+ normal_values = {
32
+ 'wbc': {"min": 4000, "max": 11000, "minwarning": "هپاتیت و آرتریت", "maxwarning": "وجود عفونت"},
33
+ 'rbc': {"min": 4.5, "max": 6.1, "minwarning": "بی‌ نظمی در گلوبول های قرمز خون", "maxwarning": "بی‌ نظمی در گلوبول های قرمز خون"},
34
+ 'hb': {"min": 12.3, "max": 17.50, "minwarning": "هموگلوبین کم است", "maxwarning": "هموگلوبین زیاد است"},
35
+ 'hgb': {"min": 12.3, "max": 17.50, "minwarning": "هموگلوبین کم است", "maxwarning": "هموگلوبین زیاد است"},
36
+ 'hct': {"min": 36.00, "max": 45.00, "minwarning": "نسبت گلوبولهای قرمر به خون نامتناسب است", "maxwarning": "نسبت گلوبولهای قرمر به خون نامتناسب است "},
37
+ 'mch': {"min": 27, "max": 33, "minwarning": "احتمال سوء تغذیه", "maxwarning": "احتمال کم خونی"},
38
+ 'mchc': {"min": 27, "max": 33, "minwarning": "احتمال سوء تغذیه", "maxwarning": "احتمال کم خونی"},
39
+ 'mcv': {"min": 80, "max": 96, "minwarning": "نشانه ای از کم خونی یا سندرم خستگی مزمن", "maxwarning": "نشانه ای از کم خونی یا سندرم خستگی مزمن"},
40
+ 'mchc': {"min": 33.4, "max": 35.5, "minwarning": "مراجعه به پزشک", "maxwarning": "مراجعه به پزشک"},
41
+ 'plt': {"min": 150, "max": 450, "minwarning": "سطح تخمیر نرمال نیست", "maxwarning": "سطح تخمیر نرمال نیست"},
42
+ 'fbs': {"min": 70, "max": 100, "minwarning": "قند خون پایین", "maxwarning": "قند خون بالا"},
43
+ 'hbalc': {"min": 4000, "max": 11000, "minwarning": "", "maxwarning": ""},
44
+ 'urea': {"min": 4000, "max": 11000, "minwarning": "", "maxwarning": ""},
45
+ 'creatinine': {"min": 4000, "max": 11000, "minwarning": "", "maxwarning": ""},
46
+ 'cholesterol': {"min": 4000, "max": 11000, "minwarning": "", "maxwarning": ""},
47
+ 'triglycerides': {"min": 4000, "max": 11000, "minwarning": "", "maxwarning": ""},
48
+ 'hdl': {"min": 40, "max": 11000, "minwarning": "خطر ابتلا به بیماری قلبی عروقی", "maxwarning": ""},
49
+ 'ldl': {"min": 70, "max": 100, "minwarning": "خطر ابتلا به بیماری قلبی عروقی", "maxwarning": "خطر ابتلا به بیماری قلبی عروقی"},
50
+ "rdw": {"min": 4000, "max": 11000, "minwarning": "", "maxwarning": ""},
51
+ 'rcdw': {"min": 4000, "max": 11000, "minwarning": "", "maxwarning": ""},
52
+ 'hgb': {"min": 4000, "max": 11000, "minwarning": "", "maxwarning": ""},
53
+ 'bp': {"min": 80, "max": 120, "minwarning": "فشار خون پایین", "maxwarning": "فشار خون بالا"},
54
+ 'bg': {"min": 70, "max": 150, "minwarning": "قند خون پایین", "maxwarning": "قند خون بالا"},
55
+ 'esr': {"min": 0, "max": 20, "minwarning": "امکان عفونت و یا التهاب", "maxwarning": " امکان عفونت و یا التهاب "},
56
+ 'crp': {"min": 0, "max": 1000, "minwarning": "امکان عفونت و یا التهاب", "maxwarning": " امکان عفونت و یا التهاب "},
57
+
58
+ }
59
+
60
+
61
+
62
+ predictor = ocr_predictor(pretrained=True)
63
+
64
+
65
+ def proceed(image):
66
+
67
+ doc = DocumentFile.from_images(image) #reading input image
68
+ result = predictor(doc) # extract words
69
+ json_export = result.export() # convert to json
70
+ out_words = [[prepreocess(w['value']) for w in line['words'] ] for line in json_export['pages'][0]['blocks'][0]['lines']] # extracting words
71
+ final_words = []
72
+ for item in out_words:
73
+ final_words += item
74
+
75
+
76
+ wanted = {
77
+ 'wbc': 'nan',
78
+ 'rbc': 'nan',
79
+ 'hb': 'nan',
80
+ 'hgb': 'nan',
81
+ 'hct': 'nan',
82
+ 'mcv': 'nan',
83
+ 'mch': 'nan',
84
+ 'mchc': 'nan',
85
+ 'mchc': 'nan',
86
+ 'plt': 'nan',
87
+ 'fbs': 'nan',
88
+ 'hbalc': 'nan',
89
+ 'urea': 'nan',
90
+ 'creatinine': 'nan',
91
+ 'cholesterol': 'nan',
92
+ 'triglycerides': 'nan',
93
+ 'hdl': 'nan',
94
+ 'ldl': 'nan',
95
+ "rdw": 'nan',
96
+ 'rcdw': 'nan',
97
+ 'hgb': 'nan',
98
+ 'bp': 'nan',
99
+ 'esr': 'nan',
100
+ 'crp': 'nan',
101
+ }
102
+
103
+ # extracting value per each wanted keyword
104
+ counter = 0
105
+ while counter < len(final_words):
106
+ if wanted.get(final_words[counter], 0)== 'nan':
107
+ if type(final_words[counter+1]) == float:
108
+ wanted[final_words[counter]] = final_words[counter+1]
109
+ counter += 1
110
+ if type(final_words[counter+2]) == float:
111
+ wanted[final_words[counter]] = final_words[counter+2]
112
+ counter += 2
113
+ counter += 1
114
+
115
+ # print(f"out is {out_gen}")
116
+ # checking for normal values
117
+ printed_result = []
118
+ for k,v in wanted.items():
119
+ if v == 'nan':
120
+ continue
121
+ normal_value = normal_values.get(k, {})
122
+ if v < normal_value.get('min', -1000):
123
+ printed_result.append(normal_value.get('minwarning', ''))
124
+ if v > normal_value.get('max', 100000):
125
+ printed_result.append(normal_value.get('maxwarning', ''))
126
+ return '\n'.join(printed_result)
127
+
128
+ demo = gr.Interface(fn=greet, inputs=gr.Image(interactive=True), outputs="text")
129
+ demo.launch(debug=True, share=True)