116 lines
4.0 KiB
Python
116 lines
4.0 KiB
Python
|
|
import tkinter as tk
|
||
|
|
from tkinter import Menu, messagebox, filedialog
|
||
|
|
import os
|
||
|
|
import threading
|
||
|
|
import speech_recognition as sr
|
||
|
|
from pydub import AudioSegment
|
||
|
|
from moviepy.editor import VideoFileClip # Importando moviepy para manipular vídeo
|
||
|
|
|
||
|
|
def validar_login():
|
||
|
|
user = userdig.get()
|
||
|
|
password = passdig.get()
|
||
|
|
if user == "admin" and password == "12345":
|
||
|
|
login.destroy()
|
||
|
|
abre_janela_principal()
|
||
|
|
else:
|
||
|
|
messagebox.showerror("Erro", "User ou password incorretos!")
|
||
|
|
|
||
|
|
is_playing = False
|
||
|
|
video_position = 0
|
||
|
|
transcribed_text = ""
|
||
|
|
|
||
|
|
def abre_janela_principal():
|
||
|
|
janela_principal = tk.Tk()
|
||
|
|
janela_principal.title("Kl3z - PJ- AI")
|
||
|
|
janela_principal.geometry('800x500')
|
||
|
|
|
||
|
|
menu_bar = Menu(janela_principal)
|
||
|
|
carregar_menu = Menu(menu_bar, tearoff=0)
|
||
|
|
carregar_menu.add_command(label="Carregar video", command=carregar_video)
|
||
|
|
carregar_menu.add_command(label="Carregar audio", command=carregar_audio)
|
||
|
|
carregar_menu.add_separator()
|
||
|
|
carregar_menu.add_command(label="Sair", command=janela_principal.destroy)
|
||
|
|
menu_bar.add_cascade(label="Carregar informação", menu=carregar_menu)
|
||
|
|
|
||
|
|
Relatorios = Menu(menu_bar, tearoff=0)
|
||
|
|
Relatorios.add_command(label="Inserir")
|
||
|
|
Relatorios.add_command(label="Download Texto", command=baixar_texto)
|
||
|
|
menu_bar.add_cascade(label="Relatórios", menu=Relatorios)
|
||
|
|
|
||
|
|
Opcoes = Menu(menu_bar, tearoff=0)
|
||
|
|
Opcoes.add_command(label="Baixar texto", command=baixar_texto)
|
||
|
|
Opcoes.add_command(label="Definições2")
|
||
|
|
menu_bar.add_cascade(label="Opções", menu=Opcoes)
|
||
|
|
|
||
|
|
janela_principal.config(menu=menu_bar)
|
||
|
|
global video
|
||
|
|
video = tk.Label(janela_principal, bg='black')
|
||
|
|
video.pack(expand=True, fill=tk.BOTH)
|
||
|
|
video.place(x=50, y=50, width=500, height=300)
|
||
|
|
janela_principal.mainloop()
|
||
|
|
|
||
|
|
def carregar_video():
|
||
|
|
global video_caminho
|
||
|
|
video_caminho = filedialog.askopenfilename(title="Selecione um vídeo", filetypes=[("Vídeos", "*.mp4;*.avi;*.mov")])
|
||
|
|
if video_caminho:
|
||
|
|
threading.Thread(target=reproduzir_video, args=(video_caminho,)).start()
|
||
|
|
|
||
|
|
def reproduzir_video(video_path):
|
||
|
|
global transcribed_text
|
||
|
|
video_clip = VideoFileClip(video_path)
|
||
|
|
video_clip.preview() # Reproduz o vídeo com áudio
|
||
|
|
|
||
|
|
# Chama a função para transcrever o áudio após a reprodução do vídeo
|
||
|
|
transcrever_audio(video_path)
|
||
|
|
|
||
|
|
def carregar_audio():
|
||
|
|
audio = filedialog.askopenfilename(title="Selecione um ficheiro audio", filetypes=[("Áudios", "*.mp3;*.wav;*.ogg")])
|
||
|
|
if audio:
|
||
|
|
os.startfile(audio)
|
||
|
|
|
||
|
|
def transcrever_audio(video_path):
|
||
|
|
global transcribed_text
|
||
|
|
audio_path = "audio.wav"
|
||
|
|
audio_segment = AudioSegment.from_file(video_path)
|
||
|
|
audio_segment.export(audio_path, format="wav")
|
||
|
|
|
||
|
|
recognizer = sr.Recognizer()
|
||
|
|
with sr.AudioFile(audio_path) as source:
|
||
|
|
audio_data = recognizer.record(source)
|
||
|
|
try:
|
||
|
|
transcribed_text = recognizer.recognize_google(audio_data, language="pt-BR")
|
||
|
|
print("Transcrição: ", transcribed_text)
|
||
|
|
except sr.UnknownValueError:
|
||
|
|
print("Não foi possível entender o áudio")
|
||
|
|
except sr.RequestError:
|
||
|
|
print("Erro ao solicitar resultados da API")
|
||
|
|
|
||
|
|
def baixar_texto():
|
||
|
|
if transcribed_text:
|
||
|
|
caminho_arquivo = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt")])
|
||
|
|
if caminho_arquivo:
|
||
|
|
with open(caminho_arquivo, 'w', encoding='utf-8') as f:
|
||
|
|
f.write(transcribed_text)
|
||
|
|
messagebox.showinfo("Sucesso", "Texto salvo com sucesso!")
|
||
|
|
else:
|
||
|
|
messagebox.showwarning("Atenção", "Nenhum texto transcrito para salvar.")
|
||
|
|
|
||
|
|
# Janela de login
|
||
|
|
login = tk.Tk()
|
||
|
|
login.title("Login")
|
||
|
|
login.geometry("300x200")
|
||
|
|
label_usuario = tk.Label(login, text="Usuário:")
|
||
|
|
label_usuario.pack(pady=5)
|
||
|
|
userdig = tk.Entry(login)
|
||
|
|
userdig.pack(pady=5)
|
||
|
|
label_senha = tk.Label(login, text="Senha:")
|
||
|
|
label_senha.pack(pady=5)
|
||
|
|
passdig = tk.Entry(login, show="*")
|
||
|
|
passdig.pack(pady=5)
|
||
|
|
botao_login = tk.Button(login, text="Login", command=validar_login)
|
||
|
|
botao_login.pack(pady=20)
|
||
|
|
login.mainloop()
|
||
|
|
|
||
|
|
|
||
|
|
|