Как я могу использовать OpenEars в твике?

Я пытаюсь включить OpenEars в разрабатываемый мной проект theos, настройку для взломанных iDevices, поскольку мне нужно распознавание речи для моей настройки. Мне удалось связать фреймворк OpenEars, поместив его в ту же папку, что и мои частные фреймворки, и в настоящее время я пытаюсь заставить работать код учебника. Вот мой текущий код:

#import <OpenEars/LanguageModelGenerator.h>
#import <OpenEars/PocketsphinxController.h>
#import <OpenEars/AcousticModel.h>

%hook SBLockScreenView

-(void)setCustomSlideToUnlockText:(id)arg1 {

LanguageModelGenerator *lmGenerator = [[LanguageModelGenerator alloc] init];

NSArray *words = [NSArray arrayWithObjects:@"WORD", @"STATEMENT", @"OTHER WORD", @"A PHRASE", nil];
NSString *name = @"NameIWantForMyLanguageModelFiles";

NSError *err = [lmGenerator generateLanguageModelFromArray:words withFilesNamed:name forAcousticModelAtPath:[AcousticModel pathToModel:@"AcousticModelEnglish"]];
//NSError* err = [lmGenerator generateLanguageModelFromArray:words withFilesNamed:name forAcousticModelAtPath:imagePath];
//NSError* err = [[NSError alloc] init];

NSDictionary *languageGeneratorResults = nil;

NSString *lmPath = nil;
NSString *dicPath = nil;

if([err code] == noErr) {
    languageGeneratorResults = [err userInfo];

    lmPath = [languageGeneratorResults objectForKey:@"LMPath"];
    dicPath = [languageGeneratorResults objectForKey:@"DictionaryPath"];
}
else {
    NSLog(@"Error: %@",[err localizedDescription]);
}

%orig;

}

%end

Компиляция выполняется нормально, но когда она выполняется, я получаю следующие сообщения об ошибках, и мое устройство выходит из строя: «При попытке сослаться на запрошенный комплект акустической модели, который, как ожидается, находится на пути (null), комплект не был найден. Это означает, что когда цикл прослушивания начинается, он выйдет из строя из-за отсутствия необходимых ресурсов. Проблема с поиском пакета акустической модели может быть связана с тем, что имя пакета не было присвоено этому методу так, как он может использовать; например, если вы пытаетесь чтобы использовать английскую акустическую модель, и вы добавили этот пакет в свой проект приложения, вы должны вызвать этот метод, передав [AcousticModel pathToAcousticModel:@"AcousticModelEnglish"] (или [AcousticModel pathToAcousticModel:@"AcousticModelSpanish"] для испанского пакета), без добавления ".bundle" в конец и убедившись, что пакет имя пишется в точности так, как оно отображается в фактическом имени пакета (пакет можно увидеть в папке этого дистрибутива "Framework".

Если это не решит проблему, скорее всего, это связано с тем, что комплект акустической модели не был успешно импортирован в корневой уровень вашего проекта приложения и его mainBundle. Обычно это происходит либо из-за того, что комплект акустической модели никогда не перетаскивался в проект вашего приложения, когда изначально предполагалось перетаскивать папку «Framework», либо из-за того, что он был перетащен внутрь, но вместо использования параметра «Создавать группы для любых добавленных папок» в диалоговом окне «Добавить файлы» Xcode случайно была выбрана опция «Создавать ссылки на папки для любых добавленных папок». Чтобы исправить это, просто удалите комплект акустической модели или папку «Framework» из своего приложения и снова добавьте ее в проект приложения с правильной настройкой «Создавать группы для любых добавленных папок» в диалоговом окне «Добавить файлы» Xcode.

Я также получаю эти сообщения в моем системном журнале:

May 27 00:54:49 Phillips-iPhone SpringBoard[17785] <Warning>: acousticModelPath is (null)
May 27 00:54:49 Phillips-iPhone SpringBoard[17785] <Warning>: Error: the default phonetic dictionary (null)/LanguageModelGeneratorLookupList.text can't be found in the app bundle but the app is attempting to access it, most likely there will be a crash now.
May 27 00:54:49 Phillips-iPhone SpringBoard[17785] <Warning>: Error while trying to load the pronunciation dictionary: Error Domain=NSCocoaErrorDomain Code=260 "The operation couldn’t be completed. (Cocoa error 260.)" UserInfo=0x1883cbb0 {NSFilePath=(null)/LanguageModelGeneratorLookupList.text, NSUnderlyingError=0x1883cb40 "The operation couldn’t be completed. No such file or directory"}
May 27 00:54:49 Phillips-iPhone SpringBoard[17785] <Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid domain=nil in -[NSError initWithDomain:code:userInfo:]'

Любая помощь в получении этой работы приветствуется. Спасибо!


person Phillip    schedule 27.05.2014    source источник


Ответы (2)


Недавно я сделал настройку iOS на основе OpenEars и столкнулся с той же проблемой. Поскольку ваш твик не является обычным приложением, местоположение, указанное pathToAcousticModel, будет неверным. Самое простое решение - разместить комплект акустической модели в известном месте и жестко запрограммировать его.

Например, если вы используете theos, вы можете поместить AcousticModelEnglish.bundle в папку «layout / Library / OpenEars /». Затем замените

[AcousticModel pathToAcousticModel:@"AcousticModelEnglish"]

с участием

@"/Library/OpenEars/AcousticModelEnglish.bundle"
person jzplusplus    schedule 29.05.2014
comment
Это именно то, что я сделал, чтобы исправить это; Я забыл обновить свой вопрос решением, но это было именно то. Помещение его в папку макета и жесткое кодирование пути отлично работает, спасибо! РЕДАКТИРОВАТЬ: позвольте мне угадать, OkSiri? ;П - person Phillip; 29.05.2014
comment
Я не понимаю этого из-за моей ошибки в openEars. Нужна помощь - person Max; 04.07.2014
comment
@ Макс, в чем проблема? - person jzplusplus; 08.07.2014
comment
Проблема решена без реализации этого ответа. Проблема заключается в пустом динамическом массиве строк. - person Max; 08.07.2014

Самым простым решением, которое я нашел, было перетаскивание папки «Framework» из библиотеки OpenEars, содержащей файлы пакета, в папку «Frameworks» внутри проекта Xcode. После перетаскивания отметьте опцию «копировать элементы при необходимости».

введите здесь описание изображения

На первый взгляд это звучит странно, но это решение работает, и вы не будете менять код.

Вы получите такую ​​файловую структуру:

введите здесь описание изображения

Вы также можете удалить самые старые ссылки на эти библиотеки в папке «Framework», чтобы ваш проект оставался чистым.

Ваше здоровье,

Дэйвид

person David Toledo    schedule 14.09.2015