378 lines
7.2 KiB
Markdown
378 lines
7.2 KiB
Markdown
# Документация API My Speaker
|
||
|
||
## Общая информация
|
||
|
||
API My Speaker предоставляет интерфейс для взаимодействия с системой распознавания речи, управления настройками и получения данных о работе системы. API построено на FastAPI и использует REST-подход.
|
||
|
||
Базовый URL: `/api`
|
||
|
||
## Аутентификация
|
||
|
||
Все запросы к API (кроме авторизации) требуют аутентификации. Аутентификация осуществляется с помощью токена доступа, который можно получить через эндпоинт `/api/auth/login`.
|
||
|
||
Токен можно передавать одним из следующих способов:
|
||
|
||
1. В заголовке `Authorization: Bearer <token>`
|
||
2. В параметре запроса `?token=<token>`
|
||
|
||
### Эндпоинты аутентификации
|
||
|
||
#### Авторизация
|
||
|
||
```
|
||
POST /api/auth/login
|
||
```
|
||
|
||
**Запрос:**
|
||
|
||
```json
|
||
{
|
||
"username": "admin",
|
||
"password": "your_password"
|
||
}
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"access_token": "unique_session_token",
|
||
"token_type": "bearer"
|
||
}
|
||
```
|
||
|
||
#### Получение информации о текущем пользователе
|
||
|
||
```
|
||
GET /api/auth/me
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"username": "admin",
|
||
"is_authenticated": true
|
||
}
|
||
```
|
||
|
||
#### Выход из системы
|
||
|
||
```
|
||
POST /api/auth/logout
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "Выход выполнен успешно"
|
||
}
|
||
```
|
||
|
||
## Панель управления (Dashboard)
|
||
|
||
Все запросы к эндпоинтам панели управления выполняются с использованием токена полученного при авторизации.
|
||
|
||
### Получение данных о речи
|
||
|
||
````
|
||
GET /api/dashboard/speech-data
|
||
curl -X 'GET' \
|
||
'http://192.168.200.111:8000/api/dashboard/sys-monitor' \
|
||
-H 'accept: application/json' \
|
||
-H 'Authorization: Bearer dc1460d1-6e67-4730-afb2-c94de7d243b4'
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"state": "listening",
|
||
"speech_prob": 0.85,
|
||
"speech_threshold": 0.5,
|
||
"energy": 1200,
|
||
"energy_threshold": 1000,
|
||
"speech_detected": true,
|
||
"continuous_frames": 5,
|
||
"gain": 1.2,
|
||
"noise_floor": 300
|
||
}
|
||
````
|
||
|
||
### Получение данных о нагрузке системы
|
||
|
||
```
|
||
GET /api/dashboard/sys-monitor
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"cpu_percent": 25.5,
|
||
"memory_percent": 40.2,
|
||
"temperature": 45.3
|
||
}
|
||
```
|
||
|
||
### Получение последних распознанных фраз
|
||
|
||
```
|
||
GET /api/dashboard/recent-phrases?limit=10
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
[
|
||
{
|
||
"text": "включи свет",
|
||
"timestamp": "2023-06-15T14:30:45",
|
||
"is_command": true
|
||
},
|
||
{
|
||
"text": "какая погода сегодня",
|
||
"timestamp": "2023-06-15T14:29:30",
|
||
"is_command": false
|
||
}
|
||
]
|
||
```
|
||
|
||
### Получение статистики работы системы
|
||
|
||
```
|
||
GET /api/dashboard/stats
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"uptime": "2:30:15",
|
||
"recognized_commands": 15,
|
||
"total_phrases": 45
|
||
}
|
||
```
|
||
|
||
## Настройки (Settings)
|
||
|
||
Все запросы к эндпоинтам настроек выполняются с использованием токена полученного при авторизации.
|
||
|
||
### Получение всех настроек
|
||
|
||
```
|
||
GET /api/settings
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"vad": {
|
||
"mode": 3,
|
||
"sample_rate": 16000,
|
||
"frame_duration_ms": 30,
|
||
"ring_buffer_size": 20,
|
||
"speech_threshold": 0.5,
|
||
"energy_threshold": 1000,
|
||
"min_speech_duration_ms": 300,
|
||
"record_stop_delay_sec": 1.0,
|
||
"prebuffer_duration_sec": 1.0,
|
||
"max_record_duration_sec": 5.0,
|
||
"target_rms": 2000.0,
|
||
"max_gain": 5.0,
|
||
"noise_reduction_factor": 1.5,
|
||
"noise_update_alpha": 0.05,
|
||
"min_rms_threshold_factor": 2.0,
|
||
"gain_smoothing_alpha": 0.1,
|
||
"adaptive_energy_std_factor": 2.5,
|
||
"adaptive_energy": true,
|
||
"noise_reduction_enabled": true,
|
||
"auto_gain_enabled": true,
|
||
"record_on_speech": true
|
||
},
|
||
"system": {
|
||
"history_maxlen": 100,
|
||
"polling_interval_ms": 500,
|
||
"logging_level": "INFO",
|
||
"log_file": "logs/app.log",
|
||
"log_save_file": true
|
||
},
|
||
"stt": {
|
||
"model_path": "/path/to/vosk/model"
|
||
},
|
||
"commands": {
|
||
"commands_file": "commands/commands.yaml"
|
||
},
|
||
"auth": {
|
||
"username": "admin",
|
||
"password": "admin"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Обновление настроек VAD
|
||
|
||
```
|
||
PUT /api/settings/vad
|
||
```
|
||
|
||
**Запрос:**
|
||
|
||
```json
|
||
{
|
||
"mode": 3,
|
||
"speech_threshold": 0.7,
|
||
"energy_threshold": 1200
|
||
}
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"mode": 3,
|
||
"sample_rate": 16000,
|
||
"frame_duration_ms": 30,
|
||
"ring_buffer_size": 20,
|
||
"speech_threshold": 0.7,
|
||
"energy_threshold": 1200,
|
||
"min_speech_duration_ms": 300,
|
||
"record_stop_delay_sec": 1.0,
|
||
"prebuffer_duration_sec": 1.0,
|
||
"max_record_duration_sec": 5.0,
|
||
"target_rms": 2000.0,
|
||
"max_gain": 5.0,
|
||
"noise_reduction_factor": 1.5,
|
||
"noise_update_alpha": 0.05,
|
||
"min_rms_threshold_factor": 2.0,
|
||
"gain_smoothing_alpha": 0.1,
|
||
"adaptive_energy_std_factor": 2.5,
|
||
"adaptive_energy": true,
|
||
"noise_reduction_enabled": true,
|
||
"auto_gain_enabled": true,
|
||
"record_on_speech": true
|
||
}
|
||
```
|
||
|
||
### Обновление системных настроек
|
||
|
||
```
|
||
PUT /api/settings/system
|
||
```
|
||
|
||
**Запрос:**
|
||
|
||
```json
|
||
{
|
||
"history_maxlen": 200,
|
||
"polling_interval_ms": 1000
|
||
}
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"history_maxlen": 200,
|
||
"polling_interval_ms": 1000,
|
||
"logging_level": "INFO",
|
||
"log_file": "logs/app.log",
|
||
"log_save_file": true
|
||
}
|
||
```
|
||
|
||
### Обновление настроек STT
|
||
|
||
```
|
||
PUT /api/settings/stt
|
||
```
|
||
|
||
**Запрос:**
|
||
|
||
```json
|
||
{
|
||
"model_path": "/new/path/to/vosk/model"
|
||
}
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"model_path": "/new/path/to/vosk/model"
|
||
}
|
||
```
|
||
|
||
### Обновление настроек команд
|
||
|
||
```
|
||
PUT /api/settings/commands
|
||
```
|
||
|
||
**Запрос:**
|
||
|
||
```json
|
||
{
|
||
"commands_file": "commands/new_commands.yaml"
|
||
}
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"commands_file": "commands/new_commands.yaml"
|
||
}
|
||
```
|
||
|
||
### Обновление настроек авторизации
|
||
|
||
```
|
||
PUT /api/settings/auth
|
||
```
|
||
|
||
**Запрос:**
|
||
|
||
```json
|
||
{
|
||
"username": "new_admin",
|
||
"password": "new_password"
|
||
}
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"username": "new_admin",
|
||
"password": "new_password"
|
||
}
|
||
```
|
||
|
||
### Перезапуск VAD и STT
|
||
|
||
```
|
||
POST /api/settings/restart
|
||
```
|
||
|
||
**Ответ:**
|
||
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "VAD и STT перезапущены"
|
||
}
|
||
```
|
||
|
||
## Коды ошибок
|
||
|
||
- `401 Unauthorized` - Ошибка авторизации
|
||
- `500 Internal Server Error` - Внутренняя ошибка сервера
|
||
|
||
## Примечания
|
||
|
||
- Все запросы и ответы используют формат JSON
|
||
- Для всех запросов, требующих авторизации, необходимо передавать токен доступа
|
||
- Параметры в запросах на обновление настроек являются опциональными, можно передавать только те параметры, которые нужно изменить
|