Metinhsimi's picture
Rename app13perfect.py to app.py
a17d35e verified
raw
history blame
3.84 kB
import streamlit as st
import google.generativeai as genai
from PIL import Image
from gtts import gTTS
import os
from googletrans import Translator
# Google Gemini API anahtarınızı yapılandırın
genai.configure(api_key='AIzaSyDbYPJa5rj_MMMEcSbl86J9Uq98s-Ioxvk')
# Çeviri için Translator nesnesi oluşturun
translator = Translator()
# Streamlit başlık
st.title('Analyze Image With Google Gemini')
# Yeni modeli tanımlayın (görsel analizi yapabilen model)
model = genai.GenerativeModel('gemini-1.5-flash') # Önerilen model
# Fotoğraf çekme butonu
st.subheader('Kamera ile fotoğraf çekin veya bir görsel yükleyin')
# Kamera ile fotoğraf çekme bölümü
camera_photo = st.camera_input("Kamera ile Fotoğraf Çekin")
# Resim yükleme bölümü
resim = st.file_uploader('Bir Resim Yükleyin', type=['jpg', 'jpeg', 'png'])
# Görsel yüklenip yüklenmediğini kontrol et
new_image = None
if camera_photo:
new_image = Image.open(camera_photo)
st.image(new_image, caption='Kamera ile Çekilen Fotoğraf', use_column_width=True)
elif resim:
new_image = Image.open(resim)
st.image(new_image, caption='Yüklenen Görsel', use_column_width=True)
# Görselin değişip değişmediğini kontrol et
if 'current_image' in st.session_state:
if st.session_state.current_image != new_image:
st.session_state.current_image = new_image
st.session_state.response_text = None # Önceki yanıtı sıfırla
st.session_state.translated_text = None # Çevrilen metni sıfırla
else:
if new_image:
st.session_state.current_image = new_image
st.session_state.response_text = None # Önceki yanıtı sıfırla
st.session_state.translated_text = None # Çevrilen metni sıfırla
# Soru bölümü (Varsayılan: "Explain this image with details")
soru = st.text_input('Görsel hakkında ne sormak istersiniz?', value='Explain this image with details')
# Fonksiyon: Görsel analizi yapma ve ses dosyasını oluşturma
def analyze_and_speak(image, question, file_name):
try:
# Görsel ve soruyu modele iletmek
response = model.generate_content([question, image], stream=True)
response.resolve()
st.session_state.response_text = response.text
st.write(st.session_state.response_text)
# Metni Türkçeye çevirme
st.session_state.translated_text = translator.translate(st.session_state.response_text, dest='tr').text
st.write(f"Türkçeye Çevrilen Metin: {st.session_state.translated_text}")
# gTTS ile çevrilen metni sesli hale getirme (daha hızlı okuma için slow=False)
tts = gTTS(text=st.session_state.translated_text, lang='tr', slow=False)
file_path = file_name
tts.save(file_path)
# Dosyanın varlığını kontrol et
if os.path.exists(file_path):
st.success("Ses dosyası başarıyla kaydedildi!")
# Ses dosyasını çal
with open(file_path, "rb") as audio_file:
audio_bytes = audio_file.read()
st.audio(audio_bytes, format="audio/mp3")
else:
st.error("Ses dosyası oluşturulurken bir hata oluştu.")
except Exception as e:
st.error(f"Bir hata oluştu: {e}")
# Soru otomatik olarak çalıştırılsın (butona basmaya gerek kalmadan)
if new_image and st.session_state.response_text is None:
analyze_and_speak(new_image, soru, "output_tr.mp3")
# Otomatik görsel analizi için buton
if st.button("Otomatik Görsel Analizi Yap"):
if camera_photo:
analyze_and_speak(new_image, 'What do you see here?', "output_auto_tr.mp3")
else:
st.error("Lütfen önce bir görsel yükleyin veya kamera ile fotoğraf çekin.")