| import requests |
| import json |
| import os |
| from typing import Dict, Any |
|
|
| |
| |
| |
| BASE_URL = "https://kodermax-giga-am.hf.space" |
| API_URL = f"{BASE_URL}/api/transcribe" |
| HEALTH_URL = f"{BASE_URL}/api/health" |
| INFO_URL = f"{BASE_URL}/api/info" |
|
|
| class GigaAMClient: |
| """Клиент для взаимодействия с GigaAM API""" |
| |
| def __init__(self, base_url: str = BASE_URL): |
| self.base_url = base_url |
| self.api_url = f"{base_url}/api/transcribe" |
| self.health_url = f"{base_url}/api/health" |
| self.info_url = f"{base_url}/api/info" |
| |
| def health_check(self) -> Dict[str, Any]: |
| """Проверка работоспособности API""" |
| try: |
| response = requests.get(self.health_url) |
| response.raise_for_status() |
| return response.json() |
| except requests.RequestException as e: |
| return {"error": f"Ошибка подключения: {e}"} |
| |
| def get_app_info(self) -> Dict[str, Any]: |
| """Получение информации о приложении""" |
| try: |
| response = requests.get(self.info_url) |
| response.raise_for_status() |
| return response.json() |
| except requests.RequestException as e: |
| return {"error": f"Ошибка подключения: {e}"} |
| |
| def transcribe_file(self, file_path: str) -> Dict[str, Any]: |
| """ |
| Распознавание речи из аудиофайла |
| |
| Args: |
| file_path: Путь к аудиофайлу |
| |
| Returns: |
| Результат распознавания |
| """ |
| if not os.path.exists(file_path): |
| return {"error": f"Файл не найден: {file_path}"} |
| |
| try: |
| with open(file_path, 'rb') as f: |
| files = {'file': (os.path.basename(file_path), f, 'audio/mpeg')} |
| response = requests.post(self.api_url, files=files) |
| |
| if response.status_code == 200: |
| return response.json() |
| else: |
| return { |
| "error": f"HTTP ошибка {response.status_code}", |
| "detail": response.text |
| } |
| |
| except requests.RequestException as e: |
| return {"error": f"Ошибка запроса: {e}"} |
| except Exception as e: |
| return {"error": f"Внутренняя ошибка: {e}"} |
| |
| def print_transcription_result(self, result: Dict[str, Any]): |
| """Красивый вывод результата распознавания""" |
| if "error" in result: |
| print(f"❌ Ошибка: {result['error']}") |
| return |
| |
| if not result.get("success"): |
| print(f"❌ Распознавание не удалось: {result.get('error', 'Неизвестная ошибка')}") |
| return |
| |
| print(f"✅ Распознавание успешно завершено!") |
| print(f"📊 Всего сегментов: {len(result['segments'])}") |
| print(f"⏱️ Общая длительность: {result.get('total_duration', 0):.2f} сек") |
| print("\n📝 Распознанный текст:") |
| print("=" * 50) |
| |
| for i, segment in enumerate(result["segments"], 1): |
| print(f"{i:2d}. [{segment['start_formatted']} - {segment['end_formatted']}]: {segment['text']}") |
| |
| print("=" * 50) |
|
|
|
|
| def main(): |
| """Основная функция с примерами использования""" |
| |
| |
| client = GigaAMClient() |
| |
| print("🎤 GigaAM API Клиент") |
| print("=" * 30) |
| |
| |
| print("\n1. Проверка работоспособности API...") |
| health = client.health_check() |
| if "error" not in health: |
| print(f"✅ API работает! Статус: {health.get('status')}") |
| print(f"📦 Модель: {health.get('model', {}).get('model_name', 'Unknown')}") |
| else: |
| print(f"❌ API недоступно: {health['error']}") |
| return |
| |
| |
| print("\n2. Информация о приложении...") |
| info = client.get_app_info() |
| if "error" not in info: |
| print(f"📱 Приложение: {info.get('app_name')} v{info.get('version')}") |
| print(f"📁 Поддерживаемые форматы: {', '.join(info.get('supported_formats', []))}") |
| print(f"📏 Макс. размер файла: {info.get('max_file_size_mb')}MB") |
| |
| |
| print("\n3. Распознавание аудиофайла...") |
| |
| |
| test_file = "audio.mp3" |
| |
| if not os.path.exists(test_file): |
| print(f"⚠️ Тестовый файл '{test_file}' не найден.") |
| print("Создайте тестовый аудиофайл или измените переменную test_file") |
| |
| |
| if "error" not in info: |
| print(f"\nПоддерживаемые форматы: {', '.join(info.get('supported_formats', []))}") |
| else: |
| print(f"📁 Обработка файла: {test_file}") |
| result = client.transcribe_file(test_file) |
| client.print_transcription_result(result) |
| |
| |
| |
| |
| |
| |
| |
| |
| print("\n🎉 Примеры завершены!") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|