Files
audio_resive/functions/convert.py
T

72 lines
3.9 KiB
Python
Executable File

import requests
class Converter:
"""
Этот класс выполняет главную функцию, конвертирует голос в текст
"""
def __init__(self, path_to_file: str, message, model, language: str = "ru-RU"):
self.language = language
self.path_to_file = path_to_file
self.service = None
self.message = message
self.model = model
def audio_to_text(self) -> str:
"""
Основная функция
:return: str - текст + служебная информация
"""
r = requests.get("http://192.168.0.108:5000/ping")
if r.status_code == 200:
response = requests.post("http://192.168.0.108:5000/decrypt_audio",
files={"file": open(self.path_to_file, "rb").read()})
if response.status_code == 200:
return f"От компа:\n{response.text}"
else:
return 'Не удалось получить текст.'
else:
result = self.model.transcribe(self.path_to_file)
return result["text"]
# def google(self, f) -> str:
# """
# Функция работающая с stt google
#
# :return: str - текст + служебная информация
# """
# subprocess.run(['ffmpeg', '-v', 'quiet', '-i', self.path_to_file, self.path_to_file.replace(".ogg", ".wav")])
# # перевод ogg в wav
# try:
# os.remove(self.path_to_file) # удаляю файл
# wav_file = self.path_to_file.replace(".ogg", ".wav") # замена в ссылке на файл ogg в wav
# r = sr.Recognizer() # создаю объект google stt
# with sr.AudioFile(wav_file) as source: # получаю байты из файла
# audio = r.record(source) # получаю файл в нужном google stt формате байт
# r.adjust_for_ambient_noise(source) # мини очистка шума
# try:
# response = "google\n\n" + r.recognize_google(audio, language=self.language) # получение текста
# loging(self.message, "google", wav_file, response, f) # записываю логи
# os.remove(wav_file) # удаляю лишние файлы
# return response # возвращаю текст
# except sr.UnknownValueError: # ошибка распознавания текста
# return "google\n\n Слова не распознаны, вы что вообще мне впихнуть пытаетесь" # возвращаю ошибочное
# # сообщение
# except FileNotFoundError: # ошибка файла(из-за веса telegram не пускает)
# return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки
#
# def yandex(self, f) -> str:
# """
# Функция работающая с stt yandex
#
# :return: str - текст + служебная информация
# """
# from speechkit import ShortAudioRecognition, Session # импортирую сесию и объект для stt
# reg = ShortAudioRecognition(Session.from_api_key("AQVN3xNJamAFP4_FS6Gis0Uud0vONFk24umBSXvh")) # получаю
# # объект для расшифровки
# response = "yandex\n\n" + reg.recognize(open(str(self.path_to_file), str('rb')).read()) # получаю весь текст
# loging(self.message, "yandex", self.path_to_file, response, f) # записываю логи
# os.remove(self.path_to_file) # удаляю лишние файлы
# return response # возвращаю ответ