File size: 6,353 Bytes
1b19071
 
 
 
 
c3e4314
 
 
 
1b19071
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import requests
import json
import os
from typing import Dict, Any

# Базовый URL API
# Для локальной разработки: http://localhost:7860
# Для HuggingFace Space: https://kodermax-giga-am.hf.space
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)
    
    # 1. Проверка работоспособности
    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
    
    # 2. Получение информации о приложении
    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")
    
    # 3. Пример распознавания файла
    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)
    
    # 4. Пример с другим файлом (раскомментируйте при необходимости)
    # print("\n4. Распознавание другого файла...")
    # another_file = "speech.wav"
    # if os.path.exists(another_file):
    #     result = client.transcribe_file(another_file)
    #     client.print_transcription_result(result)
    
    print("\n🎉 Примеры завершены!")


if __name__ == "__main__":
    main()