abdullah-1111 commited on
Commit
358a08a
·
verified ·
1 Parent(s): 7c5647d

Update json-CR3.py

Browse files
Files changed (1) hide show
  1. json-CR3.py +169 -165
json-CR3.py CHANGED
@@ -1,165 +1,169 @@
1
- import base64
2
- import json
3
- import re
4
- import requests
5
- import os
6
- import time
7
-
8
- API_KEY = "AIzaSyBr2-dUqHDZkk20hlWeEcpWnVVdkq9fqyE"
9
-
10
- cr1_images_folder = r"C:\Users\ASUS\OneDrive - Binder\Desktop\test.orch\classified\CR2"
11
- output_json_folder = r"C:\Users\ASUS\OneDrive - Binder\Desktop\test.orch\classified\CR2\cr2_json"
12
-
13
- os.makedirs(output_json_folder, exist_ok=True)
14
-
15
- prompt = """
16
- Extract the following fields from the CR3 document image. Return both Arabic and English text where available:
17
-
18
- الرقم
19
- التاريخ
20
- الرقم الموحد للمنشأة
21
- اسم التاجر
22
- الجنسية
23
- تاريخ الميلاد
24
- رقم السجل المدنيلإقامة
25
- تاريخه
26
- مصدرة
27
- مركزها الرئيسي
28
- هاتف
29
- الرمز البريدي
30
- رقم سجل المركز الرئيسي
31
- الاسم التجاري للفرع
32
- العنوان
33
- الرمز البريدي
34
- الهاتف
35
- النشاط
36
- رأس المال
37
- إسم المدير او الوكيل المفوض
38
- الجنسية
39
- تاريخ الميلاد
40
- رقم السجل المدنيلإقامة
41
- تاريخه
42
- مصدره
43
- سلطات المدير
44
- يشهد مكتب السجل التجاري بمدينة
45
- بأنه تم تسجيل المؤسسة المذكورة أعلاة بمدينة
46
- وتنتهي صلاحية الشهادات في
47
- بموجب الإيصال رقم
48
- وتاريخ
49
- مدير السجل التجاري
50
-
51
- Return as JSON with keys:
52
- {
53
- "الرقم": ...,
54
- "التاريخ": ...,
55
- "الرقم_الموحد_للمنشأة": ...,
56
- "اسم_التاجر": ...,
57
- "الجنسية": ...,
58
- "تاريخ_الميلاد": ...,
59
- "رقم_السجل_المدني_الإقامة": ...,
60
- "تاريخه": ...,
61
- "مصدرة": ...,
62
- "مركزها_الرئيسي": ...,
63
- "هاتف": ...,
64
- "الرمز_البريدي": ...,
65
- "رقم_سجل_المركز_الرئيسي": ...,
66
- "الاسم_التجاري_للفرع": ...,
67
- "العنوان": ...,
68
- "الرمز_البريدي_الفرع": ...,
69
- "الهاتف_الفرع": ...,
70
- "النشاط": ...,
71
- "رأس_المال": ...,
72
- "اسم_المدير_او_الوكيل_المفوض": ...,
73
- "الجنسية_المدير": ...,
74
- "تاريخ_ميلاد_المدير": ...,
75
- "رقم_السجل_المدني_الإقامة_المدير": ...,
76
- "تاريخه_المدير": ...,
77
- "مصدره_المدير": ...,
78
- "سلطات_المدير": ...,
79
- "يشهد_مكتب_السجل": ...,
80
- "تم_تسجيل_المؤسسة": ...,
81
- "تنتهي_صلاحية_الشهادة": ...,
82
- "الإيصال_رقم": ...,
83
- "الإيصال_تاريخ": ...,
84
- "مدير_السجل_التجاري": ...
85
- }
86
- If a field is missing, set it to null.
87
- """
88
- url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
89
- headers = {"Content-Type": "application/json"}
90
-
91
- def split_address(address):
92
- parts = [p.strip() for p in address.split("،")]
93
- while len(parts) < 4:
94
- parts.append(None)
95
- return parts
96
-
97
- for image_name in os.listdir(cr1_images_folder):
98
- if not image_name.lower().endswith(('.jpg', '.jpeg', '.png')):
99
- continue
100
-
101
- image_path = os.path.join(cr1_images_folder, image_name)
102
- base_name = os.path.splitext(image_name)[0]
103
- output_file = os.path.join(output_json_folder, base_name + ".json")
104
-
105
- if os.path.exists(output_file):
106
- print(f"Skipped {image_name} (JSON file already exists)")
107
- continue
108
-
109
- with open(image_path, "rb") as f:
110
- image_b64 = base64.b64encode(f.read()).decode()
111
-
112
- data = {
113
- "contents": [
114
- {
115
- "role": "user",
116
- "parts": [
117
- {"text": prompt},
118
- {
119
- "inline_data": {
120
- "mime_type": "image/jpeg",
121
- "data": image_b64
122
- }
123
- }
124
- ]
125
- }
126
- ]
127
- }
128
-
129
- try:
130
- response = requests.post(url, headers=headers, json=data)
131
- response.raise_for_status()
132
- response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
133
-
134
- # استخدام التعبير المنتظم الصحيح
135
- match = re.search(r"```json\s*(\{.*?\})\s*```", response_text, re.DOTALL)
136
- if match:
137
- json_text = match.group(1)
138
- result = json.loads(json_text)
139
-
140
- # تقسيم العنوان إلى أجزاء منفصلة
141
- if "مركزها الرئيسي" in result and result["مركزها الرئيسي"]:
142
- parts = split_address(result["مركزها الرئيسي"])
143
- result["رقم المبنى"] = parts[0]
144
- result["اسم الشارع"] = parts[1]
145
- result["اسم الحي"] = parts[2]
146
- result["الرقم الإضافي"] = parts[3]
147
- else:
148
- result["رقم المبنى"] = None
149
- result["اسم الشارع"] = None
150
- result["اسم الحي"] = None
151
- result["الرقم الإضافي"] = None
152
-
153
- with open(output_file, "w", encoding="utf-8") as f:
154
- json.dump(result, f, ensure_ascii=False, indent=2)
155
-
156
- print(f"✅ Processed: {image_name}")
157
-
158
- else:
159
- print(f"❌ Failed to extract JSON from: {image_name}")
160
- print(response_text)
161
-
162
- time.sleep(3) # ينتظر 3 ثواني قبل إرسال الصورة التالية
163
-
164
- except Exception as e:
165
- print(f"❌ Error processing image {image_name}: {e}")
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+ import time
7
+
8
+ API_KEY = "AIzaSyBr2-dUqHDZkk20hlWeEcpWnVVdkq9fqyE"
9
+
10
+ cr1_images_folder = r"C:\Users\ASUS\OneDrive - Binder\Desktop\test.orch\classified\CR2"
11
+ output_json_folder = r"C:\Users\ASUS\OneDrive - Binder\Desktop\test.orch\classified\CR2\cr2_json"
12
+
13
+ os.makedirs(output_json_folder, exist_ok=True)
14
+
15
+ prompt = """
16
+ Extract the following fields from the CR3 document image. Return both Arabic text and English text where available:
17
+
18
+ Fields to extract (in Arabic):
19
+ - الرقم
20
+ - التاريخ
21
+ - الرقم الموحد للمنشأة
22
+ - اسم التاجر
23
+ - الجنسية
24
+ - تاريخ الميلاد
25
+ - رقم السجل المدني-الإقامة
26
+ - تاريخه
27
+ - مصدرة
28
+ - مركزها الرئيسي
29
+ - هاتف
30
+ - الرمز البريدي
31
+ - رقم سجل المركز الرئيسي
32
+ - الاسم التجاري للفرع
33
+ - العنوان
34
+ - الرمز البريدي
35
+ - الهاتف
36
+ - النشاط
37
+ - رأس المال
38
+ - إسم المدير او الوكيل المفوض
39
+ - الجنسية
40
+ - تاريخ الميلاد
41
+ - رقم السجل المدني-الإقامة
42
+ - تاريخه
43
+ - مصدره
44
+ - سلطات المدير
45
+ - يشهد مكتب السجل التجاري بمدينة
46
+ - بأنه تم تسجيل المؤسسة المذكورة أعلاة بمدينة
47
+ - وتنتهي صلاحية الشهادات في
48
+ - بموجب الإيصال رقم
49
+ - وتاريخ
50
+ - مدير السجل التجاري
51
+
52
+ Return the result as JSON with the following keys in English:
53
+
54
+ {
55
+ "document_number": null,
56
+ "document_date": null,
57
+ "unified_establishment_number": null,
58
+ "merchant_name": null,
59
+ "nationality": null,
60
+ "birth_date": null,
61
+ "national_id": null,
62
+ "national_id_issue_date": null,
63
+ "national_id_issue_place": null,
64
+ "main_office": null,
65
+ "phone": null,
66
+ "postal_code": null,
67
+ "main_office_registry_number": null,
68
+ "branch_commercial_name": null,
69
+ "branch_address": null,
70
+ "branch_postal_code": null,
71
+ "branch_phone": null,
72
+ "business_activity": null,
73
+ "capital": null,
74
+ "manager_name": null,
75
+ "manager_nationality": null,
76
+ "manager_birth_date": null,
77
+ "manager_national_id": null,
78
+ "manager_id_issue_date": null,
79
+ "manager_id_issue_place": null,
80
+ "manager_authority": null,
81
+ "registry_office_city": null,
82
+ "registered_in_city": null,
83
+ "certificate_expiry_date": null,
84
+ "receipt_number": null,
85
+ "receipt_date": null,
86
+ "registry_manager": null
87
+ }
88
+
89
+ If a field is missing, set its value to null.
90
+ """
91
+
92
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
93
+ headers = {"Content-Type": "application/json"}
94
+
95
+ def split_address(address):
96
+ parts = [p.strip() for p in address.split("،")]
97
+ while len(parts) < 4:
98
+ parts.append(None)
99
+ return parts
100
+
101
+ for image_name in os.listdir(cr1_images_folder):
102
+ if not image_name.lower().endswith(('.jpg', '.jpeg', '.png')):
103
+ continue
104
+
105
+ image_path = os.path.join(cr1_images_folder, image_name)
106
+ base_name = os.path.splitext(image_name)[0]
107
+ output_file = os.path.join(output_json_folder, base_name + ".json")
108
+
109
+ if os.path.exists(output_file):
110
+ print(f"Skipped {image_name} (JSON file already exists)")
111
+ continue
112
+
113
+ with open(image_path, "rb") as f:
114
+ image_b64 = base64.b64encode(f.read()).decode()
115
+
116
+ data = {
117
+ "contents": [
118
+ {
119
+ "role": "user",
120
+ "parts": [
121
+ {"text": prompt},
122
+ {
123
+ "inline_data": {
124
+ "mime_type": "image/jpeg",
125
+ "data": image_b64
126
+ }
127
+ }
128
+ ]
129
+ }
130
+ ]
131
+ }
132
+
133
+ try:
134
+ response = requests.post(url, headers=headers, json=data)
135
+ response.raise_for_status()
136
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
137
+
138
+ # استخدام التعبير المنتظم الصحيح
139
+ match = re.search(r"```json\s*(\{.*?\})\s*```", response_text, re.DOTALL)
140
+ if match:
141
+ json_text = match.group(1)
142
+ result = json.loads(json_text)
143
+
144
+ # تقسيم العنوان إلى أجزاء منفصلة
145
+ if ركزها الرئيسي" in result and result["مركزها الرئيسي"]:
146
+ parts = split_address(result["مركزها الرئيسي"])
147
+ result["رقم المبنى"] = parts[0]
148
+ result["اسم الشارع"] = parts[1]
149
+ result["اسم الحي"] = parts[2]
150
+ result["الرقم الإضافي"] = parts[3]
151
+ else:
152
+ result["رقم المبنى"] = None
153
+ result["اسم الشارع"] = None
154
+ result["اسم الحي"] = None
155
+ result["الرقم الإضافي"] = None
156
+
157
+ with open(output_file, "w", encoding="utf-8") as f:
158
+ json.dump(result, f, ensure_ascii=False, indent=2)
159
+
160
+ print(f"✅ Processed: {image_name}")
161
+
162
+ else:
163
+ print(f"❌ Failed to extract JSON from: {image_name}")
164
+ print(response_text)
165
+
166
+ time.sleep(3) # ينتظر 3 ثواني قبل إرسال الصورة التالية
167
+
168
+ except Exception as e:
169
+ print(f"❌ Error processing image {image_name}: {e}")