abdullah-1111 commited on
Commit
65d15f6
·
verified ·
1 Parent(s): c559cc6

gemini_prompts_all_ocr

Browse files

This file contains structured prompt templates for Gemini used to extract Arabic-language fields from various Saudi government document types. Each prompt is tailored for a specific class such as CR1–CR7 (Commercial Registration), B1–B4 (Municipal Licenses), and V1–V3 (Tax Certificates).
These prompts are designed to guide Gemini API responses for accurate field extraction, with consistent output formatting per document type. Ideal for use in automated OCR pipelines.

gemini_requestB.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+ # Path to the document image you want to extract data from
11
+ image_path = r"C:\Users\ASUS\Downloads\CR_OCR_Cls.v4-original_images.folder\train\CR4\CS000130_CR_jpg.rf.b2528e60546ec399c3088ac69c6a66e2.jpg"
12
+ # قراءة الصورة وتحويلها إلى base64
13
+ with open(image_path, "rb") as f:
14
+ image_b64 = base64.b64encode(f.read()).decode()
15
+
16
+ prompt = """
17
+ Please extract the following fields in Arabic and English from the government registration document image:
18
+ - License Number
19
+ - Owner's Name
20
+ - ISIC Classification
21
+ - Detailed Activity
22
+ - Municipality
23
+ - Sub-Municipality
24
+ - District
25
+ - Street
26
+ - Shop's Total Area
27
+
28
+ Return the result in a JSON format with these keys:
29
+ en_license_number, en_owner_name, en_isic_classification, en_detailed_activity, en_municipality, en_sub_municipality, en_district, en_street, en_shop_total_area,
30
+ ar_license_number, ar_owner_name, ar_isic_classification, ar_detailed_activity, ar_municipality, ar_sub_municipality, ar_district, ar_street, ar_shop_total_area
31
+
32
+ If a field is missing, return null.
33
+ """
34
+
35
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
36
+
37
+ headers = {
38
+ "Content-Type": "application/json"
39
+ }
40
+
41
+ data = {
42
+ "contents": [
43
+ {
44
+ "role": "user",
45
+ "parts": [
46
+ {"text": prompt},
47
+ {
48
+ "inline_data": {
49
+ "mime_type": "image/jpeg",
50
+ "data": image_b64
51
+ }
52
+ }
53
+ ]
54
+ }
55
+ ]
56
+ }
57
+
58
+ response = requests.post(url, headers=headers, json=data)
59
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
60
+
61
+ # تنظيف النص من ```json
62
+ match = re.search(r"```json\s*(\{.*\})\s*```", response_text, re.DOTALL)
63
+ if match:
64
+ json_text = match.group(1)
65
+ result = json.loads(json_text)
66
+
67
+ # استخراج اسم الصورة بدون الامتداد
68
+ image_name = os.path.splitext(os.path.basename(image_path))[0]
69
+ # استخراج مسار المجلد
70
+ image_dir = os.path.dirname(image_path)
71
+ # تحديد مسار ملف الجيسون
72
+ output_path = os.path.join(image_dir, f"{image_name}.json")
73
+
74
+ # حفظ الناتج
75
+ with open(output_path, "w", encoding="utf-8") as f:
76
+ json.dump(result, f, ensure_ascii=False, indent=2)
77
+
78
+ print(f"✅ تم حفظ النتيجة في: {output_path}")
79
+ else:
80
+ print("❌ لم أتمكن من استخراج JSON من الرد:")
81
+ print(response_text)
gemini_requestCR1.py ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+ # Path to the document image you want to extract data from
11
+ image_path = r"C:\Users\ASUS\Downloads\CR_OCR_Cls.v4-original_images.folder\train\CR4\CS000130_CR_jpg.rf.b2528e60546ec399c3088ac69c6a66e2.jpg"
12
+
13
+
14
+ # قراءة الصورة وتحويلها إلى base64
15
+ with open(image_path, "rb") as f:
16
+ image_b64 = base64.b64encode(f.read()).decode()
17
+
18
+ prompt = """
19
+ يرجى استخراج الحقول التالية من صورة مستند السجل التجاري (CR1)، جميعها بالعربية فقط:
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
+ أرجو إعادة النتيجة بصيغة JSON بهذه المفاتيح فقط، وإذا أي حقل غير موجود فضع قيمته null:
51
+
52
+ {
53
+ "رقم الموحد": null,
54
+ "رقم المنشأة": null,
55
+ "الاسم التجاري للمؤسسة": null,
56
+ "مركزها الرئيسي": null,
57
+ "هاتف": null,
58
+ "الرمز البريدي": null,
59
+ "اسم التاجر": null,
60
+ "الجنسية": null,
61
+ "تاريخ الميلاد": null,
62
+ "رقم السجل المدني-الإقامة": null,
63
+ "تاريخه": null,
64
+ "مصدره": null,
65
+ "رقم الحفيظة-الجواز": null,
66
+ "تاريخه_2": null,
67
+ "مصدرة": null,
68
+ "النشاط": null,
69
+ "رأس المال": null,
70
+ "اسم المدير أو الوكيل المفوض": null,
71
+ "الجنسية_2": null,
72
+ "تاريخ الميلاد_2": null,
73
+ "رقم السجل المدني-الإقامة_2": null,
74
+ "تاريخه_3": null,
75
+ "مصدره_2": null,
76
+ "يشهد مكتب السجل التجاري بمدينة": null,
77
+ "بأنه تم تسجيل المؤسسة المذكورة أعلاه بمدينة": null,
78
+ "تنتهي صلاحية الشهادات في": null,
79
+ "بموجب الإيصال رقم": null,
80
+ "تاريخ_الإيصال": null
81
+ }
82
+ """
83
+
84
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
85
+
86
+ headers = {
87
+ "Content-Type": "application/json"
88
+ }
89
+
90
+ data = {
91
+ "contents": [
92
+ {
93
+ "role": "user",
94
+ "parts": [
95
+ {"text": prompt},
96
+ {
97
+ "inline_data": {
98
+ "mime_type": "image/jpeg",
99
+ "data": image_b64
100
+ }
101
+ }
102
+ ]
103
+ }
104
+ ]
105
+ }
106
+
107
+ response = requests.post(url, headers=headers, json=data)
108
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
109
+
110
+ # تنظيف النص من علامات ```json ... ```
111
+ match = re.search(r"```json\s*(\{.*\})\s*```", response_text, re.DOTALL)
112
+ if match:
113
+ json_text = match.group(1)
114
+ result = json.loads(json_text)
115
+
116
+ # هنا نحدد مسار ملف JSON بنفس مجلد الصورة وبنفس اسمها ولكن بامتداد json
117
+ folder = os.path.dirname(image_path)
118
+ base_name = os.path.splitext(os.path.basename(image_path))[0]
119
+ output_file = os.path.join(folder, base_name + ".json")
120
+
121
+ with open(output_file, "w", encoding="utf-8") as f:
122
+ json.dump(result, f, ensure_ascii=False, indent=2)
123
+
124
+ print(f"تم حفظ النتيجة في ملف {output_file}")
125
+ print(json.dumps(result, indent=2, ensure_ascii=False))
126
+ else:
127
+ print("لم أتمكن من استخراج JSON نظيف من الرد:")
128
+ print(response_text)
gemini_requestCR2.py ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+ # Path to the document image you want to extract data from
11
+ image_path = r"C:\Users\ASUS\Downloads\CR_OCR_Cls.v4-original_images.folder\train\CR4\CS000130_CR_jpg.rf.b2528e60546ec399c3088ac69c6a66e2.jpg"
12
+
13
+
14
+ # قراءة الصورة وتحويلها إلى base64
15
+ with open(image_path, "rb") as f:
16
+ image_b64 = base64.b64encode(f.read()).decode()
17
+
18
+ prompt = """
19
+ يرجى استخراج الحقول التالية من صورة مستند CR2 (السجل التجاري 2)، جميعها بالعربية فقط:
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
+
53
+ أرجو إعادة النتيجة بصيغة JSON بهذه المفاتيح فقط، وإذا أي حقل غير موجود فضع قيمته null:
54
+
55
+ {
56
+ "الرقم": null,
57
+ "التاريخ": null,
58
+ "الرقم الموحد للمنشأة": null,
59
+ "الاسم التجاري للمؤسسة": null,
60
+ "مركزها الرئيسي": null,
61
+ "هاتف": null,
62
+ "الرمز البريدي": null,
63
+ "اسم التاجر": null,
64
+ "الجنسية": null,
65
+ "تاريخ الميلاد": null,
66
+ "رقم السجل المدني-الإقامة": null,
67
+ "تاريخه": null,
68
+ "مصدره": null,
69
+ "رقم الحفيظة-الجواز": null,
70
+ "تاريخه_2": null,
71
+ "مصدرة": null,
72
+ "النشاط": null,
73
+ "رأس المال": null,
74
+ "اسم المدير او الوكيل المفوض": null,
75
+ "الجنسية_2": null,
76
+ "تاريخ الميلاد_2": null,
77
+ "رقم السجل المدني-الإقامة_2": null,
78
+ "تاريخه_3": null,
79
+ "مصدره_2": null,
80
+ "سلطات المدير": null,
81
+ "يشهد مكتب السجل التجاري بمدينة": null,
82
+ "بأنه تم تسجيل المؤسسة المذكورة أعلاه بمدينة": null,
83
+ "تنتهي صلاحية الشهادات في": null,
84
+ "بموجب الإيصال رقم": null,
85
+ "تاريخ_الإيصال": null,
86
+ "مدير السجل التجاري": null
87
+ }
88
+ """
89
+
90
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
91
+
92
+ headers = {
93
+ "Content-Type": "application/json"
94
+ }
95
+
96
+ data = {
97
+ "contents": [
98
+ {
99
+ "role": "user",
100
+ "parts": [
101
+ {"text": prompt},
102
+ {
103
+ "inline_data": {
104
+ "mime_type": "image/jpeg",
105
+ "data": image_b64
106
+ }
107
+ }
108
+ ]
109
+ }
110
+ ]
111
+ }
112
+
113
+ response = requests.post(url, headers=headers, json=data)
114
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
115
+
116
+ # تنظيف النص من علامات ```json ... ```
117
+ match = re.search(r"```json\s*(\{.*\})\s*```", response_text, re.DOTALL)
118
+ if match:
119
+ json_text = match.group(1)
120
+ result = json.loads(json_text)
121
+
122
+ # حفظ بنفس مجلد الصورة وبنفس اسمها بامتداد json
123
+ folder = os.path.dirname(image_path)
124
+ base_name = os.path.splitext(os.path.basename(image_path))[0]
125
+ output_file = os.path.join(folder, base_name + ".json")
126
+
127
+ with open(output_file, "w", encoding="utf-8") as f:
128
+ json.dump(result, f, ensure_ascii=False, indent=2)
129
+
130
+ print(f"تم حفظ النتيجة في ملف {output_file}")
131
+ print(json.dumps(result, indent=2, ensure_ascii=False))
132
+ else:
133
+ print("لم أتمكن من استخراج JSON نظيف من الرد:")
134
+ print(response_text)
gemini_requestCR3.py ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+ # Path to the document image you want to extract data from
11
+ image_path = r"C:\Users\ASUS\Downloads\CR_OCR_Cls.v4-original_images.folder\train\CR4\CS000130_CR_jpg.rf.b2528e60546ec399c3088ac69c6a66e2.jpg"
12
+
13
+
14
+ with open(image_path, "rb") as f:
15
+ image_b64 = base64.b64encode(f.read()).decode()
16
+
17
+ prompt = """
18
+ Extract the following fields from the CR3 document image. Return both Arabic and English text where available:
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
+
53
+ Return as JSON with keys:
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
+ "مدير_السجل_التجاري": ...
87
+ }
88
+ If a field is missing, set it to null.
89
+ """
90
+
91
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
92
+
93
+ headers = {
94
+ "Content-Type": "application/json"
95
+ }
96
+
97
+ data = {
98
+ "contents": [
99
+ {
100
+ "role": "user",
101
+ "parts": [
102
+ {"text": prompt},
103
+ {
104
+ "inline_data": {
105
+ "mime_type": "image/jpeg",
106
+ "data": image_b64
107
+ }
108
+ }
109
+ ]
110
+ }
111
+ ]
112
+ }
113
+
114
+ response = requests.post(url, headers=headers, json=data)
115
+
116
+ try:
117
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
118
+
119
+ match = re.search(r"```json\s*(\{.*?\})\s*```", response_text, re.DOTALL)
120
+ if match:
121
+ json_text = match.group(1)
122
+ result = json.loads(json_text)
123
+
124
+ base_name = os.path.splitext(os.path.basename(image_path))[0]
125
+ folder = os.path.dirname(image_path)
126
+ json_path = os.path.join(folder, f"{base_name}.json")
127
+
128
+ with open(json_path, "w", encoding="utf-8") as f:
129
+ json.dump(result, f, ensure_ascii=False, indent=2)
130
+
131
+ print(f"✅ تم حفظ النتيجة في الملف: {json_path}")
132
+ print(json.dumps(result, indent=2, ensure_ascii=False))
133
+ else:
134
+ print("❌ لم أتمكن من استخراج JSON نظيف من الرد:")
135
+ print(response_text)
136
+
137
+ except Exception as e:
138
+ print(f"❌ حدث خطأ أثناء المعالجة: {e}")
139
+ print("الرد الكامل من Gemini:")
140
+ print(response.text)
gemini_requestCR6.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+ # Path to the document image you want to extract data from
11
+ image_path = r"C:\Users\ASUS\Downloads\CR_OCR_Cls.v4-original_images.folder\train\CR4\CS000130_CR_jpg.rf.b2528e60546ec399c3088ac69c6a66e2.jpg"
12
+
13
+
14
+ # قراءة الصورة وتحويلها إلى base64
15
+ with open(image_path, "rb") as f:
16
+ image_b64 = base64.b64encode(f.read()).decode()
17
+
18
+ prompt = """
19
+ يرجى استخراج الحقول التالية من مستند السجل التجاري (CR6) بالصورة، باللغة العربية فقط:
20
+
21
+ - الكيان التجاري
22
+ - حالة السجل
23
+ - مدة المنشأة
24
+ - الرقم الوطني الموحد للمنشأة
25
+ - رابط المتجر الإكتروني
26
+ - رأس المال
27
+ - المدينة
28
+ - صندوق البريد
29
+ - الرمز البريدي
30
+ - هاتف
31
+ - تاريخ اصدار السجل
32
+ - تاريخ انتهاء السجل
33
+ - الموقع الاكتروني
34
+ - العنوان
35
+ - النشاط التجاري
36
+
37
+ أرجو إعادة النتيجة بصيغة JSON بهذه المفاتيح فقط، وإذا أي حقل غير موجود فضع قيمته null:
38
+
39
+ {
40
+ "الكيان التجاري": null,
41
+ "حالة السجل": null,
42
+ "مدة المنشأة": null,
43
+ "الرقم الوطني الموحد للمنشأة": null,
44
+ "رابط المتجر الإكتروني": null,
45
+ "رأس المال": null,
46
+ "المدينة": null,
47
+ "صندوق البريد": null,
48
+ "الرمز البريدي": null,
49
+ "هاتف": null,
50
+ "تاريخ اصدار السجل": null,
51
+ "تاريخ انتهاء السجل": null,
52
+ "الموقع الاكتروني": null,
53
+ "العنوان": null,
54
+ "النشاط التجاري": null
55
+ }
56
+ """
57
+
58
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
59
+
60
+ headers = {
61
+ "Content-Type": "application/json"
62
+ }
63
+
64
+ data = {
65
+ "contents": [
66
+ {
67
+ "role": "user",
68
+ "parts": [
69
+ {"text": prompt},
70
+ {
71
+ "inline_data": {
72
+ "mime_type": "image/jpeg",
73
+ "data": image_b64
74
+ }
75
+ }
76
+ ]
77
+ }
78
+ ]
79
+ }
80
+
81
+ response = requests.post(url, headers=headers, json=data)
82
+
83
+ try:
84
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
85
+
86
+ match = re.search(r"```json\s*(\{.*?\})\s*```", response_text, re.DOTALL)
87
+ if match:
88
+ json_text = match.group(1)
89
+ result = json.loads(json_text)
90
+
91
+ # حفظ النتيجة بنفس اسم ملف الصورة وداخل نفس المجلد
92
+ folder = os.path.dirname(image_path)
93
+ base_name = os.path.splitext(os.path.basename(image_path))[0]
94
+ output_file = os.path.join(folder, base_name + ".json")
95
+
96
+ with open(output_file, "w", encoding="utf-8") as f:
97
+ json.dump(result, f, ensure_ascii=False, indent=2)
98
+
99
+ print(f"✅ تم حفظ النتيجة في ملف: {output_file}")
100
+ print(json.dumps(result, indent=2, ensure_ascii=False))
101
+ else:
102
+ print("❌ لم أتمكن من استخراج JSON نظيف من الرد:")
103
+ print(response_text)
104
+
105
+ except Exception as e:
106
+ print(f"❌ حدث خطأ أثناء المعالجة: {e}")
107
+ print("🔴 الرد الكامل من Gemini:")
108
+ print(response.text)
gemini_requestCR7.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+ #Path to the document image you want to extract data from
11
+ image_path = r"C:\Users\ASUS\Downloads\OneDrive_1_7-30-2025\CR7\CS015431_CR.jpg"
12
+
13
+ # قراءة الصورة وتحويلها إلى base64
14
+ with open(image_path, "rb") as f:
15
+ image_b64 = base64.b64encode(f.read()).decode()
16
+
17
+ prompt = """
18
+ يرجى استخراج الحقول التالية من مستند السجل التجاري (CR7) بالصورة، باللغة العربية فقط:
19
+
20
+ - اسم المنشأة
21
+ - نوع السجل
22
+ - حالة السجل
23
+ - الرقم الموحد للمنشأة
24
+ - رقم السجل التجاري
25
+ - اسم المالك
26
+ - نوع الكيان
27
+ - تاريخ الاصدار
28
+ - تاريخ الانتهاء
29
+ - قائمة المدراء
30
+ - المدينة
31
+ - الموقع الإلكتروني
32
+ - الانشطة التجارية
33
+
34
+ أرجو إعادة النتيجة بصيغة JSON بهذه المفاتيح فقط، وإذا أي حقل غير موجود فضع قيمته null:
35
+
36
+ {
37
+ "اسم المنشأة": null,
38
+ "نوع السجل": null,
39
+ "حالة السجل": null,
40
+ "الرقم الموحد للمنشأة": null,
41
+ "رقم السجل التجاري": null,
42
+ "اسم المالك": null,
43
+ "نوع الكيان": null,
44
+ "تاريخ الاصدار": null,
45
+ "تاريخ الانتهاء": null,
46
+ "قائمة المدراء": null,
47
+ "المدينة": null,
48
+ "الموقع الإلكتروني": null,
49
+ "الانشطة التجارية": null
50
+ }
51
+ """
52
+
53
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
54
+
55
+ headers = {
56
+ "Content-Type": "application/json"
57
+ }
58
+
59
+ data = {
60
+ "contents": [
61
+ {
62
+ "role": "user",
63
+ "parts": [
64
+ {"text": prompt},
65
+ {
66
+ "inline_data": {
67
+ "mime_type": "image/jpeg",
68
+ "data": image_b64
69
+ }
70
+ }
71
+ ]
72
+ }
73
+ ]
74
+ }
75
+
76
+ response = requests.post(url, headers=headers, json=data)
77
+
78
+ try:
79
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
80
+
81
+ match = re.search(r"```json\s*(\{.*?\})\s*```", response_text, re.DOTALL)
82
+ if match:
83
+ json_text = match.group(1)
84
+ result = json.loads(json_text)
85
+
86
+ # حفظ النتيجة بنفس اسم ملف الصورة وداخل نفس المجلد
87
+ folder = os.path.dirname(image_path)
88
+ base_name = os.path.splitext(os.path.basename(image_path))[0]
89
+ output_file = os.path.join(folder, base_name + ".json")
90
+
91
+ with open(output_file, "w", encoding="utf-8") as f:
92
+ json.dump(result, f, ensure_ascii=False, indent=2)
93
+
94
+ print(f"✅ تم حفظ النتيجة في ملف: {output_file}")
95
+ print(json.dumps(result, indent=2, ensure_ascii=False))
96
+ else:
97
+ print("❌ لم أتمكن من استخراج JSON نظيف من الرد:")
98
+ print(response_text)
99
+
100
+ except Exception as e:
101
+ print(f"❌ حدث خطأ أثناء المعالجة: {e}")
102
+ print("🔴 الرد الكامل من Gemini:")
103
+ print(response.text)
gemini_requestV1.py ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+ # Path to the document image you want to extract data from
11
+ image_path = r"C:\Users\ASUS\Downloads\CR_OCR_Cls.v4-original_images.folder\train\CR4\CS000130_CR_jpg.rf.b2528e60546ec399c3088ac69c6a66e2.jpg"
12
+
13
+ # قراءة الصورة وتحويلها إلى base64
14
+ with open(image_path, "rb") as f:
15
+ image_b64 = base64.b64encode(f.read()).decode()
16
+
17
+ prompt = """
18
+ Please extract the following fields in Arabic and English from the tax registration document image:
19
+ Taxpayer Name
20
+ VAT Registration Number
21
+ Effective Registration Date
22
+ Taxpayer Address
23
+
24
+ Return the result in a JSON format with these keys:
25
+ en_taxpayer_name, en_vat_registration_number, en_effective_registration_date, en_taxpayer_address,
26
+ ar_taxpayer_name, ar_vat_registration_number, ar_effective_registration_date, ar_taxpayer_address
27
+
28
+ If a field is missing, return null.
29
+ """
30
+
31
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
32
+
33
+ headers = {
34
+ "Content-Type": "application/json"
35
+ }
36
+
37
+ data = {
38
+ "contents": [
39
+ {
40
+ "role": "user",
41
+ "parts": [
42
+ {"text": prompt},
43
+ {
44
+ "inline_data": {
45
+ "mime_type": "image/jpeg",
46
+ "data": image_b64
47
+ }
48
+ }
49
+ ]
50
+ }
51
+ ]
52
+ }
53
+
54
+ response = requests.post(url, headers=headers, json=data)
55
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
56
+
57
+ # تنظيف النص من علامات ```json ... ```
58
+ match = re.search(r"```json\s*(\{.*\})\s*```", response_text, re.DOTALL)
59
+ if match:
60
+ json_text = match.group(1)
61
+ result = json.loads(json_text)
62
+
63
+ # استخراج اسم الصورة بدون الامتداد
64
+ image_name = os.path.splitext(os.path.basename(image_path))[0]
65
+ # استخراج مسار المجلد
66
+ image_dir = os.path.dirname(image_path)
67
+ # تحديد مسار ملف الجيسون
68
+ output_path = os.path.join(image_dir, f"{image_name}.json")
69
+
70
+ # حفظ الناتج في ملف بنفس اسم الصورة وبنفس المجلد
71
+ with open(output_path, "w", encoding="utf-8") as f:
72
+ json.dump(result, f, ensure_ascii=False, indent=2)
73
+
74
+ print(f"✅ تم حفظ النتيجة في: {output_path}")
75
+ else:
76
+ print("❌ لم أتمكن من استخراج JSON نظيف من الرد:")
77
+ print(response_text)
gemini_requestV2.py ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+ # Path to the document image you want to extract data from
11
+ image_path = r"C:\Users\ASUS\Downloads\CR_OCR_Cls.v4-original_images.folder\train\CR4\CS000130_CR_jpg.rf.b2528e60546ec399c3088ac69c6a66e2.jpg"# قراءة الصورة وتحويلها إلى base64
12
+ with open(image_path, "rb") as f:
13
+ image_b64 = base64.b64encode(f.read()).decode()
14
+
15
+ prompt = """
16
+ Please extract the following fields in Arabic and English from the tax document image:
17
+ Taxpayer Name
18
+ VAT Registration Number
19
+ Effective Registration Date
20
+ Taxpayer Address
21
+ CR/License
22
+ Contract/ID No
23
+ Tax period
24
+ First Filing due date
25
+
26
+ Return the result in a JSON format with these keys:
27
+ en_taxpayer_name, en_vat_registration_number, en_effective_registration_date, en_taxpayer_address,
28
+ en_cr_license, en_contract_id_no, en_tax_period, en_first_filing_due_date,
29
+ ar_taxpayer_name, ar_vat_registration_number, ar_effective_registration_date, ar_taxpayer_address,
30
+ ar_cr_license, ar_contract_id_no, ar_tax_period, ar_first_filing_due_date
31
+
32
+ If a field is missing, return null.
33
+ """
34
+
35
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
36
+
37
+ headers = {
38
+ "Content-Type": "application/json"
39
+ }
40
+
41
+ data = {
42
+ "contents": [
43
+ {
44
+ "role": "user",
45
+ "parts": [
46
+ {"text": prompt},
47
+ {
48
+ "inline_data": {
49
+ "mime_type": "image/jpeg",
50
+ "data": image_b64
51
+ }
52
+ }
53
+ ]
54
+ }
55
+ ]
56
+ }
57
+
58
+ response = requests.post(url, headers=headers, json=data)
59
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
60
+
61
+ # تنظيف النص من علامات ```json ... ```
62
+ match = re.search(r"```json\s*(\{.*\})\s*```", response_text, re.DOTALL)
63
+ if match:
64
+ json_text = match.group(1)
65
+ result = json.loads(json_text)
66
+
67
+ # احصل على اسم الصورة بدون امتداد
68
+ image_name = os.path.splitext(os.path.basename(image_path))[0]
69
+ # احصل على مجلد الصورة
70
+ image_dir = os.path.dirname(image_path)
71
+ # مسار ملف JSON الجديد
72
+ output_path = os.path.join(image_dir, f"{image_name}.json")
73
+
74
+ # احفظ الناتج في ملف JSON بنفس اسم الصورة ونفس المجلد
75
+ with open(output_path, "w", encoding="utf-8") as f:
76
+ json.dump(result, f, ensure_ascii=False, indent=2)
77
+
78
+ print(f"✅ تم حفظ النتيجة في: {output_path}")
79
+ print(json.dumps(result, indent=2, ensure_ascii=False))
80
+ else:
81
+ print("❌ لم أتمكن من استخراج JSON نظيف من الرد:")
82
+ print(response_text)
gemini_requestV3.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+ # Path to the document image you want to extract data from
11
+ image_path = r"C:\Users\ASUS\Downloads\CR_OCR_Cls.v4-original_images.folder\train\CR4\CS000130_CR_jpg.rf.b2528e60546ec399c3088ac69c6a66e2.jpg"
12
+
13
+ with open(image_path, "rb") as f:
14
+ image_b64 = base64.b64encode(f.read()).decode()
15
+
16
+ prompt = """
17
+ استخرج الحقول التالية من مستند باللغة العربية فقط، وأرجعها بصيغة JSON:
18
+
19
+ 1. اسم المكلف
20
+ 2. عنوان المركز الرئيسي
21
+ 3. المدينة
22
+ 4. الحي
23
+ 5. صندوق البريد
24
+ 6. الرمز البريدي
25
+ 7. الهاتف
26
+
27
+ الصيغة المطلوبة:
28
+
29
+ {
30
+ "اسم المكلف": "...",
31
+ "عنوان المركز الرئيسي": "...",
32
+ "المدينة": "...",
33
+ "الحي": "...",
34
+ "صندوق البريد": "...",
35
+ "الرمز البريدي": "...",
36
+ "الهاتف": "..."
37
+ }
38
+
39
+ إذا لم يوجد حقل، أرجعه كـ null.
40
+ """
41
+
42
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
43
+
44
+ headers = {
45
+ "Content-Type": "application/json"
46
+ }
47
+
48
+ data = {
49
+ "contents": [
50
+ {
51
+ "role": "user",
52
+ "parts": [
53
+ {"text": prompt},
54
+ {
55
+ "inline_data": {
56
+ "mime_type": "image/jpeg",
57
+ "data": image_b64
58
+ }
59
+ }
60
+ ]
61
+ }
62
+ ]
63
+ }
64
+
65
+ response = requests.post(url, headers=headers, json=data)
66
+
67
+ try:
68
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
69
+
70
+ match = re.search(r"```json\s*(\{.*\})\s*```", response_text, re.DOTALL)
71
+ if match:
72
+ json_text = match.group(1)
73
+ else:
74
+ json_text = response_text
75
+
76
+ result = json.loads(json_text)
77
+
78
+ # استخراج اسم الصورة بدون امتداد ومسار المجلد
79
+ image_name = os.path.splitext(os.path.basename(image_path))[0]
80
+ image_dir = os.path.dirname(image_path)
81
+
82
+ # تحديد مسار ملف JSON بنفس اسم الصورة ونفس المجلد
83
+ output_file = os.path.join(image_dir, f"{image_name}.json")
84
+
85
+ # حفظ النتيجة في ملف JSON
86
+ with open(output_file, "w", encoding="utf-8") as f:
87
+ json.dump(result, f, ensure_ascii=False, indent=2)
88
+
89
+ print(f"✅ تم حفظ النتيجة في ملف {output_file}")
90
+ print(json.dumps(result, indent=2, ensure_ascii=False))
91
+
92
+ except Exception as e:
93
+ print("❌ حدث خطأ أثناء معالجة الرد:")
94
+ print(response.text)
95
+ print(e)
gemini_requestcr4.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+
11
+ #Path to the document image you want to extract data from
12
+ image_path = r"C:\Users\ASUS\Downloads\CR_OCR_Cls.v4-original_images.folder\train\CR4\CS000130_CR_jpg.rf.b2528e60546ec399c3088ac69c6a66e2.jpg"
13
+
14
+ with open(image_path, "rb") as f:
15
+ image_b64 = base64.b64encode(f.read()).decode()
16
+
17
+ prompt = """
18
+ Extract the following fields from the CR4 document image. Return both Arabic and English text where available:
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
+ Return as JSON with keys:
45
+ {
46
+ "رقم_موحد": ...,
47
+ "رقم_المنشأة": ...,
48
+ "التاريخ": ...,
49
+ "الاسم_التجاري": ...,
50
+ "نوعها": ...,
51
+ "جنسيتها": ...,
52
+ "مدة_الشركة": ...,
53
+ "تبدأ_من": ...,
54
+ "تنتهي_في": ...,
55
+ "مركزها_الرئيسي": ...,
56
+ "هاتف": ...,
57
+ "الرمز_البريدي": ...,
58
+ "النشاط": ...,
59
+ "رأس_المال": ...,
60
+ "المديرون": ...,
61
+ "سلطات_المدير": ...,
62
+ "يشهد_مكتب_السجل": ...,
63
+ "تم_تسجيل_المؤسسة": ...,
64
+ "تنتهي_صلاحية_الشهادة": ...,
65
+ "الإيصال_رقم": ...,
66
+ "الإيصال_تاريخ": ...
67
+ }
68
+ If a field is missing, set it to null.
69
+ """
70
+
71
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
72
+
73
+ headers = {
74
+ "Content-Type": "application/json"
75
+ }
76
+
77
+ data = {
78
+ "contents": [
79
+ {
80
+ "role": "user",
81
+ "parts": [
82
+ {"text": prompt},
83
+ {
84
+ "inline_data": {
85
+ "mime_type": "image/jpeg",
86
+ "data": image_b64
87
+ }
88
+ }
89
+ ]
90
+ }
91
+ ]
92
+ }
93
+
94
+ response = requests.post(url, headers=headers, json=data)
95
+
96
+ try:
97
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
98
+
99
+ # استخراج JSON من النص
100
+ match = re.search(r"```json\s*(\{.*?\})\s*```", response_text, re.DOTALL)
101
+ if match:
102
+ json_text = match.group(1)
103
+ result = json.loads(json_text)
104
+
105
+ base_name = os.path.splitext(os.path.basename(image_path))[0]
106
+ folder = os.path.dirname(image_path)
107
+ json_path = os.path.join(folder, f"{base_name}.json")
108
+
109
+ # إذا الملف موجود نقرأه ونضيف عليه
110
+ if os.path.exists(json_path):
111
+ with open(json_path, "r", encoding="utf-8") as f:
112
+ try:
113
+ existing_data = json.load(f)
114
+ if not isinstance(existing_data, list):
115
+ existing_data = [existing_data]
116
+ except json.JSONDecodeError:
117
+ existing_data = []
118
+ else:
119
+ existing_data = []
120
+
121
+ existing_data.append(result)
122
+
123
+ with open(json_path, "w", encoding="utf-8") as f:
124
+ json.dump(existing_data, f, ensure_ascii=False, indent=2)
125
+
126
+ print(f"✅ تم حفظ النتيجة في الملف: {json_path}")
127
+ print(json.dumps(result, indent=2, ensure_ascii=False))
128
+ else:
129
+ print("❌ لم أتمكن من استخراج JSON نظيف من الرد:")
130
+ print(response_text)
131
+
132
+ except Exception as e:
133
+ print(f"❌ حدث خطأ أثناء المعالجة: {e}")
134
+ print("الرد الكامل من Gemini:")
135
+ print(response.text)
gemini_requestcr5.py ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ import json
3
+ import re
4
+ import requests
5
+ import os
6
+
7
+ # Your Gemini API key
8
+ API_KEY = "your_gemini_api_key_here"
9
+
10
+ # Path to the document image you want to extract data from
11
+ image_path = r"C:\Users\ASUS\Downloads\CR_OCR_Cls.v4-original_images.folder\train\CR4\CS000130_CR_jpg.rf.b2528e60546ec399c3088ac69c6a66e2.jpg"
12
+
13
+
14
+ with open(image_path, "rb") as f:
15
+ image_b64 = base64.b64encode(f.read()).decode()
16
+
17
+ prompt = """
18
+ Extract the following fields from the CR5 document image. Return both Arabic and English text where available:
19
+
20
+ الرقم
21
+ التاريخ
22
+ الرقم الموحد للمنشأة
23
+ الاسم التجاري للشركة
24
+ نوعها
25
+ جنسيتها
26
+ مدة الشركة
27
+ تبدا من
28
+ تنتهي في
29
+ مركزها الرئيسي
30
+ هاتف
31
+ الرمز البريدي
32
+ النشاط
33
+ رأس المال
34
+ المديرون
35
+ سلطات المدير/المديرون
36
+ يشهد مكتب السجل التجاري بمدينة
37
+ بأنه تم تسجيل المؤسسة المذكورة أعلاة بمدينة
38
+ وتنتهي صلاحية الشهادات في
39
+ بموجب الإيصال رقم
40
+ وتاريخ
41
+
42
+ Return as JSON with keys:
43
+ {
44
+ "رقم": ...,
45
+ "التاريخ": ...,
46
+ "الرقم_الموحد_للمنشأة": ...,
47
+ "الاسم_التجاري_للشركة": ...,
48
+ "نوعها": ...,
49
+ "جنسيتها": ...,
50
+ "مدة_الشركة": ...,
51
+ "تبدا_من": ...,
52
+ "تنتهي_في": ...,
53
+ "مركزها_الرئيسي": ...,
54
+ "هاتف": ...,
55
+ "الرمز_البريدي": ...,
56
+ "النشاط": ...,
57
+ "رأس_المال": ...,
58
+ "المديرون": ...,
59
+ "سلطات_المدير": ...,
60
+ "يشهد_مكتب_السجل": ...,
61
+ "تم_تسجيل_المؤسسة": ...,
62
+ "تنتهي_صلاحية_الشهادة": ...,
63
+ "الإيصال_رقم": ...,
64
+ "الإيصال_تاريخ": ...
65
+ }
66
+ If a field is missing, set it to null.
67
+ """
68
+
69
+ url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
70
+
71
+ headers = {
72
+ "Content-Type": "application/json"
73
+ }
74
+
75
+ data = {
76
+ "contents": [
77
+ {
78
+ "role": "user",
79
+ "parts": [
80
+ {"text": prompt},
81
+ {
82
+ "inline_data": {
83
+ "mime_type": "image/jpeg",
84
+ "data": image_b64
85
+ }
86
+ }
87
+ ]
88
+ }
89
+ ]
90
+ }
91
+
92
+ response = requests.post(url, headers=headers, json=data)
93
+
94
+ try:
95
+ response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
96
+
97
+ match = re.search(r"```json\s*(\{.*?\})\s*```", response_text, re.DOTALL)
98
+ if match:
99
+ json_text = match.group(1)
100
+ result = json.loads(json_text)
101
+
102
+ base_name = os.path.splitext(os.path.basename(image_path))[0]
103
+ folder = os.path.dirname(image_path)
104
+ json_path = os.path.join(folder, f"{base_name}.json")
105
+
106
+ with open(json_path, "w", encoding="utf-8") as f:
107
+ json.dump(result, f, ensure_ascii=False, indent=2)
108
+
109
+ print(f"✅ تم حفظ النتيجة في الملف: {json_path}")
110
+ print(json.dumps(result, indent=2, ensure_ascii=False))
111
+ else:
112
+ print("❌ لم أتمكن من استخراج JSON نظيف من الرد:")
113
+ print(response_text)
114
+
115
+ except Exception as e:
116
+ print(f"❌ حدث خطأ أثناء المعالجة: {e}")
117
+ print("الرد الكامل من Gemini:")
118
+ print(response.text)