Pocketsphinx на Android "LDA несовместим с многопоточными функциями" во время настройки распознавателя речи
Я столкнулся с проблемой при попытке заменить английскую акустическую модель на русскую здесь:
recognizer = SpeechRecognizerSetup.defaultSetup()
.setAcousticModel(new File(assetsDir, "ru"))
Ошибка: "java.lang.ClassNotFoundException: edu.cmu.pocketsphinx.SphinxBaseJNI"
Из sourceforge я скачал все архивы и попробовал каждый набор акустических моделей: zero_ru.cd_ptm_4000, zero_ru.cd_cont_4000, zero_ru.cd_semi_4000, cmusphinx-ru-5.2, вставив их в папку...\models\src\main\assets\sync\en-us-ptm из приложения pocketsphinx-android-demo-master. Естественно, я заменил английский словарь тоже. Произошла ошибка при настройке "-hmm" материала speechRecognizer внутри этого метода:
public SpeechRecognizerSetup setAcousticModel(File model) {
return this.setString("-hmm", model.getPath());
}
в SpeechRecognizerSetup.class карманного сфинкса. Какие классы отсутствуют? Распознавание английской речи прекрасно работает на моем KitKat 4.4.2
IDE: Android Studio 2.33
Версия Gradle: 3.3
Версия плагина Android: 2.3.3
gradle.build из приложения:
android {
compileSdkVersion 25
buildToolsVersion '25.0.0'
defaultConfig {
applicationId "edu.cmu.sphinx.pocketsphinx"
minSdkVersion 14
targetSdkVersion 19
versionCode 2
versionName "1.1"
}
productFlavors {
}
}
dependencies {
compile project(':aars')
compile project(':models')
compile 'com.android.support:appcompat-v7:25.0.0'
Отредактированный Logcat:
E/cmusphinx: ERROR: "lda.c", line 71: LDA incompatible with multi-stream features (n_stream = 4)
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: edu.cmu.sphinx.pocketsphinx, PID: 23373
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.RuntimeException: new_Decoder returned -1
at edu.cmu.pocketsphinx.PocketSphinxJNI.new_Decoder__SWIG_1(Native Method)
at edu.cmu.pocketsphinx.Decoder.<init>(Decoder.java:43)
at edu.cmu.pocketsphinx.SpeechRecognizer.<init>(SpeechRecognizer.java:79)
at edu.cmu.pocketsphinx.SpeechRecognizerSetup.getRecognizer(SpeechRecognizerSetup.java:74)
at edu.cmu.pocketsphinx.demo.PocketSphinxActivity.setupRecognizer(PocketSphinxActivity.java:222)
at edu.cmu.pocketsphinx.demo.PocketSphinxActivity.access$000(PocketSphinxActivity.java:55)
at edu.cmu.pocketsphinx.demo.PocketSphinxActivity$1.doInBackground(PocketSphinxActivity.java:108)
at edu.cmu.pocketsphinx.demo.PocketSphinxActivity$1.doInBackground(PocketSphinxActivity.java:102)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Любая помощь будет оценена!
2 ответа
Поэтому в своей рабочей конфигурации я использовал словарь ru.txt из архива zero_ru_cont_8k_v3.tar.gz и акустическую модель, которая находится в каталоге zero_ru.cd_ptm_4000 этого архива. В моем приложении я оставил только поиск с активацией по ключевым словам и грамматический поиск. Мне пришлось изменить расширения файлов ru.txt и menu.dict на.dict и.jsgf соответственно. Исходя из этого, приложение должно работать при условии, что вы правильно разместили библиотеку и ресурсы, вы не оставили переменные с другими словами, кроме русского, для поиска и распознавания, и не забыли добавить скрипт ant в ваш build.gradle, например это объясняется здесь.
Эти вопросы должны быть решены:
java.lang.RuntimeException: new_Decoder вернул -1
java.lang.ClassNotFoundException: edu.cmu.pocketsphinx.SphinxBaseJNI
java.util.concurrent.ExecutionException: java.lang.RuntimeException: Decoder_setJsgfFile вернул -1
09-14 12: 29: 40.436 10908-10944 / edu.cmu.sphinx.pocketsphinx E / cmusphinx: ОШИБКА: "kws_search.c", строка 528: в словаре отсутствует слово "запуск" во фразе "запуск" 09-14 12:30:01.029 678-949/? E/RemoteViews: ANR Предупреждение,RemoteViews можно использовать только один раз, в противном случае это может вызвать ANR на хостах, таких как Laucher,SystemUI. ключи для поиска
09-14 12:06:09.113 2298-2339/edu.cmu.sphinx.pocketsphinx E/cmusphinx: ОШИБКА: "dict.c", строка 195: строка 545276: телефон "o1" затухает в акустической модели; слово "ёлочкой" игнорируется 09-14 12:06:09.113 2298-2339/edu.cmu.sphinx.pocketsphinx E/cmusphinx: ОШИБКА: "dict.c", строка 195: строка 545277: телефон "o1" не работает в акустическая модель; слово "ёлочку" игнорируется 09-14 12:06:09.113 2298-2339/edu.cmu.sphinx.pocketsphinx E/cmusphinx: ОШИБКА: "dict.c", строка 195: строка 545278: телефон "o1" не работает в акустическая модель; слово "ёлочной" игнорируется 09-14 12:06:09.113 2298-2339/edu.cmu.sphinx.pocketsphinx E/cmusphinx: ОШИБКА: "dict.c", строка 195: строка 545279: телефон "o1" не работает в акустическая модель; слово "ёлочный" игнорируется 09-14 12:06:09.113 2298-2339/edu.cmu.sphinx.pocketsphinx E/cmusphinx: ОШИБКА: "dict.c", строка 195: строка 545280: телефон "o1" не работает в акустическая модель; слово "ём" игнорируется 09-14 12:06:09.114 2298-2339/edu.cmu.sphinx.pocketsphinx E/cmusphinx: ОШИБКА: "dict.c", строка 195: строка 545281: телефон "o1" не работает в акустическая модель; слово "ёмкий" игнорируется 09-14 12:06:09.114 2298-2339/edu.cmu.sphinx.pocketsphinx E/cmusphinx: ОШИБКА: "dict.c", строка 195: строка 545282: телефон "o1" не работает в акустическая модель; слово 'ёмкими' игнорируется
E/cmusphinx: ОШИБКА: "lda.c", строка 71: LDA несовместим с многопоточными функциями (n_stream = 4)
Эта ошибка означает, что вы забыли удалить feature_transform
из папки модели или он остается на SDCard. Дополнительный файл в папке модели прерывает загрузку модели. Вам нужно
- Почистите модельную папку на sdcard на телефоне.
- Убедитесь, что у вас нет дополнительных файлов в папке ресурсов.