miqueiascoutinho's picture
Gerador de histórias a partir de uma imagem
1b22cf8
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()