应用程序界面的手势控制(Keras + CoreML)

当前,使用人工神经网络的程序越来越流行,与此相关的是,有大量的技术可以简化与它们相关的工作。本文将介绍通过引入此类技术来实现该应用程序的一种可能方法。

我们的应用程序将做什么?


识别手的两个位置-拳头和手掌。并根据它更改应用程序界面元素。



我们需要什么?


为了训练我们的神经网络,我们将使用Keras库,我们将使用Swift编程语言实现该接口,对于捆绑软件,我们将使用在WWDC'17上展示的Apple框架与机器学习技术CoreML一起使用。

让我们从我们的人工神经网络模型及其训练开始


由于我们使用图像形式的数据,因此我们需要一个卷积基础。Keras框架包括许多预先训练的imageNet卷积模型,例如:Xception,ResNet50,MobileNetV2,DenseNet,NASNet,InceptionV3,VGG16,VGG19等。我们的项目将使用VGG16模型,它看起来像这样:



让我们创建它:



数据预处理在将数据传输到网络之前,必须将其转换为具有实数的张量。当前,数据以图像形式存储,因此需要按照以下步骤准备它们以传输到网络:

  • 读取图像文件;
  • 将图像从.PNG,.JPG格式解码为RGB像素表;
  • 将它们转换为具有实数的张量;
  • 标准化值。

我们还将使用数据扩展来防止对网络进行重新训练并提高其准确性。



然后,我们设置要训练的模型,使用模型生成器运行它并保存它。



我们训练了我们的网络,但是.h5扩展名不适合解决我们的问题。因此,我们应该将其转换为CoreML可接受的视图,即.mlmodel格式。

为此,请安装coremltools

$ pip install --upgrade coremltools

然后我们转换模型:



我们正在编写一个应用程序


我们进入Xcode,创建一个应用程序,首先授予使用相机的权限。为此,请转到info.plist并将以下行添加到XML:



之后,请转到ViewController.swift文件。



接下来,配置cameraInput和cameraOutput,将它们添加到会话中并运行它以获取数据流。



之前,我们添加了滞后方法AVCaptureVideoDataOutputSampleBufferDelegate,该方法在从摄像机接收到的每个新帧中都会调用。现在,我们在其中设置请求并执行它。



在此方法中,我们连接了WristModel.mlmodel模型,该模型已转移到我们的项目中:



我们还检查其连接并根据系数异步更改正方形的位置。

但是,如果没有对进入网络的图像进行初步处理,我们的应用程序将无法



运行,因此我们添加了它:运行应用程序:



Hurray,我们设法使用手势创建了对应用程序界面的控制。现在,您可以在iOS应用程序中充分利用ANN的潜力。感谢您的关注!

资料和文献清单


1)keras.io
2)apple.imtqy.com/coremltools
3)habr.com/en/company/mobileup/blog/332500
4)developer.apple.com/documentation/coreml

Source: https://habr.com/ru/post/undefined/


All Articles