emre mertcobanov commited on
Commit
f2619d1
0 Parent(s):

Duplicate from mertcobanov/deprem-ocr-2

Browse files

Co-authored-by: Mert Cobanov <mertcobanov@users.noreply.huggingface.co>

Files changed (4) hide show
  1. .gitattributes +34 -0
  2. README.md +13 -0
  3. app.py +168 -0
  4. requirements.txt +4 -0
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Deprem Ocr 2
3
+ emoji: 👀
4
+ colorFrom: green
5
+ colorTo: blue
6
+ sdk: gradio
7
+ sdk_version: 3.17.0
8
+ app_file: app.py
9
+ pinned: false
10
+ duplicated_from: mertcobanov/deprem-ocr-2
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from easyocr import Reader
3
+ from PIL import Image
4
+ import io
5
+ import json
6
+ import csv
7
+ import openai
8
+ import ast
9
+ import os
10
+
11
+
12
+ openai.api_key = os.getenv('API_KEY')
13
+ reader = Reader(["tr"])
14
+
15
+ def get_parsed_address(input_img):
16
+
17
+ address_full_text = get_text(input_img)
18
+ return openai_response(address_full_text)
19
+
20
+
21
+ def get_text(input_img):
22
+ result = reader.readtext(input_img, detail=0)
23
+ return " ".join(result)
24
+
25
+
26
+ def save_csv(mahalle, il, sokak, apartman):
27
+ adres_full = [mahalle, il, sokak, apartman]
28
+
29
+ with open("adress_book.csv", "a", encoding="utf-8") as f:
30
+ write = csv.writer(f)
31
+ write.writerow(adres_full)
32
+ return adres_full
33
+
34
+
35
+ def get_json(mahalle, il, sokak, apartman):
36
+ adres = {"mahalle": mahalle, "il": il, "sokak": sokak, "apartman": apartman}
37
+ dump = json.dumps(adres, indent=4, ensure_ascii=False)
38
+ return dump
39
+
40
+
41
+ def text_dict_il(input):
42
+ eval_result = ast.literal_eval(input)["il"]
43
+
44
+ return eval_result
45
+
46
+
47
+ def text_dict_mahalle(input):
48
+ eval_result = ast.literal_eval(input)["mahalle"]
49
+
50
+ return eval_result
51
+
52
+
53
+ def text_dict_ilce(input):
54
+ eval_result = ast.literal_eval(input)["ilçe"]
55
+
56
+ return eval_result
57
+
58
+
59
+ def text_dict_sokak(input):
60
+ eval_result = ast.literal_eval(input)["sokak"]
61
+
62
+ return eval_result
63
+
64
+
65
+ def text_dict_no(input):
66
+ eval_result = ast.literal_eval(input)["no"]
67
+
68
+ return eval_result
69
+
70
+
71
+ def text_dict_tel(input):
72
+ eval_result = ast.literal_eval(input)["tel"]
73
+
74
+ return eval_result
75
+
76
+
77
+ def text_dict_isim(input):
78
+ eval_result = ast.literal_eval(input)["isim_soyisim"]
79
+ return eval_result
80
+
81
+
82
+ def text_dict_adres(input):
83
+ eval_result = ast.literal_eval(input)["adres"]
84
+
85
+ return eval_result
86
+
87
+
88
+ def openai_response(ocr_input):
89
+ prompt = f"""Tabular Data Extraction
90
+ You are a highly intelligent and accurate tabular data extractor from plain text input and especially from emergency text that carries address information, your inputs can be text of arbitrary size, but the output should be in [{{'tabular': {{'entity_type': 'entity'}} }}] JSON format
91
+
92
+ Force it to only extract keys that are shared as an example in the examples section, if a key value is not found in the text input, then it should be ignored and should be returned as an empty string
93
+
94
+ Have only il, ilçe, mahalle, sokak, no, tel, isim_soyisim, adres
95
+
96
+ Examples:
97
+
98
+
99
+ Input: Deprem sırasında evimizde yer alan adresimiz: İstanbul, Beşiktaş, Yıldız Mahallesi, Cumhuriyet Caddesi No: 35, cep telefonu numaram 5551231256, adim Ahmet Yilmaz
100
+ Output: [{{'Tabular': '{{'il': 'İstanbul', 'ilçe': 'Beşiktaş', 'mahalle': 'Yıldız Mahallesi', 'sokak': 'Cumhuriyet Caddesi', 'no': 35, 'tel': 5551231256, 'isim_soyisim': 'Ahmet Yılmaz', 'adres': 'İstanbul, Beşiktaş, Yıldız Mahallesi, Cumhuriyet Caddesi No: 35'}}' }}]
101
+
102
+
103
+ Input: {ocr_input}
104
+ Output:
105
+
106
+ """
107
+
108
+ response = openai.Completion.create(
109
+ model="text-davinci-003",
110
+ prompt=prompt,
111
+ temperature=0,
112
+ max_tokens=300,
113
+ top_p=1,
114
+ frequency_penalty=0.0,
115
+ presence_penalty=0.0,
116
+ stop=["\n"],
117
+ )
118
+ resp = response["choices"][0]["text"]
119
+ resp = eval(resp.replace("'{", "{").replace("}'", "}"))
120
+ resp = resp[0]["Tabular"]
121
+ return resp
122
+
123
+
124
+ with gr.Blocks() as demo:
125
+ gr.Markdown("""## Enkaz Bildirme""")
126
+ gr.Markdown("Bu uygulamada ekran görüntüsü sürükleyip bırakarak AFAD'a enkaz bildirimi yapabilirsiniz.")
127
+ with gr.Row():
128
+ img_area = gr.Image(label="Ekran Görüntüsü")
129
+ ocr_result = gr.Textbox(label="Metin")
130
+ open_api_text = gr.Textbox(label="Tam Adres")
131
+ submit_button = gr.Button(label="Görüntüyü Yükle")
132
+ with gr.Column():
133
+ with gr.Row():
134
+ il = gr.Textbox(label="İl")
135
+ ilce = gr.Textbox(label="İlçe")
136
+ with gr.Row():
137
+ mahalle = gr.Textbox(label="Mahalle")
138
+ sokak = gr.Textbox(label="Sokak/Cadde/Bulvar")
139
+ with gr.Row():
140
+ no = gr.Textbox(label="No")
141
+ tel = gr.Textbox(label="Telefon")
142
+ with gr.Row():
143
+ isim_soyisim = gr.Textbox(label="İsim Soyisim")
144
+ adres = gr.Textbox(label="Adres")
145
+
146
+ submit_button.click(get_text, inputs = img_area, outputs = open_api_text, api_name="upload_image")
147
+
148
+ ocr_result.change(openai_response, ocr_result, open_api_text, api_name="upload-text")
149
+
150
+ open_api_text.change(text_dict_il, [open_api_text], il)
151
+ open_api_text.change(text_dict_ilce, [open_api_text], ilce)
152
+ open_api_text.change(text_dict_mahalle, [open_api_text], mahalle)
153
+ open_api_text.change(text_dict_sokak, [open_api_text], sokak)
154
+ open_api_text.change(text_dict_no, [open_api_text], no)
155
+ open_api_text.change(text_dict_adres, [open_api_text], adres)
156
+ open_api_text.change(text_dict_tel, [open_api_text], tel)
157
+ open_api_text.change(text_dict_isim, [open_api_text], isim_soyisim)
158
+
159
+ # json_out = gr.Textbox()
160
+ # csv_out = gr.Textbox()
161
+
162
+ # adres_submit = gr.Button()
163
+ # adres_submit.click(get_json, [mahalle, il, sokak, apartman], json_out)
164
+ # adres_submit.click(save_csv, [mahalle, il, sokak, apartman], csv_out)
165
+
166
+
167
+ if __name__ == "__main__":
168
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ openai
2
+ Pillow
3
+ easyocr
4
+ gradio