Views
No views yet
1pip install transformers==4.57.6 optimum==1.26.0 accelerate==1.8.0 peft==0.17.0 json-repair PIL
21!pip install -q transformers==4.57.6
2!pip install -q optimum==1.26.0
3!pip install -q datasets==4.4.0
4
5!pip install -q torch==2.8.0
6!pip install -q torchvision==0.23
7!pip install -q torchaudio==2.8.0
8
9!pip install -q vllm==0.15.0
10!pip install json-repair
111import base64
2from io import BytesIO
3from PIL import Image, ImageEnhance
4
5def preprocess_image(image_path, max_width=1024, do_enhance=True, return_base64=False):
6 image = Image.open(image_path)
7
8 # 1. Convert to grayscale
9 gray_image = image.convert('L')
10
11 # 2. Resize maintaining aspect ratio
12 if gray_image.width > max_width:
13 ratio = max_width / float(gray_image.width)
14 new_height = int(gray_image.height * ratio)
15 gray_image = gray_image.resize((max_width, new_height), Image.LANCZOS)
16
17 # 3. Enhance contrast
18 if do_enhance:
19 enhancer = ImageEnhance.Contrast(gray_image)
20 gray_image = enhancer.enhance(1.5)
21
22 if return_base64:
23 buffered = BytesIO()
24 gray_image.save(buffered, format="JPEG", optimize=True, quality=95)
25 img_str = base64.b64encode(buffered.getvalue()).decode('utf-8')
26 return f"data:image/jpeg;base64,{img_str}"
27
28 return gray_image
291import json_repair
2from transformers import AutoProcessor, Gemma3ForConditionalGeneration
3
4model_id = "bakrianoo/arabic-legal-documents-ocr-1.0"
5model = Gemma3ForConditionalGeneration.from_pretrained(model_id, device_map="auto", torch_dtype=torch.bfloat16)
6processor = AutoProcessor.from_pretrained(model_id)
7
8# Preprocess image first
9processed_img = preprocess_image("document.jpg", return_base64=False)
10
11messages = [
12 {"role": "user", "content": [{"type": "image", "image": processed_img}, {"type": "text", "text": "Extract details to JSON."}]}
13]
14
15inputs = processor.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
16output = model.generate(**inputs, max_new_tokens=2048)
17raw_text = processor.decode(output[0], skip_special_tokens=True)
18
19# Fix and parse JSON output
20json_data = json_repair.loads(raw_text)
21print(json_data)
221vllm serve "bakrianoo/arabic-legal-documents-ocr-1.0" \
2--dtype bfloat16 --gpu_memory_utilization 0.8 \
3--enable-chunked-prefill \
4--allowed-local-media-path "/workspace/"1from openai import OpenAI
2import json_repair
3
4client = OpenAI(api_key="any", base_url="http://localhost:8000/v1")
5
6# Preprocess to Base64
7b64_image = preprocess_image("document.jpg", return_base64=True)
8
9response = client.chat.completions.create(
10 model="bakrianoo/arabic-legal-documents-ocr-1.0",
11 messages=[{"role": "user", "content": [
12 {"type": "image_url", "image_url": {"url": b64_image}},
13 {"type": "text", "text": "Extract details to JSON."}
14 ]}]
15)
16
17# Robust parsing
18structured_output = json_repair.loads(response.choices[0].message.content)
19