@teddyfox

Трудности с голосовой активацией Yandex SpeechKit?

Добрый день.

В качестве домашнего хобби разрабатываю робота, управляемого по WiFi приложением на iOS (iPad iOS 8.1).
Узнав, что Яндекс разработал речевые технологии и предлагает библиотеки для iOS (SpeechKit), решил приделать управление фиксированными голосовыми командами (голосовая активация). Получил API-ключ, модель нескольких голосовых команд и советы специалистов службы поддержки API Yandex SpeechKit как решать мою простую задачу. Сразу скажу, что отнюдь не являюсь асом программирования в XCode (ver. 6.2) для iOS.

Написал, учел все советы (в т.ч. и те, которых нет в документации: установка флага -ObjC в Project->Build Settings-> Linking->Other Linker Flags). Не распознает! Не распознает ни в iOSimulator'e, ни на iPad'e (управление не передается в phraseSpotterDidSpotPhrase). Отправил свой XCod'овский проект целиком в службу поддержки API Yandex SpeechKit - у них распознает!

Вот мой код (errorView, ypsStatus, resultView - UI TextField'ы; файлы голосовой модели находятся в папке activation; микрофон на Маке работает, микрофон на iPad'e работает и доступен приложению; структура файлов проекта прилагается). Со службой поддержки API Yandex SpeechKit обменялись кучей писем - нет результата. Они как-бы отвалили.
//  ViewController.m
#import "ViewController.h"
#import <YandexSpeechKit/SpeechKit.h>
#import <YandexSpeechKit/YSKPhraseSpotter.h>
#import <YandexSpeechKit/YSKPhraseSpotterDelegate.h>

@interface ViewController () <YSKPhraseSpotterDelegate>
@end

@implementation ViewController

- (void)viewDidLoad
{   [super viewDidLoad];
    // привязка к API-ключу
    [[YSKSpeechKit sharedInstance] configureWithAPIKey:@"8d67e88f-……4ca78beb7b30"];
        
    // инициализация YSKPhraseSpotter
    NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
    NSString *modelPath = [resourcePath stringByAppendingPathComponent:@"activation"];
    
    NSError *error1 = [YSKPhraseSpotter initializeWithConfigDirectory:modelPath andDelegate:self];
    if ([error1 code]) [self.errorView setText:@"error1"];
    
    // запуск YSKPhraseSpotter
    NSError *error2 = [YSKPhraseSpotter start];
    if ([error2 code]) [self.errorView setText:@"error2"];
    // проверка активности     YSKPhraseSpotter
    if ([YSKPhraseSpotter isRunning] ) {[self.ypsStatus setText:@" активирован"];}
    else {[self.ypsStatus setText:@"неактивирован!!!"];}
}

- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];}

- (void)phraseSpotterDidSpotPhrase:(NSString *)phrase withIndex:(int)phraseIndex
{    // если хоть что-то узнал
    [self.resultView setText:@"YPS uznal"]; }

@end

Сдается мне, что затык в каких-то тонких настройках XCod'a.
Люди добрые, есть ли какие мысли на этот счет? Жалко бросать, чувствую, что решение в какой-нибудь ерунде.
Спасибо.b4853af933d8491abee8027d1e49ef8d.tiff
  • Вопрос задан
  • 694 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы