Проект распознавания речи на основе TensorFlowJS и WebAudioAPI для веб-версии.
//基础配置
, следуйте инструкциям по настройке параметров.//基础配置
const numberOfChannels = 1, bufferSize = 256, total_duration = 10;
const sampleRate = 8000, fft_s = 0.032, hop_s = 0.008;
const ModelDir = './ASR/Model/Network/tensorflowjs/tfjsModel/tfjs_mobilev3small_thchs30/';
const minPinYinN = 10;
const useWebWorker = true;
...
//配置完毕
numberOfChannels
будет равно 2.bufferSize
, которая обычно равна 256. Это означает, что программа обрабатывает 256 элементов массива за один раз. Если частота дискретизации составляет 8000 отсчетов в секунду, то обработка 256 отсчётов займёт 0,032 секунды.fft_s
и hop_s
. Обычно hop_s
равен 1/4 от fft_s
, что обеспечивает плавный переход между окнами преобразования. Выбор значений fft_s
влияет на разрешение по времени и частоте. Чем меньше fft_s
, тем выше разрешение по времени, но ниже разрешение по частоте. И наоборот, чем больше fft_s
, тем ниже разрешение по времени, но выше разрешение по частоте. Эти два параметра взаимоисключающие, и их нужно настраивать в зависимости от требований. Подробнее о них можно узнать в разделе «Короткое преобразование Фурье».
numberOfChannels
: количество каналов аудио. Целое число, по умолчанию 1. Максимальное значение — 32.
bufferSize
: размер буфера в кадрах. Должен быть одним из следующих значений: 0, 256, 512, 1024, 2048, 4096, 8192, 16384. Если установлено значение 0, система автоматически выбирает размер. В этом случае частота обновления кадров равнаsampleRate / bufferSize
.
total_duration
: общая длительность аудио в секундах.
sampleRate
: частота дискретизации в отсчетах в секунду. Может принимать значения 8000, 16000, 32000 или 48000.
fft_s
: длина окна преобразования Фурье в секундах.
hop_s
: интервал между окнами преобразования в секундах.Обратите внимание, что эти три параметра должны соответствовать параметрам в папке
ModelDir
, иначе модель не загрузится.
ModelDir
: папка с моделями TensorflowJS. Внутри неё должны находиться файлыmodel.json
,feature.json
и несколько файлов.bin
.minPinYinN
: целое положительное число, определяющее минимальную длину аудиофрагмента для потокового вывода. Если установить значение 4, модель будет выводить 4 фрагмента пиньинь и сохранять два средних фрагмента. При следующем выводе перекрытие фрагментов составит 4/2 = 2, так что будут сохранены два средних фрагмента из предыдущего вывода.useWebWorker
: использовать асинхронную обработку модели или нет. Если значение равноfalse
, вывод модели синхронизируется с обновлением аудио, что может привести к задержкам, но гарантирует непрерывность воспроизведения. Если значениеtrue
, вывод модели выполняется асинхронно, что позволяет избежать задержек, но может привести к накоплению задержки (до 8 секунд вначале, затем быстро уменьшается до 0,5–2 секунд).
В разделе //配置完毕
после создания экземпляра AudioFlow
можно настроить дополнительные параметры. Например, если вы не хотите, чтобы звук воспроизводился через динамики, измените строку new AudioFlow(..., 'sound');
на new AudioFlow(..., null);
Конфигурацию можно найти в комментариях к каждому классу.
Используйте проект DeepASR, чтобы преобразовать модель в формат TensorflowJS Graph Model. Этот формат включает в себя следующие файлы:
TFJSModelDir
│ feature.json
│ group1-shard1of4.bin
│ group1-shard2of4.bin
│ group1-shard3of4.bin
│ group1-shard4of4.bin
│ model.json
Скопируйте эту папку в подкаталог проекта и укажите путь к ней в переменной ModelDir
в файле main.js.
Например, я скопировал папку TFJSModel в каталог
/WebASR/Models/TFJSModel
, гдеWebASR
— корневой каталог проекта.Тогда переменная
ModelDir
должна выглядеть следующим образом://基础配置 ... const ModelDir = './Models/TFJSModel/'; ...Вы можете также создать свою модель TensorflowJS, изучив формат входных и выходных данных модели и документацию TensorflowJS. ``` const audioFlowProcesser = new AudioFlowProcesser( null, // audioSource = null, 暂不指定音频源。 'sound', //audioDestination = 'sound', 音频会输出到扬声器 8000, //sampleRate = 8000, 指定采样率为8000 undefined, //latencyHint = undefined, 不指定latencyHint,让系统自动选择 256, //ScriptNode_bufferSize = 256, 缓冲区大小为256(采样帧),结合上面指定采样率为8000,得到音频刷新帧率为8000/256 = 31.25 FPS。 1, //ScriptNode_numberOfInputChannels = 1, 声道数为1。 processAudioData = (audioData) => { const audioClipInfo = { "音频采样率":audioData.sampleRate , "音频数据":audioData.channels , "音频末尾时间戳":audioData.audioEndTime ,
"音频声道数":audioData.numberOfChannels ,
"音频帧数":audioData.sampleLength ,
"音频时长":audioData.timeLength ,
"音频开头时间戳":audioData.audioStartTime
};
console.log(`收到音频小片段:${audioClipInfo}`);
}, );
async function addMicrophone(){ const recordStream = await navigator.mediaDevices.getUserMedia( {audio: true}); //开启麦克风 audioFlowProcesser.addAudioSource(recordStream); //audioFlowProcesser加入麦克风音频源 };
audioFlowProcesser.open(); audioFlowProcesser.start();
addMicrophone();
Если указано, bufferSize должен быть одним из следующих значений: 256, 512, 1024, 2048, 4096, 8192 или 16384. Если не передано или значение равно нулю, реализация выберет оптимальный размер буферной зоны для данной среды. В течение всего жизненного цикла узла этот размер будет равен степени двойки. Это значение контролирует частоту распределения событий audioprocess и количество кадров выборки, которые необходимо обработать при каждом вызове. Меньший размер буфера приведёт к меньшему (лучшему) времени задержки. Более высокие значения необходимы для предотвращения разделения звука и сбоев. Рекомендуется не указывать этот размер буферной зоны, а позволить реализации выбрать хороший размер буферной зоны для баланса между задержкой и качеством звука.
**AudioFlow**
AudioFlow — это дальнейшее расширение AudioProcesser, добавляющее множество полезных функций, таких как рисование потоковых аудиосигналов, потоковые вычисления кратковременного преобразования Фурье и построение графиков, а также вызов моделей распознавания речи для вывода. Его внутренняя логика основана на событиях. Каждый раз, когда функция processAudioData в AudioProcesser получает фрагмент audioData, она запускает соответствующее событие и начинает выполнять последующие процессы обработки, такие как построение графика и объединение, обновление всего графика сигнала; если включено вычисление спектра, то каждый раз, когда вычисляется часть спектра, запускается соответствующее событие, и можно настроить последующие процессы обработки.
API-интерфейсы включают:
* openAudio — начать приём аудио;
* keepAudio — сохранить недавно полученный звук;
* openWaveDraw — начать рисовать аудиосигнал;
* openStft — начать вычислять кратковременный спектр Фурье аудиосигнала;
* keepStft — сохранить часть спектра;
* openStftDraw — начать строить график спектра;
* openASR — начать распознавание речи;
* keepASR — сохранить вывод распознавания речи за определённый период времени;
* openASRDraw — построить график вывода распознавания речи;
* openVoiceWakeUp (в разработке) — включить функцию пробуждения по голосу.
Для получения дополнительной информации о методах использования обратитесь к комментариям в коде.
Пример: пример — main.js, этот проект напрямую основан на структуре AudioFlow.
Конструктор класса AudioFlow:
```javascript
class AudioFlow extends AudioFlowProcesser {
constructor(
audioSource = null,
sampleRate = 8000,
numberOfChannels = 1,
ScriptNode_bufferSize = 256,
audioDestination = 'sound',
) {...};
...
};
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )