Control de gestos de la interfaz de la aplicación (Keras + CoreML)

Actualmente, la popularidad de los programas que utilizan redes neuronales artificiales está creciendo, en relación con esto hay una gran cantidad de tecnologías para simplificar el trabajo asociado con ellos. Este artículo describirá una de las posibles formas de implementar la aplicación con la introducción de dichas tecnologías.

¿Qué hará nuestra aplicación?


Reconocer dos posiciones de la mano: puño y palma. Y dependiendo de ello, cambie los elementos de la interfaz de la aplicación.



¿Qué necesitamos?


Para entrenar nuestra red neuronal, utilizaremos la biblioteca Keras, implementaremos la interfaz en el lenguaje de programación Swift y para el paquete usaremos el marco de Apple presentado en WWDC'17 para trabajar con las tecnologías de aprendizaje automático CoreML.

Comencemos con el modelo de nuestra ANN y su capacitación.


Como usamos los datos en forma de imágenes, necesitamos una base de convolución. El marco de Keras incluye muchos modelos convolucionales imageNet pre-entrenados, tales como: Xception, ResNet50, MobileNetV2, DenseNet, NASNet, InceptionV3, VGG16, VGG19, etc. Nuestro proyecto utilizará el modelo VGG16 y tiene este aspecto:



Vamos a crearlo:



preprocesamiento de datos . Antes de ser transferidos a la red, los datos deben convertirse en un tensor con números reales. Actualmente, los datos se almacenan en forma de imágenes, por lo que deben prepararse para su transmisión a la red siguiendo estos pasos:

  • Leer archivos de imagen;
  • Decodificar imágenes del formato .PNG, .JPG a la tabla de píxeles RGB;
  • Conviértalos a tensores con números reales;
  • Normalizar valores.

También usaremos la extensión de datos para evitar el reentrenamiento de la red y aumentar su precisión.



Luego configuramos el modelo para entrenamiento, lo ejecutamos con el generador de modelos y lo guardamos.



Capacitamos a nuestra red, pero la extensión .h5 no es adecuada para resolver nuestro problema. Por lo tanto, debemos convertirlo a una vista aceptable para CoreML, es decir, al formato .mlmodel.

Para hacer esto, instale coremltools :

$ pip install --upgrade coremltools

Y transformamos nuestro modelo:



Estamos escribiendo una solicitud


Entramos en Xcode, creamos una aplicación y, en primer lugar, damos permiso para usar la cámara. Para hacer esto, vaya a info.plist y agregue las siguientes líneas a XML:



Después de eso, vaya al archivo ViewController.swift.



A continuación, configure cameraInput y cameraOutput, agréguelos a la sesión y ejecútelos para obtener el flujo de datos.



Anteriormente, agregamos el método de retraso AVCaptureVideoDataOutputSampleBufferDelegate, que se llama con cada nuevo cuadro recibido de la cámara. Ahora configuramos la solicitud y la ejecutamos.



En este método, conectamos el modelo WristModel.mlmodel, que transferimos a nuestro proyecto:



también verificamos su conexión y cambiamos asíncronamente la posición de nuestro cuadrado según el coeficiente.

Pero nuestra aplicación no funcionará sin el procesamiento preliminar de las imágenes que ingresan a la red, por lo que lo agregamos:



Ejecute la aplicación:



Hurray , logramos crear el control de la interfaz de nuestra aplicación mediante gestos. Ahora puede utilizar todo el potencial de ANN en sus aplicaciones iOS. ¡Gracias por la atención!

Lista de fuentes y literatura.


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