|
from openai import OpenAI |
|
from dotenv import load_dotenv |
|
import requests |
|
import os |
|
import streamlit as st |
|
|
|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
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() |