File size: 4,215 Bytes
81fdfcf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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 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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | import base64
import json
import re
import requests
import os
# مفتاح Gemini API
API_KEY = "AIzaSyBr2-dUqHDZkk20hlWeEcpWnVVdkq9fqyE"
# المجلد الذي يحتوي صور cr1
cr1_images_folder = r"C:\Users\ASUS\OneDrive - Binder\Desktop\test.orch\classified\CR1"
# مجلد إخراج ملفات JSON
output_json_folder = r"C:\Users\ASUS\OneDrive - Binder\Desktop\test.orch\classified\CR1\cr1_json"
# Ensure output folder exists
os.makedirs(output_json_folder, exist_ok=True)
# Exact same prompt
prompt = """
Please extract the following fields from the CR1 commercial registration document image. Extract the Arabic text, but return the output as JSON using the exact English keys below. If any field is missing, set its value to null.
Fields to extract (in Arabic content):
- Unified number
- Establishment number
- Commercial name of the institution
- Its main center
- Phone
- Postal code
- Trader name
- Nationality
- Date of birth
- Civil registry number - residence
- Its date
- Its source
- Passport number
- Its date
- Issuer
- Activity
- Capital
- Name of the manager or authorized agent
- Nationality
- Date of birth
- Civil registry number - residence
- Its date
- Its source
- Certified by the commercial registration office in the city
- That the above-mentioned institution is registered in the city
- Certificates expire on
- Receipt number
- Date
Return the output in JSON format with these exact keys:
{
"unified_number": null,
"establishment_number": null,
"institution_name": null,
"main_office": null,
"phone": null,
"postal_code": null,
"merchant_name": null,
"nationality": null,
"birth_date": null,
"national_id": null,
"national_id_issue_date": null,
"national_id_issue_place": null,
"passport_number": null,
"passport_issue_date": null,
"passport_issuer": null,
"business_activity": null,
"capital": null,
"manager_name": null,
"manager_nationality": null,
"manager_birth_date": null,
"manager_national_id": null,
"manager_id_issue_date": null,
"manager_id_issue_place": null,
"registry_office_city": null,
"registered_in_city": null,
"certificate_expiry_date": null,
"receipt_number": null,
"receipt_date": null
}
"""
url = f"https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key={API_KEY}"
headers = {"Content-Type": "application/json"}
# Iterate over all images
for image_name in os.listdir(cr1_images_folder):
if not image_name.lower().endswith(('.jpg', '.jpeg', '.png')):
continue
image_path = os.path.join(cr1_images_folder, image_name)
base_name = os.path.splitext(image_name)[0]
output_file = os.path.join(output_json_folder, base_name + ".json")
# Skip if JSON already exists
if os.path.exists(output_file):
print(f"Skipped {image_name} (JSON file already exists)")
continue
# Read image and convert to base64
with open(image_path, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
# Send request to Gemini API
data = {
"contents": [
{
"role": "user",
"parts": [
{"text": prompt},
{
"inline_data": {
"mime_type": "image/jpeg",
"data": image_b64
}
}
]
}
]
}
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
response_text = response.json()['candidates'][0]['content']['parts'][0]['text']
match = re.search(r"```json\s*(\{.*\})\s*```", response_text, re.DOTALL)
if match:
json_text = match.group(1)
result = json.loads(json_text)
with open(output_file, "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
print(f"✅ Processed: {image_name}")
else:
print(f"❌ Failed to extract JSON from: {image_name}")
print(response_text)
except Exception as e:
print(f"❌ Error processing image {image_name}: {e}")
|