ocr / app.py
vithacocf's picture
Update app.py
39d84f4 verified
raw
history blame
1.74 kB
import gradio as gr
from transformers import AutoProcessor, AutoModelForVision2Seq
from PIL import Image
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
torch.cuda.empty_cache()
model_id = "prithivMLmods/Camel-Doc-OCR-062825"
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForVision2Seq.from_pretrained(
model_id,
torch_dtype=torch.float16 if device == "cuda" else torch.float32,
trust_remote_code=True
).to(device)
def predict(image, prompt=None):
image = image.convert("RGB")
# Cực kỳ quan trọng: text="" bắt buộc phải có
inputs = processor(images=image, text="", return_tensors="pt").to(device)
# In debug để kiểm tra input_ids
print(">>> input_ids shape:", inputs.input_ids.shape)
generated_ids = model.generate(
**inputs,
max_new_tokens=512,
do_sample=False,
use_cache=False, # ✅ Thêm dòng này để fix lỗi cache_position
eos_token_id=processor.tokenizer.eos_token_id,
pad_token_id=processor.tokenizer.pad_token_id
)
result = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
return result
Hàm mock xử lý ảnh — chỉ để test UI
def mock_predict(image, prompt=None):
return f"Fake OCR result for image. Prompt: {prompt or 'N/A'}"
demo = gr.Interface(
# fn=predict,
fn=mock_predict,
inputs=[
gr.Image(type="pil", label="Tải ảnh tài liệu lên"),
gr.Textbox(label="Gợi ý (tuỳ chọn)", placeholder="VD: Trích số hóa đơn")
],
outputs="text",
title="Camel-Doc OCR - Trích xuất văn bản từ ảnh"
)
# if __name__ == "__main__":
# demo.launch()