first commit
This commit is contained in:
+115
@@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Клиент для взаимодействия с сервисом распознавания речи через REST API.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import requests
|
||||
import sys
|
||||
|
||||
|
||||
class TranscribeClient:
|
||||
"""
|
||||
Класс для взаимодействия с сервисом распознавания речи через REST API.
|
||||
"""
|
||||
|
||||
def __init__(self, server_url="http://localhost:5000"):
|
||||
"""
|
||||
Инициализация клиента.
|
||||
|
||||
Args:
|
||||
server_url: URL сервера распознавания.
|
||||
"""
|
||||
self.server_url = server_url
|
||||
|
||||
def health(self):
|
||||
"""
|
||||
Проверка статуса сервиса.
|
||||
|
||||
Returns:
|
||||
Словарь с информацией о статусе сервиса или None при ошибке.
|
||||
"""
|
||||
endpoint = f"{self.server_url}/health"
|
||||
try:
|
||||
response = requests.get(endpoint, timeout=10)
|
||||
if response.status_code == 200:
|
||||
return response.json()
|
||||
else:
|
||||
print(f"Ошибка health check: {response.status_code}")
|
||||
return None
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Ошибка при выполнении health check: {e}")
|
||||
return None
|
||||
|
||||
def transcribe(self, file_path):
|
||||
"""
|
||||
Отправка файла на транскрибацию.
|
||||
|
||||
Args:
|
||||
file_path: Путь к аудиофайлу.
|
||||
|
||||
Returns:
|
||||
Словарь с результатом транскрибации или None при ошибке.
|
||||
"""
|
||||
# Проверка существования файла
|
||||
if not os.path.exists(file_path):
|
||||
print(f"Ошибка: Файл '{file_path}' не найден")
|
||||
return None
|
||||
|
||||
# Формирование абсолютного пути к файлу
|
||||
absolute_path = os.path.abspath(file_path)
|
||||
|
||||
# Подготовка данных для запроса
|
||||
payload = {"file_path": absolute_path}
|
||||
|
||||
# Запрос на транскрибацию
|
||||
endpoint = f"{self.server_url}/local/transcriptions"
|
||||
|
||||
try:
|
||||
# Отправка запроса
|
||||
response = requests.post(endpoint, json=payload, timeout=600) # Таймаут 10 минут
|
||||
|
||||
# Обработка ответа
|
||||
if response.status_code == 200:
|
||||
result = response.json()
|
||||
return result
|
||||
else:
|
||||
print(f"Ошибка запроса: {response.status_code}")
|
||||
if response.headers.get('content-type') == 'application/json':
|
||||
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
|
||||
else:
|
||||
print(response.text)
|
||||
return None
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Ошибка при отправке запроса: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
"""Основная функция клиента."""
|
||||
parser = argparse.ArgumentParser(description="Клиент для сервиса распознавания речи")
|
||||
parser.add_argument("file_path", help="Путь к аудиофайлу для транскрибации")
|
||||
parser.add_argument("--server", help="URL сервера распознавания", default="http://localhost:5042")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Создание экземпляра клиента
|
||||
client = TranscribeClient(args.server)
|
||||
|
||||
# Запуск транскрибации
|
||||
result = client.transcribe(args.file_path)
|
||||
|
||||
if result:
|
||||
print(json.dumps(result, indent=2, ensure_ascii=False))
|
||||
return result
|
||||
|
||||
else:
|
||||
print("Что-то пошло не так 🤔")
|
||||
return None
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user