1from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor
2from peft import PeftModel
3from PIL import Image
4import torch
5
6# Load base + adapter
7base = Qwen2_5_VLForConditionalGeneration.from_pretrained(
8 "Qwen/Qwen2.5-VL-3B-Instruct",
9 torch_dtype=torch.bfloat16,
10 device_map="auto",
11)
12model = PeftModel.from_pretrained(base, "optiviseapp/arabic-doc-extractor-qwen25vl-3b")
13processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-3B-Instruct")
14
15# Extract from work order
16image = Image.open("work_order.png").convert("RGB")
17messages = [{
18 "role": "user",
19 "content": [
20 {"type": "image", "image": image},
21 {"type": "text", "text": "استخرج جميع البيانات من أمر العمل هذا بصيغة JSON"}
22 ],
23}]
24
25text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
26from qwen_vl_utils import process_vision_info
27image_inputs, _ = process_vision_info(messages)
28inputs = processor(text=[text], images=image_inputs, return_tensors="pt").to(model.device)
29
30output = model.generate(**inputs, max_new_tokens=2000)
31result = processor.batch_decode(
32 [o[len(i):] for i, o in zip(inputs.input_ids, output)],
33 skip_special_tokens=True
34)[0]
35print(result)
استخرج جميع المعلومات من هذه الوثيقة بصيغة JSON منظمة تشمل:
- رقم_الأمر، التاريخ، القسم، الوردية
- اسم_العامل، المهمة، الأولوية، الحالة
1pip install transformers trl torch datasets trackio accelerate peft bitsandbytes qwen-vl-utils
2
3# Set your HF token
4export HF_TOKEN=your_token_here
5
6# Run training (needs 24GB+ GPU — A10G, A6000, or A100)
7python train.py
1huggingface-cli jobs run train.py \
2 --hardware a10g-large \
3 --timeout 6h \
4 --dependencies transformers trl torch datasets trackio accelerate peft bitsandbytes qwen-vl-utils
1from pdf2image import convert_from_path
2
3# Convert uploaded PDF
4pages = convert_from_path("uploaded_work_order.pdf", dpi=200)
5
6# Extract from each page
7for page in pages:
8 result = extract_from_image(model, processor, page, task="work_order")
9 work_order_data = json.loads(result)
10 # Feed to your shift assignment system
11 assign_shifts(work_order_data)