SPR. Руководство пользователя: различия между версиями
Материал из Флора AI
Нет описания правки |
|||
| Строка 23: | Строка 23: | ||
|- | |- | ||
! style="color:blue;width: 15%"|'''GET:/spr/''' | ! style="color:blue;width: 15%"|'''GET:/spr/''' | ||
! colspan="3" |<small>Вывод списка моделей</small> | ! colspan="3" |<small>Вывод списка моделей.</small> | ||
|- | |- | ||
| colspan="3" |<small>Без входных параметров</small> | | colspan="3" |<small>Без входных параметров</small> | ||
|<small>{ models: [model1,...,modelN] }</small> | |<small><code>{ models: [model1,...,modelN] }</code></small> | ||
|- | |- | ||
! style="color:blue;width: 15%"|'''GET:/spr/audio/{taskID}''' | ! style="color:blue;width: 15%"|'''GET:/spr/audio/{taskID}''' | ||
! colspan="3" |<small>Получение файла аудиозаписи отложенного задания</small> | ! colspan="3" |<small>Получение файла аудиозаписи отложенного задания.</small> | ||
|- | |- | ||
| colspan="3" |<small>'''taskID''' - идентификатор задания</small> | | colspan="3" |<small>'''taskID''' - идентификатор задания</small> | ||
|<small>Файл аудиозаписи или</small> <small>{ error: INT , message: DESCRIPTION }</small> | |<small>Файл аудиозаписи или</small> <small><code>{ error: INT , message: DESCRIPTION }</code></small> | ||
|- | |- | ||
! style="color:blue;width: 15%"|'''GET:/spr/data/{id}''' | ! style="color:blue;width: 15%"|'''GET:/spr/data/{id}''' | ||
! colspan="3" |<small>Получение архива модели</small> | ! colspan="3" |<small>Получение архива модели.</small> | ||
|- | |- | ||
| colspan="3" |<small>'''id''' - идентификатор модели</small> | | colspan="3" |<small>'''id''' - идентификатор модели</small> | ||
|<small>ZIP-файл с моделью, либо { error: INT , message: DESCRIPTION }</small> | |<small>ZIP-файл с моделью, либо <code>{ error: INT , message: DESCRIPTION }</code></small> | ||
|- | |- | ||
!style="color:green;width: 15%"|'''POST:/spr/data/{id}''' | !style="color:green;width: 15%"|'''POST:/spr/data/{id}''' | ||
| Строка 50: | Строка 50: | ||
'''<small>from-existing-model</small>''' <small>- название модели, которая должна перемещена на место '''id'''</small> | '''<small>from-existing-model</small>''' <small>- название модели, которая должна перемещена на место '''id'''</small> | ||
|<small>{ error: INT, message: DESCRIPTION }</small> | |<small><code>{ error: INT, message: DESCRIPTION }</code></small> | ||
|- | |- | ||
!style="color:red;width: 15%"|'''DELETE:/spr/data/{id}''' | !style="color:red;width: 15%"|'''DELETE:/spr/data/{id}''' | ||
! colspan="3" |<small>Удаление модели</small> | ! colspan="3" |<small>Удаление модели.</small> | ||
|- | |- | ||
| colspan="3" |<small>id - идентификатор модели</small> | | colspan="3" |<small>id - идентификатор модели</small> | ||
|<small>{ error: INT, message: DESCRIPTION }</small> | |<small><code>{ error: INT, message: DESCRIPTION }</code></small> | ||
|- | |- | ||
! style="color:blue;width: 15%"|'''GET:/spr/queue''' | ! style="color:blue;width: 15%"|'''GET:/spr/queue''' | ||
! colspan="3" |<small>Получение очереди отложенных заданий на распознавание</small> | ! colspan="3" |<small>Получение очереди отложенных заданий на распознавание.</small> | ||
|- | |- | ||
| colspan="3" |<small>Без входных параметров</small> | | colspan="3" |<small>Без входных параметров</small> | ||
|<small>{</small> | |<small><code>{</code></small> | ||
<small> | <small><code>"id задания":</code></small> | ||
<small> | <small><code>{</code></small> | ||
<small> " | <small><code> "created": "ХХХХ-ХХ-ХХ ХХ:ХХ:ХХ",</code></small> | ||
<small> " | <small><code> "status": "waiting", # ready | waiting | failed</code></small> | ||
<small> | <small><code> "filename": "wav"</code></small> | ||
<small>} | <small><code>}</code></small> | ||
<small> | <small><code>}</code></small> | ||
|- | |- | ||
!style="color:red;width: 15%"|'''DELETE:/spr/queue/{taskID}''' | !style="color:red;width: 15%"|'''DELETE:/spr/queue/{taskID}''' | ||
! colspan="3" |<small>Удаление отложенных заданий на распознавание</small> | ! colspan="3" |<small>Удаление отложенных заданий на распознавание.</small> | ||
|- | |- | ||
| colspan="3" |<small>taskID - идентификатор задания в очереди</small> | | colspan="3" |<small>taskID - идентификатор задания в очереди</small> | ||
|<small>{</small> | |<small><code>{</code></small> | ||
<small>"error": 0,</small> | <small><code>"error": 0,</code></small> | ||
<small>"message": "success"</small> | <small><code>"message": "success"</code></small> | ||
<small>}</small> | <small><code>}</code></small> | ||
|- | |- | ||
!style="color:green;width: 15%"|'''POST:/spr/stt/{id}''' | !style="color:green;width: 15%"|'''POST:/spr/stt/{id}''' | ||
| Строка 141: | Строка 137: | ||
<small>"вежливость": 0.53</small> | <small>"вежливость": 0.53</small> | ||
| Строка 146: | Строка 143: | ||
<small>Высказывание анализируется на эмоциональность (negative, neutral, positive)</small> | <small>Высказывание анализируется на эмоциональность (negative, neutral, positive)</small> | ||
| Строка 156: | Строка 154: | ||
<small>пол (male female)</small> | <small>пол (male female)</small> | ||
| style="width: 50%" |<small>В случае '''async=1''' возвращается только '''taskID''', результат по taskID смотреть в методе /spr/result.</small> | | style="width: 50%" |<small>В случае '''async=1''' возвращается только '''taskID''', результат по taskID смотреть в методе /spr/result.</small> | ||
<small>'''Для коротких файлов''':{</small> | <small>'''Для коротких файлов''':</small> | ||
<small><code>{</code></small> | |||
<small><code> "model": "call",</code></small> | |||
<small> " | <small><code> "text": "текст фрагментв",</code></small> | ||
<small> " | <code><small> "words": [</small><small> </small></code> | ||
< | <code><small>{</small><small> "word": "текст",</small></code> | ||
<small> "start": 520,</small> | <small><code> "start": 520,</code></small> | ||
<small> "stop": 1240</small><small> },</small> | <code><small> "stop": 1240</small><small> },</small></code> | ||
<small> {</small><small> "word": "фрагмента",</small> | <code><small> {</small><small> "word": "фрагмента",</small></code> | ||
<small> "start": 1240,</small> | <small><code> "start": 1240,</code></small> | ||
<small> "stop": 1920</small><small> } | <code><small> "stop": 1920</small><small> }</small></code> | ||
<small> | <code><small>]</small></code> | ||
<small> | <code><small>}</small></code> | ||
<small> | <small>'''Для транскрибации больших файлов:'''</small> | ||
<small> | <small><code>{</code></small> | ||
<small> | <small><code>"speakers": [</code></small> | ||
<small> | <small><code> { </code></small> | ||
<small> | <small><code>"id": null,</code></small> | ||
<small> | <small><code> "duration": 18980,</code></small> | ||
<small> | <small><code> "fragments": 3,</code></small> | ||
<small> " | <small><code> "age": "old", # только для voice_analyzer=1</code></small> | ||
<small> " | <small><code> "gender": "female" # только для voice_analyzer=1</code></small> | ||
<small> | <small><code>}</code></small> | ||
<small> | <small><code>],</code></small> | ||
<small> | <small><code>"splitted": [</code></small> | ||
<small> | <small><code> {</code></small> | ||
<small> | <small><code>"start": "00:00:01.870",</code></small> | ||
<small> | <small><code> "text": "текст.",</code></small> | ||
<small> | <small><code> "words": [</code></small> | ||
<small> | <small><code> { </code></small> | ||
<small> | <small><code>"word": "текст.",</code></small> | ||
<small> " | <small><code> "start": 1870,</code></small> | ||
<small> " | <small><code> "stop": 2710,</code></small> | ||
<small> " | <small><code> "confidence": 0.95263671875</code></small> | ||
<small> | <small><code>}</code></small> | ||
<small> | <small><code>],</code></small> | ||
<small> " | <small><code> "stop": "00:00:05.510",</code></small> | ||
<small> " | <small><code> "channel": 0,</code></small> | ||
<small> " | <small><code> "duration": "00:00:03.640",</code></small> | ||
<small> | <small><code> "start_ms": 1870,</code></small> | ||
<small> | <small><code> "stop_ms": 5510,</code></small> | ||
<small> | <small><code> "duration_ms": 3640,</code></small> | ||
<small> | <small><code> "speaker": 4,</code></small> | ||
<small> " | <small><code> "speakerConfidence": 0.87,</code></small> | ||
<small> " | <small><code> "toxicity": { # только для toxicity=1</code></small> | ||
<small> " | <small><code> "insult": 0,</code></small> | ||
<small> | <small><code> "obscenity": 0,</code></small> | ||
<small> " | <small><code> "threat": 0,</code></small> | ||
<small><code> "politeness": 0.99</code></small> | |||
<small><code>},</code></small> | |||
<small><code> "emotion": { "neutral": -0.3315 }, # только для emotion=1</code></small> | |||
<small><code> "voice_analysis": { # только для voice_analyzer=1</code></small> | |||
<small><code> "emotion": {</code></small> | |||
<small><code> "class": "NEUTRAL",</code></small> | |||
<small><code> "confidence": 0.7554781436920166 } </code></small> | |||
<small><code>}</code></small> | |||
<small><code>}</code></small> | |||
<small><code>]</code></small> | |||
<small><code>}</code></small> | |||
|- | |- | ||
! style="color:blue;width: 15%"|'''GET:/spr/result/{taskID}''' | ! style="color:blue;width: 15%"|'''GET:/spr/result/{taskID}''' | ||
! colspan="3" |Получение результата отложенного распознавания | ! colspan="3" |<small>Получение результата отложенного распознавания.</small> | ||
|- | |- | ||
| colspan="2" |<small>'''taskID''' - идентификатор задания</small> | | colspan="2" |<small>'''taskID''' - идентификатор задания</small> | ||
| Строка 262: | Строка 286: | ||
|- | |- | ||
! style="color:blue;width: 15%"|'''GET:/spr/waveform/{taskID}''' | ! style="color:blue;width: 15%"|'''GET:/spr/waveform/{taskID}''' | ||
! colspan="3" |Служебный метод для отображения аудио в графическом виде, содержит пики сигнала | ! colspan="3" |<small>Служебный метод для отображения аудио в графическом виде, содержит пики сигнала.</small> | ||
|- | |- | ||
| style="width: 50%" colspan="2" |<small>'''taskID''' - идентификатор задания</small> | | style="width: 50%" colspan="2" |<small>'''taskID''' - идентификатор задания</small> | ||
| colspan="2" |<small> | | colspan="2" |<small><code>{</code></small> | ||
<small> | <small><code>"error": 0,</code></small> | ||
<small> | <small><code>"waveform": [</code></small> | ||
<small> | <small><code>0.016,</code></small> | ||
<small> | <small><code> 0.015,</code></small> | ||
<small> | <small><code> 0.01</code></small> | ||
<small>]</small> | <small><code>]</code></small> | ||
<small>}</small> | <small><code>}</code></small> | ||
|} | |} | ||
Версия от 12:30, 21 октября 2024
Общее описание
Сервис Short phrase recognizer предназначен для преобразования речи в текст. Принимает на вход аудиофайл в формате wav и возвращает структурированные данные в формате JSON.
Термины и определения
Short Phrase Recognizer (SPR) - сервис распознавания речи.
Модель — предварительно обученная специализированная нейронная сеть для распознавания естественной речи в аудиозаписях.
Swagger UI – интерактивная веб-консоль с кратким описанием методов АPI и возможностью выполнять запросы к сервису SPR в реальном времени
Описание методов API SPR
Запросы осуществляются по протоколу HTTP 1.1 на адрес сервера с доступным сервисом SPR. По умолчанию используется порт 6183/tcp.
Авторизация запросов не требуется. HTTP-запросы должны содержать заголовок "accept: application/json"
Ответ сервиса представляет собой JSON-документ в кодировке UTF-8 или двоичный файл. Содержимое документа зависит от результата выполнения запроса. При наличии ошибки в качестве ответа вернется переменная error=1 и описание в переменной message. Для удобства проверки методов по ссылке http://АДРЕС:6183 будет отображен интерфейс swagger со всеми методами с возможностью их проверки.
| GET:/spr/ | Вывод списка моделей. | ||
|---|---|---|---|
| Без входных параметров | { models: [model1,...,modelN] }
| ||
| GET:/spr/audio/{taskID} | Получение файла аудиозаписи отложенного задания. | ||
| taskID - идентификатор задания | Файл аудиозаписи или { error: INT , message: DESCRIPTION }
| ||
| GET:/spr/data/{id} | Получение архива модели. | ||
| id - идентификатор модели | ZIP-файл с моделью, либо { error: INT , message: DESCRIPTION }
| ||
| POST:/spr/data/{id} | Добавление модели. Может быть добавлена как из файла архива, так и переименованием существующей модели. | ||
| id - идентификатор модели, обязательный параметр.
zip-model - zip-архив с файлами модели или from-existing-model - название модели, которая должна перемещена на место id |
{ error: INT, message: DESCRIPTION }
| ||
| DELETE:/spr/data/{id} | Удаление модели. | ||
| id - идентификатор модели | { error: INT, message: DESCRIPTION }
| ||
| GET:/spr/queue | Получение очереди отложенных заданий на распознавание. | ||
| Без входных параметров | {
| ||
| DELETE:/spr/queue/{taskID} | Удаление отложенных заданий на распознавание. | ||
| taskID - идентификатор задания в очереди | {
| ||
| POST:/spr/stt/{id} | Отправка файла на распознавание речи. Моно-файлы до 30 секунд распознаются без разбивки на фрагменты. Многоканальные файлы и файлы длиннее 30 секунд предварительно разбиваются на фрагменты по отсутствию речи. Настройка данных параметров описана в руководстве администратора. | ||
В случае отправки переменной speakers=1, дополнительно производится поиск говорящих и получение метаданных по каждому говорящему. (используется сервис sbs с предварительно обученными слепками метаданных говорящих) В случае отправки переменной punctuation=1, дополнительно вызывает метод punctuate в SMC, и расставляет знаки препинания в распознанном тексте (значение по умолчанию берётся из файлы конфигурации). normalization=1 для обратной нормализации текста. В случае использования модели big параметры punctuation и normalization игнорируются - модель всегда расставляет знаки препинания и нормализует текст.
При установке параметра toxicity запрашивается в smc метод GET/smc/toxicity Высказывание анализируется по 4 параметрам, по каждому выдается вероятность от 0 до 1: "оскорбление": 0.13, "непристойность": 0, "угроза": 0, "вежливость": 0.53
При установке параметра emotion запрашивается в smc метод GET/smc/emotion Высказывание анализируется на эмоциональность (negative, neutral, positive)
При установке параметра voice_analyzer запрашивается в sbs метод POST/sbs/analyze. Аудио говорящего анализируется на возраст (child adult old) эмоции (ANGER BORE DISAPPOINTMENT DISGUST EXCITEMENT FEAR NEUTRAL PAIN PLEASURE SADNESS SUPRISE) пол (male female) |
В случае async=1 возвращается только taskID, результат по taskID смотреть в методе /spr/result.
Для коротких файлов:
Для транскрибации больших файлов:
| ||
| GET:/spr/result/{taskID} | Получение результата отложенного распознавания. | ||
| taskID - идентификатор задания | Вывод по окончанию распознавания аналогичен выводу метода stt + добавлено поле status, которое содержит информацию о статусе отложенной задачи:
ready - готово waiting - ожидание not found - не найдена failed - сбой | ||
| GET:/spr/waveform/{taskID} | Служебный метод для отображения аудио в графическом виде, содержит пики сигнала. | ||
| taskID - идентификатор задания | {
| ||