Последняя документация по pocketsphinx для Android предоставляется на CMUSphinx wiki .
В основном вам нужно извлечь демо из Github , импортировать его в android studio и запуститьТаким образом, вы можете проверить основные функции.
Чтобы начать интеграцию в собственное приложение, выполните следующие действия:
Ссылка на библиотеку в проекте Android
Библиотека распространяется как независимый от архитектуры файл pocketsphinx-android-5prealpha-nolib.jar и двоичные файлы .so для различных аппаратных архитектур.
В Android Studio необходимо поместить файл jar в папку app / libs и jni .so.файлы в папку app / src / main / jniLibs.
Включение файлов ресурсов
Стандартный способ отправки файлов ресурсов с приложением в Android - поместить их в ресурсы/ каталог вашего проекта.Но для того, чтобы сделать их доступными для файлов pocketsphinx, необходимо иметь физический путь, если они находятся в .apk и не имеют его.Класс Assets из pocketsphinx-android предоставляет метод для автоматического копирования файлов активов во внешнее хранилище целевого устройства.edu.cmu.pocketsphinx.Assets#syncAssets
синхронизирует ресурсы, считывающие элементы из файла assets.lst, расположенного вверху assets/
.Перед копированием он сопоставляет контрольные суммы MD5 актива и файла на внешнем хранилище с тем же именем, если таковое существует.Копирование выполняется только в том случае, если имеется неполная информация (нет файла во внешнем хранилище, нет двух файлов .md5) или имеется несоответствие хеша.PocketSphinxAndroidDemo содержит скрипт ant, который генерирует файлы assets.lst, а также файлы .md5, ищите assets.xml.
Обратите внимание, что если скрипт сборки ant не работает должным образом в процессе сборки, ресурсы могут быть недоступны.синхронизации.Убедитесь, что скрипт запускается, или создайте файлы md5 и assets.lst самостоятельно.
Чтобы интегрировать синхронизацию ресурсов в ваше приложение, сделайте следующее
Включите файл сборки app / asset.xml в свое приложение Редактировать сборкуФайл сборки .gradle для запуска assets.xml:
ant.importBuild 'assets.xml'
preBuild.dependsOn(list, checksum)
clean.dependsOn(clean_assets)
Это должно сработать
Пример приложения
Классы и методы pocketsphinx-android были разработаны, чтобы напоминатьтот же рабочий процесс, который используется в pocketsphinx, за исключением того, что базовые структуры данных, организованные в классы, и функции, работающие с ними, превращаются в методы соответствующих классов.Так что, если вы знакомы с pocketsphinx, вам должно быть удобно и с pocketsphinx-android.
SpeechRecognizer - это основной класс для доступа к функциональности декодера.Он создан с помощью SpeechRecognizerSetup
builder.SpeechRecognizerBuilder позволяет настраивать как основные свойства, так и другие параметры декодера.Ключи параметров и значения такие же, как те, которые передаются в командной строке в двоичные файлы pocketsphinx.Узнайте больше о настройке производительности pocketsphinx.
recognizer = defaultSetup()
.setAcousticModel(new File(assetsDir, "en-us-ptm"))
.setDictionary(new File(assetsDir, "cmudict-en-us.dict"))
.setRawLogDir(assetsDir).setKeywordThreshold(1e-20f)
.getRecognizer();
recognizer.addListener(this);
Конфигурация декодера - это длительный процесс, содержащий операции ввода-вывода, поэтому рекомендуется запускать его внутри асинхронной задачи.
Декодер поддерживает несколько именованных поисков, которые вы можете использоватьпереключение во время выполнения
// Create keyword-activation search.
recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE);
// Create grammar-based searches.
File menuGrammar = new File(assetsDir, "menu.gram");
recognizer.addGrammarSearch(MENU_SEARCH, menuGrammar);
// Next search for digits
File digitsGrammar = new File(assetsDir, "digits.gram");
recognizer.addGrammarSearch(DIGITS_SEARCH, digitsGrammar);
// Create language model search.
File languageModel = new File(assetsDir, "weather.dmp");
recognizer.addNgramSearch(FORECAST_SEARCH, languageModel);
Как только вы настроите декодер и добавите все поиски, вы можете начать распознавание с помощью
recognizer.startListening(searchName);
. Вы получите уведомление о событии окончания речи в обратном вызове onEndOfSpeech распознавателя.слушатель.Затем вы можете вызвать распознаватель.stop или распознаватель.cancel ().Позднее отменяет распознавание, прежнее приведет к тому, что окончательный результат будет передан вам в обратном вызове onResult.
Во время распознавания вы получите частичные результаты в обратном вызове onPartialResult.
Вы также можете получить доступ к другому методу Pocketsphinx.заверните классы Java в swig, проверьте детали: классы декодер, гипотеза, сегмент и NBest.