Это кросспост из моего блога. Вы можете найти исходный пост здесь.

В этом сообщении блога я покажу вам, как добавить Набор инструментов распознавания жестов в приложение для iPhone. GRT, созданная Ником Гиллианом, когда он работал доктором в Массачусетском технологическом институте, представляет собой кроссплатформенную библиотеку машинного обучения C ++ с открытым исходным кодом, предназначенную для распознавания жестов в реальном времени. Из этого выпуска на GitHub я знал, что GRT использовался в разработке для iOS. Мне удалось найти только один пример этого в действии, на котором частично основано это руководство.

Чтобы добавить GRT в проект iOS, мы собираемся создать структуру CocoaTouch из исходных файлов GRT. Мы также добавим оболочку Objective-C ++, которая позволит нам легко взаимодействовать между фреймворком и кодом Swift в нашем приложении. Для начала нам нужно сначала выполнить небольшую настройку.

Сначала создайте папку, в которой вы хотите разместить свой проект. Клонируйте GRT как подмодуль с помощью команд:

Создайте новый проект Xcode. Задайте цель как CocoaTouch Framework. Обратите внимание, что если вы хотите использовать GRT в проекте watchOS, приведенные ниже шаги будут такими же, только с целью watchOS Framework, а не с целью CocoaTouch Framework:

Создание iOS CocoaTouch Framework

Обратите внимание, что если вы хотите использовать GRT в проекте watchOS, приведенные ниже шаги будут такими же, только с целью watchOS Framework, а не с целью CocoaTouch Framework:

Создание фреймворка CocoaTouch для watchOS

Скопируйте папку GRT в проект, убедившись, что файлы добавлены в целевой фреймворк.

Следует выбрать «Копировать элементы, если необходимо».

Чтобы получить доступ к GRT из приложения для iOS, нам нужно создать оболочку Objective-C. Это позволит нам вызывать код GRT C ++ из Objective-C или Swift. Магнус Янен, автор ранее упомянутого репозитория watchGRT, создал несколько файлов-оберток, которые я модифицировал для этого конкретного проекта. Вы можете взять эти измененные файлы здесь и добавить их в свой проект,

По сути, то, что мы делаем, позволяет создать конвейер GRT с помощью фреймворка из нашего приложения на основе Swift. GestureRecognitionPipeline - это основной объект GRT. Он позволяет настроить систему распознавания жестов с модулями, которые будут выполнять предварительную обработку входящих данных (скажем, от акселерометра или гироскопа iPhone), настроить модуль классификации для идентификации выполненного жеста, а затем применить любая постобработка, необходимая для того, чтобы убедиться, что

Метод init нашего файла GestureRecognitionPipeline.mm обращается к коду GRT и создает экземпляр конвейера:

- (instancetype)init
{
    self = [super init];
    if (self) {
        self.instance = new GRT::GestureRecognitionPipeline;
        // Redirect cout to NSLog
        self.nsLogStream = new NSLogStream(std::cout);
    }
    return self;
}

Последний шаг здесь - скомпилировать фреймворк. Обратите внимание, что если вы внесете какие-либо изменения в оболочку Objective-C, вам нужно будет снова скомпилировать структуру - любые функции из GRT, которые вы хотите добавить в свое приложение, должны быть соответствующим образом представлены в оболочке.

Теперь, когда мы закончили настройку фреймворка, мы можем продолжить и добавить его в проект iOS.

Создайте новую цель для приложения iOS. Я назвал свой «GRT-iOS-HelloWorld»:

Мы продолжим и добавим фреймворк в наше новое приложение:

Наконец, давайте импортируем фреймворк GRT-iOS, чтобы убедиться, что мы можем создавать объекты из GRT. Создайте файл Bridging-Header и добавьте в него эту строку:

#import <GRTiOS/GRTiOS.h>

Теперь мы можем создать экземпляр GRT Pipeline в методе viewDidLoad нашего контроллера представления:

let pipeline = GestureRecognitionPipeline()

Скомпилируйте и запустите приложение, чтобы убедиться, что нет ошибок компиляции. Если нет, значит, вы успешно добавили GRT в свой проект iPhone!

Приложение пока ничего не делает; в одном из следующих постов я покажу, как я реализовал систему распознавания жестов в реальном времени с использованием GRT на iOS. Вы можете скачать проект здесь.