Это кросспост из моего блога. Вы можете найти исходный пост здесь.
В этом сообщении блога я покажу вам, как добавить Набор инструментов распознавания жестов в приложение для iPhone. GRT, созданная Ником Гиллианом, когда он работал доктором в Массачусетском технологическом институте, представляет собой кроссплатформенную библиотеку машинного обучения C ++ с открытым исходным кодом, предназначенную для распознавания жестов в реальном времени. Из этого выпуска на GitHub я знал, что GRT использовался в разработке для iOS. Мне удалось найти только один пример этого в действии, на котором частично основано это руководство.
Чтобы добавить GRT в проект iOS, мы собираемся создать структуру CocoaTouch из исходных файлов GRT. Мы также добавим оболочку Objective-C ++, которая позволит нам легко взаимодействовать между фреймворком и кодом Swift в нашем приложении. Для начала нам нужно сначала выполнить небольшую настройку.
Сначала создайте папку, в которой вы хотите разместить свой проект. Клонируйте GRT как подмодуль с помощью команд:
- git submodule init
- подмодуль git добавить https://github.com/nickgillian/grt.git
Создайте новый проект 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. Вы можете скачать проект здесь.