Solución de hogar inteligente con reconocimiento de gestos
En este miniproyecto, se construye una solución de hogar inteligente desde cero. Una aplicación de reconocimiento de gestos impulsada por IA (Android) puede abrir o cerrar una puerta (remota). Este miniproyecto incluye tecnologías como AI, Data Science, IoT, Android, Cloud Computing, etc.
resumen
Las soluciones para el hogar inteligente incluyen tecnologías de IA e IoT para controlar las puertas y mantener el hogar seguro. La IA se utiliza para entrenar imágenes de gestos humanos como la palma y el puño. Una aplicación de Android reconoce los gestos utilizando este modelo entrenado. Esta aplicación envía información de gestos como mensaje MQTT a través del servidor MQTT. Una aplicación IoT se suscribe y recibe estos mensajes. Esta aplicación IoT controla un servomotor para abrir o cerrar la puerta según el mensaje MQTT recibido. Este proyecto incluye tecnologías como AI, Data Science, IoT, Android, Cloud Computing, etc.
Se requieren los siguientes entornos de desarrollo:
- Aplicación web para entrenar gestos humanos (HTML)
- Google Colab convierte el modelo web en modelo TFLite (Python)
- Android Studio desarrolla aplicación de gestos (Java)
- Arduino desarrolla una aplicación IOT que se ejecuta en Node MCU (Arduino Sketch)
- Máquina virtual de Google Cloud para servidor MQTT (script de Java)
Preparación de datos y entrenamiento.
Paso 1: Prepare el archivo Index.html:
Descarga el archivo index.html de Github
Agregue el código para abrir de la siguiente manera
Del mismo modo, agregue código para cerrar y ninguno
paso 2: Prepare el archivo ui.js
Descargue el archivo ui.js de Github
Agregue o actualice el código para las etiquetas: abierto, cerrado y ninguno
Agregue o actualice el siguiente código
CONST CONTROLES = [
‘up’, ‘down’, ‘left’, ‘right’, ‘leftclick’, ‘rightclick’, ‘scrollup’,
‘scrolldown’, ‘open’, ‘close’, ‘none’
];
sumas constantes = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
const openButton = documento.getElementById('abrir');
const closeButton = documento.getElementById('cerrar');
const noneButton = document.getElementById('ninguno');
openButton.addEventListener('mousedown', () => ui.handler(8));
openButton.addEventListener('mouseup', () => mouseDown = false);
closeButton.addEventListener('mousedown', () => ui.handler(9));
closeButton.addEventListener('mouseup', () => mouseDown = false);
noneButton.addEventListener('mousedown', () => ui.handler(10));
noneButton.addEventListener('mouseup', () => mouseDown = false);
Paso 3: tomar fotos
Abra index.html en su navegador Chrome.
Establezca los parámetros:
Tasa de aprendizaje = 0,0001, tamaño de pila = 0,4, épocas = 20 y unidades ocultas = 100
Capture imágenes abiertas, cerradas y nada haciendo clic en los iconos apropiados
(cada 200 imágenes con diferentes condiciones de iluminación)
Paso 4: Imágenes de tren
Haga clic en el botón Tren
Espere a que se complete el entrenamiento
Haga clic en el botón Prueba
Prueba abierta, cerrada y sin operaciones
Descarga el modelo haciendo clic en el botón “DESCARGAR MODELO”
Se descargarán los siguientes archivos
etiquetas.txt, modelo.json, modelo.pesos.bin
Convierta el modelo tensorflowjs en modelo tflite
Paso 1: Subir libreta
Cargue el cuaderno: tensorflowjs_to_tflite_colab_notebook.ipynb desde el enlace de github
Paso 2: Configurar el entorno
En Colab, instala lo siguiente
Tensor Flujo>=1.13.1
tensorflowjs==0.8.6
Keras==2.2.4
Sube los siguientes archivos a Colab:
modelo.json, modelo.pesos.bin
Paso 3: Ejecutar cuaderno
Ejecutar las celdas en el cuaderno
Esto generará un archivo de modelo convertido -> model.tflite
Nota: MobileNet Transfer Learning se usa para crear el modelo final
El modelo web es un top model
MobileNet es el modelo básico
El modelo superior se fusiona con el modelo base para crear un modelo Keras fusionado
Luego, el modelo Keras fusionado se convierte en el modelo TFLite que se puede usar en dispositivos móviles
Paso 4: Descarga el archivo del modelo
Descargue el archivo model.tflite de Colab
Cree una aplicación de Android para el reconocimiento de gestos
Paso 1: Cambiar código o descargar código de Github
YO. Cambios de código (ImageClassifier.java)
afuera
labelProbArray = nuevo flotante[1][8];
a
labelProbArray = nuevo flotante[1][3];
II. Cambios en el diseño XML:
Cambiar arriba -> abrir, abajo -> cerrar, izquierda -> ninguno
y
comentar otros elementos de diseño como derecho, clic izquierdo, clic derecho, scroll_up, scroll_down en
res->layout->layout_bottom_sheet.xml
res->layout->layout_direction.xml
tercero Cambios en Camera2BasicFragment.java
Cambiar arriba -> abrir, abajo -> cerrar, izquierda -> ninguno
y comente otros elementos de diseño como derecho, clic izquierdo, clic derecho, scroll_up, scroll_down
IV.- Comente el código que se refiere a
// diseño correcto,
// diseño de clic izquierdo,
// diseño de clic derecho,
// diseño de desplazamiento hacia arriba,
// diseño de desplazamiento hacia abajo;
V. Comprobar probabilidad de cambio de estado:
Cadena probabilidadStr = textToShow.toString().substring(textToShow.toString().indexOf(“:”)+1,
textToShow.toString().indexOf(“:”)+7);
doble probabilidad = 0,0;
Intentar {
Probabilidad = Double.parseDouble(probabilityStr.trim());
} atrapar (NumberFormatException e) {
Log.e("amlan", "numberStr no es un número");
}
cadena token final = token;
si (probabilidad <0.8) {
token final = "NINGUNO";
}
Paso 2: Integrar código MQTT
una. Actualizar Build.gradle
Implementación 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.4'
Implementación 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
b. Actualice el código de Camera2BasicFragment.java o descárguelo de Github
C. Actualizar manifiesto
es decir. Publicar estado de gesto
si (MQTT válido == verdadero) {
Publicar (Cliente, FinalToken);
}
Paso 3: Consultar con Mosquito
Ejecute la aplicación de Android
Abrir una ventana de comando
Suscríbete al tema - "Gesto"
mosquitto_sub -h digitran-mqtt.tk -t gesto -p 1883
Cree una aplicación Arduino para abrir/cerrar la puerta
Paso 1: Conecte el servomotor a la conexión de la placa Blynk de NodeMCU:
El cable naranja se conecta al pin digital D4.
El cable marrón se conecta al pin GND
El cable rojo se conecta al pin 3V3
Paso 2: Cree el archivo de la aplicación Arduino (gesture.ino) o descárguelo de GitHub: enlace
Paso 3: Agregue código para abrir y cerrar la puerta.
Suscríbete al tema - 'Gesto'
Para abrir la puerta, gire el servomotor a 90 grados.
Para cerrar la puerta, ajuste el servomotor a 0 grados.
cliente.subscribe("gesto");
if (cadenamensaje == "abrir")
{
servo.escribir(90);
Serial.print("Gesto: ");
Serial.println("abrir");
}
más si (msgString == "cerrar")
{
servo.escribir(0);
Serial.print("Gesto: ");
Serial.println("Cerrar");
}
Configuración del servidor MQTT
Servidor MQTT: digitran-mqtt.tk
Puerto MQTT: 1883
Consulte el siguiente enlace para conocer los pasos para configurar el servidor MQTT en GCP VM:
manifestación
La demo de este proyecto se puede encontrar en este enlace
referencias
- Enlace de ejemplo de clasificación de gestos de TensorFlow Lite Android
- Reconocimiento de gestos de movimiento con redes neuronales convolucionales y Tensorflow en Android Link
- Reconocimiento de gestos de movimiento con Tensorflow en Android Link
- Entrenando una red neuronal para reconocer gestos con OpenCV en Python Link
- Conexión del servomotor al enlace NodeMCU
- Crea un sistema automático de apertura y cierre de puertas con sensor IR y servomotor | Enlace Proyecto para principiantes
Si quieres conocer otros artículos parecidos a Solución de hogar inteligente con reconocimiento de gestos puedes visitar la categoría Electrónica.
Deja una respuesta