Spaces:
Build error
Build error
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.") | |