Описание Преобразование аудио в текст имеет множество приложений, таких как создание субтитров для видео, протоколов встреч и транскрипций интервью.
С сервисом ML Kit процесс становится намного проще: он очень точно преобразует аудиозаписи в текст с правильной пунктуацией.
Подготовка к разработке
Настройте репозиторий Huawei Maven и интегрируйте SDK для транскрипции аудио.Подробное описание процесса можно найти Здесь .
Указание разрешений в файле AndroidManifest.xml
Открыть файл AndroidManifest.xml в папке основной .Добавьте разрешения на подключение к сети, доступ к состоянию сети и чтение данных хранилища перед .
Обратите внимание, что необходимо запрашивать динамические разрешения.
Иначе будет ошибка Доступ запрещен .
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Процесс развития
Создание и инициализация механизма транскрипции звука
Переопределить метод onCreate в классе Основная деятельность создать механизм транскрипции звука.
private MLRemoteAftEngine mAnalyzer;
mAnalyzer = MLRemoteAftEngine.getInstance();
mAnalyzer.init(getApplicationContext());
mAnalyzer.setAftListener(mAsrListener);
Использовать MLRemoteAftSetting настроить двигатель.
В настоящее время сервис поддерживает стандартный китайский и английский языки, поэтому для параметра mЯзык есть только варианты жж И ru .
MLRemoteAftSetting setting = new MLRemoteAftSetting.Factory()
.
setLanguageCode(mLanguage) .
enablePunctuation(true) .
enableWordTimeOffset(true) .
enableSentenceTimeOffset(true) .
create();
Параметр включить пунктуацию указывает, должна ли пунктуация автоматически добавляться к полученному тексту.
Значение по умолчанию: ЛОЖЬ .
Если вы установите этот параметр на истинный , полученный текст будет автоматически расставлен пунктуацией, и если ЛОЖЬ - знаков препинания не будет. Параметр EnableWordTimeOffset указывает, добавлять ли временную метку к каждому аудиосегменту.
Значение по умолчанию: ЛОЖЬ .
Регулируйте эту настройку только в том случае, если продолжительность записи меньше минуты.
Если значение параметра истинный , временные метки будут возвращены после расшифровки.
Эти параметры используются при расшифровке коротких аудиозаписей длительностью не более минуты.
Если значение параметра ЛОЖЬ , будет возвращена только аудиозапись.
Параметр EnableSentenceTimeOffset указывает, добавлять ли метку времени к каждому предложению в аудиозаписи.
Значение по умолчанию: ЛОЖЬ .
Если значение параметра истинный , временные метки будут возвращены после расшифровки.
Если значение параметра ЛОЖЬ , будет возвращена только аудиозапись.
Создайте обратный вызов прослушивателя для обработки результата расшифровки.
private MLRemoteAftListener mAsrListener = new MLRemoteAftListener()
После инициализации прослушивателя вызовите startTask в слушателе AftListener начать расшифровку.
@Override
public void onInitComplete(String taskId, Object ext) {
Log.i(TAG, "MLRemoteAftListener onInitComplete" + taskId);
mAnalyzer.startTask(taskId);
}
Переопределить методы onUploadProgress , onEvent И onResult в слушателе MLRemoteAftListener .
@Override
public void onUploadProgress(String taskId, double progress, Object ext) {
Log.i(TAG, " MLRemoteAftListener onUploadProgress is " + taskId + " " + progress);
}
@Override
public void onEvent(String taskId, int eventId, Object ext) {
Log.e(TAG, "MLAsrCallBack onEvent" + eventId);
if (MLAftEvents.UPLOADED_EVENT == eventId) { // The file is uploaded successfully.
showConvertingDialog();
startQueryResult(); // Obtain the transcription result.
}
}
@Override
public void onResult(String taskId, MLRemoteAftResult result, Object ext) {
Log.i(TAG, "onResult get " + taskId);
if (result != null) {
Log.i(TAG, "onResult isComplete " + result.isComplete());
if (!result.isComplete()) {
return;
}
if (null != mTimerTask) {
mTimerTask.cancel();
}
if (result.getText() != null) {
Log.e(TAG, result.getText());
dismissTransferringDialog();
showCovertResult(result.getText());
}
List<MLRemoteAftResult.Segment> segmentList = result.getSegments();
if (segmentList != null && segmentList.size() != 0) {
for (MLRemoteAftResult.Segment segment : segmentList) {
Log.e(TAG, "MLAsrCallBack segment text is : " + segment.getText() + ", startTime is : " + segment.getStartTime() + ".
endTime is : " + segment.getEndTime()); } } List<MLRemoteAftResult.Segment> words = result.getWords(); if (words != null && words.size() != 0) { for (MLRemoteAftResult.Segment word : words) { Log.e(TAG, "MLAsrCallBack word text is : " + word.getText() + ", startTime is : " + word.getStartTime() + ".
endTime is : " + word.getEndTime()); } } List<MLRemoteAftResult.Segment> sentences = result.getSentences(); if (sentences != null && sentences.size() != 0) { for (MLRemoteAftResult.Segment sentence : sentences) { Log.e(TAG, "MLAsrCallBack sentence text is : " + sentence.getText() + ", startTime is : " + sentence.getStartTime() + ".
endTime is : " + sentence.getEndTime());
}
}
}
}
Обработка результата расшифровки в режиме опроса
После завершения расшифровки позвоните getLongAftResult чтобы получить результат. Обрабатывайте результат раз в 10 секунд. private void startQueryResult() {
Timer mTimer = new Timer();
mTimerTask = new TimerTask() {
@Override
public void run() {
getResult();
}
};
mTimer.schedule(mTimerTask, 5000, 10000); // Process the obtained long speech transcription result every 10 seconds.
}
private void getResult() {
Log.e(TAG, "getResult");
mAnalyzer.setAftListener(mAsrListener);
mAnalyzer.getLongAftResult(mLongTaskId);
}
Как работает функция в приложении
Создайте и запустите приложение со встроенной функцией транскрипции звука.
Затем выберите аудиофайл на своем устройстве и преобразуйте аудио в текст.
Теги: #Машинное обучение #Android #Разработка Android #Разработка мобильных приложений #Huawei #машинное обучение #HMS #аудио-
Калиновский, Стефан
19 Oct, 24 -
Интеллектуальная Обработка Текста
19 Oct, 24 -
Новый The Bat!: Совместим С Windows 7.
19 Oct, 24 -
Один Шаг К Идеальной Команде
19 Oct, 24 -
10 Заповедей Великого Покорного
19 Oct, 24 -
Практикуйтесь В Использовании Freefem++
19 Oct, 24