Spaces:
Running
on
Zero
Running
on
Zero
import os | |
import warnings | |
import torch | |
import gc | |
from transformers import pipeline, AutoTokenizer | |
from PIL import Image | |
import gradio as gr | |
from huggingface_hub import login | |
warnings.filterwarnings('ignore') | |
os.environ["CUDA_VISIBLE_DEVICES"] = "0" | |
# Global variables | |
pipe = None | |
if torch.cuda.is_available(): | |
torch.cuda.empty_cache() | |
gc.collect() | |
print("เคลียร์ CUDA cache เรียบร้อยแล้ว") | |
def load_pipeline(): | |
"""โหลด pipeline""" | |
global pipe | |
print("กำลังโหลด pipeline...") | |
try: | |
hub_model_path = "Aekanun/thai-handwriting-llm" | |
# สร้าง pipeline | |
pipe = pipeline( | |
"image-to-text", | |
model=hub_model_path, | |
device="cuda" if torch.cuda.is_available() else "cpu", | |
model_kwargs={ | |
"torch_dtype": torch.bfloat16, | |
"load_in_4bit": True, | |
"trust_remote_code": True, | |
}, | |
token=os.environ.get('HUGGING_FACE_HUB_TOKEN') | |
) | |
print("โหลด pipeline สำเร็จ!") | |
return True | |
except Exception as e: | |
print(f"เกิดข้อผิดพลาดในการโหลด pipeline: {str(e)}") | |
return False | |
def process_handwriting(image): | |
"""ฟังก์ชันสำหรับ Gradio interface""" | |
global pipe | |
if image is None: | |
return "กรุณาอัพโหลดรูปภาพ" | |
try: | |
# Ensure image is in PIL format | |
if not isinstance(image, Image.Image): | |
image = Image.fromarray(image) | |
# Convert to RGB if needed | |
if image.mode != "RGB": | |
image = image.convert("RGB") | |
# ใช้ pipeline ประมวลผล | |
result = pipe( | |
image, | |
prompt="""Transcribe the Thai handwritten text from the provided image. | |
Only return the transcription in Thai language.""", | |
max_new_tokens=256, | |
do_sample=False | |
) | |
# รับผลลัพธ์ | |
if isinstance(result, list): | |
return result[0]['generated_text'].strip() | |
return result['generated_text'].strip() | |
except Exception as e: | |
return f"เกิดข้อผิดพลาด: {str(e)}" | |
# Initialize application | |
print("กำลังเริ่มต้นแอปพลิเคชัน...") | |
if load_pipeline(): | |
# Create Gradio interface | |
demo = gr.Interface( | |
fn=process_handwriting, | |
inputs=gr.Image(type="pil", label="อัพโหลดรูปลายมือเขียนภาษาไทย"), | |
outputs=gr.Textbox(label="ข้อความที่แปลงได้"), | |
title="Thai Handwriting Recognition", | |
description="อัพโหลดรูปภาพลายมือเขียนภาษาไทยเพื่อแปลงเป็นข้อความ", | |
examples=[["example1.jpg"], ["example2.jpg"]] | |
) | |
if __name__ == "__main__": | |
demo.launch() | |
else: | |
print("ไม่สามารถเริ่มต้นแอปพลิเคชันได้") |