Spaces:
Sleeping
Sleeping
from openai import OpenAI | |
from dotenv import load_dotenv | |
import requests | |
import os | |
import streamlit as st | |
# Adicionar o contexto de execução as secrets configuradas no arquivo .env | |
load_dotenv() | |
def gerar_contexto_imagem(input_imagem): | |
api_url = "https://api-inference.huggingface.co/models/Salesforce/blip-image-captioning-large" | |
access_token = os.getenv("HUGGINGFACEHUB_API_TOKEN") | |
headers = {"Authorization": f"Bearer {access_token}"} | |
with open(input_imagem, "rb") as f: | |
data = f.read() | |
response = requests.post(api_url, headers=headers, data=data).json() | |
return response[0]['generated_text'] | |
def traduzir_texto(texto): | |
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) | |
chat = client.chat.completions.create( | |
model="gpt-3.5-turbo-0125", | |
messages=[ | |
{"role":"system", "content": "Traduza do inglês para o português"}, | |
{"role": "user", "content": texto} | |
]) | |
return chat.choices[0].message.content | |
def gerar_historia(contexto): | |
llm_provider = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) | |
historia = llm_provider.chat.completions.create( | |
model='gpt-3.5-turbo-0125', | |
max_tokens=300, | |
temperature=0.85, | |
messages=[ | |
{"role": "system", "content":"Dado o contexto do usuário, crie uma história no idioma PORTIGUÊS. O texto deve entre 150 e 200 caracteres"}, | |
{"role": "user", "content": contexto} | |
] | |
) | |
return historia.choices[0].message.content | |
# text to speech | |
def gerar_audio(texto): | |
audio_name = 'historia.wav' | |
api_url = "https://api-inference.huggingface.co/models/facebook/mms-tts-por" | |
access_token = os.getenv("HUGGINGFACEHUB_API_TOKEN") | |
headers = {"Authorization": f"Bearer {access_token}"} | |
payload = { | |
"inputs": texto | |
} | |
response = requests.post(api_url, headers=headers, json=payload) | |
with open(audio_name, 'wb') as file: | |
file.write(response.content) | |
return audio_name | |
# APP / Interface gráfica | |
def main(): | |
st.set_page_config(page_title="imagem para história em áudio") | |
st.header("Imagem para história em áudio") | |
upload_file = st.file_uploader("Selecione uma imagem", type="jpg") | |
if upload_file is not None: | |
print(upload_file) | |
imagem_data_bytes = upload_file.getvalue() | |
with open(upload_file.name, "wb") as file: | |
file.write(imagem_data_bytes) | |
st.image(upload_file, caption="Imagem / Fotografia", use_column_width=True) | |
contexto_em_ingles = gerar_contexto_imagem(upload_file.name) | |
contexto_traduzido = traduzir_texto(contexto_em_ingles) | |
historia = gerar_historia(contexto_traduzido) | |
historia_em_audio = gerar_audio(historia) | |
with st.expander("Contexto"): | |
st.write(contexto_traduzido) | |
with st.expander("Historia"): | |
st.write(historia) | |
st.audio(historia_em_audio) | |
if __name__ == '__main__': | |
main() |