lyntrann
Clean up generated output by removing 'answer' prefix and prompt
c4092f9
Raw
History Blame Contribute Delete
2.58 kB
import os
import gradio as gr
import torch
from PIL import Image
from transformers import AutoProcessor, PaliGemmaForConditionalGeneration
import spaces
import gradio_client.utils as _gu
_orig_json_schema = _gu._json_schema_to_python_type
def _safe_json_schema(schema, defs=None):
try:
return _orig_json_schema(schema, defs)
except Exception:
return "Any"
_gu._json_schema_to_python_type = _safe_json_schema
MODEL_ID = "linhtrann21/paligemma_dual_10k"
HF_TOKEN = os.environ.get("HF_TOKEN")
print("Loading PaliGemma processor...")
processor = AutoProcessor.from_pretrained("google/paligemma-3b-pt-224", token=HF_TOKEN)
print("Processor loaded!")
print("Loading trademark model...")
model = PaliGemmaForConditionalGeneration.from_pretrained(MODEL_ID, token=HF_TOKEN)
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)
print(f"Model loaded on {device}!")
@spaces.GPU
def predict(image, prompt):
if image is None:
return "Please upload a trademark image."
if not isinstance(image, Image.Image):
image = Image.fromarray(image)
image = image.convert("RGB")
inputs = processor(
text=prompt,
images=image,
return_tensors="pt"
)
inputs = {key: value.to(model.device) for key, value in inputs.items()}
with torch.inference_mode():
output = model.generate(
**inputs,
max_new_tokens=5120,
do_sample=False
)
input_length = inputs["input_ids"].shape[1]
# Chỉ lấy các token được sinh thêm, bỏ phần prompt đầu vào
generated_tokens = output[0][input_length:]
# Chỉ decode kết quả model sinh ra
result = processor.decode(
generated_tokens,
skip_special_tokens=True,
clean_up_tokenization_spaces=True
).strip()
return result
with gr.Blocks(title="Trademark Description Generator") as demo:
gr.Markdown("# Trademark Description Generator")
gr.Markdown("Upload a trademark image and get a detailed layout description.")
with gr.Row():
with gr.Column():
image_input = gr.Image(type="pil", label="Upload Trademark Image")
prompt_input = gr.Textbox(label="Prompt", value="Describe the layout of this trademark image.")
submit_btn = gr.Button("Generate Description")
output = gr.Textbox(label="Generated Description", lines=10)
submit_btn.click(fn=predict, inputs=[image_input, prompt_input], outputs=output)
if __name__ == "__main__":
demo.launch()