Files
my_speaker_RPi3/docs/API_DOCUMENTATION.md
T
2025-12-25 12:01:35 +03:00

378 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Документация 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
- Для всех запросов, требующих авторизации, необходимо передавать токен доступа
- Параметры в запросах на обновление настроек являются опциональными, можно передавать только те параметры, которые нужно изменить