goruntuIsleme / app.py
feyzamiynat's picture
Update app.py
e0ae1d8 verified
import gradio as gr
import torch
from transformers import BlipProcessor, BlipForConditionalGeneration
from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
import logging
import spaces
import os
from huggingface_hub import login
# Logger yapılandırması
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Hugging Face token kontrolü
hf_token = os.environ.get("HF_TOKEN")
if not hf_token:
raise ValueError("HF_TOKEN çevre değişkeni ayarlanmamış. Lütfen Hugging Face token'ınızı ayarlayın.")
login(token=hf_token)
# Cihaz seçimi
device = "cuda" if torch.cuda.is_available() else "cpu"
logger.info(f"Kullanılan cihaz: {device}")
# BLIP modeli yükleniyor
logger.info("BLIP modeli yükleniyor...")
blip_processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large")
blip_model = BlipForConditionalGeneration.from_pretrained(
"Salesforce/blip-image-captioning-large"
).to(device)
# Gemma modeli yükleniyor
logger.info("Gemma modeli yükleniyor...")
gemma_model_id = "google/gemma-3-12b-it"
gemma_tokenizer = AutoTokenizer.from_pretrained(
gemma_model_id,
token=hf_token
)
gemma_model = AutoModelForCausalLM.from_pretrained(
gemma_model_id,
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
device_map="auto",
token=hf_token
)
streamer = TextStreamer(gemma_tokenizer, skip_prompt=True, skip_special_tokens=True)
@spaces.GPU
def generate_story(input_text):
logger.info("Masal üretim süreci başlatıldı.")
try:
# BLIP ile prompt oluştur
blip_prompt = f"Bu konu hakkında detaylı bir açıklama yap: {input_text}"
inputs = blip_processor(text=blip_prompt, return_tensors="pt").to(device)
out = blip_model.generate(**inputs, min_length=30, max_length=100)
enhanced_prompt = blip_processor.decode(out[0], skip_special_tokens=True)
logger.info(f"BLIP tarafından geliştirilen prompt: {enhanced_prompt}")
# Gemma ile masal üret
gemma_prompt = f"""
Aşağıdaki konu ve açıklamaya göre, giriş-gelişme-sonuç bölümleri olan Türkçe bir masal yaz.
Bölüm başlıkları veya açıklama ekleme. Karakterlere isim verme.
Sadece masal başlığını ve hikâyeyi döndür.
Konu: {input_text}
Geliştirilmiş Açıklama: {enhanced_prompt}
"""
input_ids = gemma_tokenizer.encode(gemma_prompt, return_tensors="pt").to(device)
# Masal üretimi
output_ids = gemma_model.generate(
input_ids,
max_new_tokens=1000,
temperature=0.8,
repetition_penalty=1.1,
length_penalty=1.0,
do_sample=True,
streamer=streamer
)
output_text = gemma_tokenizer.decode(output_ids[0], skip_special_tokens=True)
final_text = output_text.replace(gemma_prompt.strip(), "").strip()
return {
"konu_aciklamasi": enhanced_prompt,
"masal": final_text
}
except Exception as e:
logger.exception("Masal üretimi sırasında hata oluştu:")
return {"error": str(e)}
# Gradio arayüzü
with gr.Blocks() as app:
gr.Markdown("## 📚 Masal Üretici (BLIP ve Gemma ile)")
with gr.Tab("Masal Oluştur"):
text_input = gr.Textbox(label="Masal konusunu girin", lines=3)
generate_button = gr.Button("Masalı Üret")
output_json = gr.JSON(label="Çıktılar")
generate_button.click(
fn=generate_story,
inputs=text_input,
outputs=output_json
)
app.launch()