Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Reconocimiento de actividad humana modelo Simulink para el despliegue de smartphones

Este ejemplo muestra cómo preparar un modelo de Simulink® que clasifica la actividad humana en función de las señales del sensor del smartphone para la generación de código y la implementación de teléfonos inteligentes. El ejemplo proporciona dos modelos de Simulink que están listos para la implementación en un dispositivo Android y un dispositivo iOS. Después de instalar el paquete de soporte necesario para un dispositivo de destino, entrenar el modelo de clasificación e implementar el modelo de Simulink en el dispositivo.

Requisitos previos

Los paquetes de soporte de Simulink son necesarios para los modelos de Simulink en este ejemplo.

Cargar conjunto de datos de muestra

Cargue el conjunto de datos.humanactivity

load humanactivity

El conjunto de datos contiene 24.075 observaciones de cinco actividades físicas humanas diferentes:humanactivity Sentado, de pie, caminando, corriendo y bailando. Cada observación tiene 60 características extraídas de los datos de aceleración medidos por los sensores del acelerómetro del smartphone. El conjunto de datos contiene las siguientes variables:

  • — Vector de respuesta que contiene los identificadores de actividad en enteros:actid 1, 2, 3, 4 y 5 representando sentarse, pararse, caminar, correr y bailar, respectivamente

  • : Nombres de actividad correspondientes a los identificadores de actividad de enterosactnames

  • — Matriz de características de 60 funciones para 24.075 observacionesfeat

  • — Las etiquetas de las características 60featlabels

Se usó la aplicación sensor HAR (reconocimiento de actividad humana) para crear el conjunto de datos.[1]humanactivity Al medir los datos de aceleración sin procesar con esta aplicación, una persona colocó un teléfono inteligente en un bolsillo para que el teléfono inteligente estaba al revés y la pantalla se enfrentó a la persona. El software calibró los datos crudos medidos en consecuencia y extrajo las características 60 de los datos calibrados. Para obtener más información sobre la calibración y la extracción de características, consulte y, respectivamente.[2][3] Los modelos de Simulink descritos más adelante también utilizan los datos de aceleración sin procesar e incluyen bloques para la calibración y la extracción de características.

Preparar datos

En este ejemplo se utiliza el 90% de las observaciones para entrenar un modelo que clasifica los cinco tipos de actividades humanas y el 10% de las observaciones para validar el modelo entrenado. Se usa para especificar una retención del 10% para el conjunto de pruebas.cvpartition

rng('default') % For reproducibility Partition = cvpartition(actid,'Holdout',0.10); trainingInds = training(Partition); % Indices for the training set XTrain = feat(trainingInds,:); YTrain = actid(trainingInds); testInds = test(Partition); % Indices for the test set XTest = feat(testInds,:); YTest = actid(testInds);

Convierta la matriz de entidades y el vector de respuesta en una tabla para cargar el conjunto de datos de entrenamiento en la aplicación clasificación de aprendizaje.XTrainYTrain

tTrain = array2table([XTrain YTrain]);

Especifique el nombre de la variable para cada columna de la tabla.

tTrain.Properties.VariableNames = [featlabels' 'Activities'];

Entrenar conjunto de árbol impulsado utilizando la aplicación de clasificación aprendiz

Entrenar un modelo de clasificación mediante la aplicación de clasificación de aprendizaje. Para abrir la aplicación clasificación de aprendizaje, escriba en la línea de comandos.classificationLearner También puede hacer clic en la pestaña y hacer clic en la flecha situada a la derecha de la sección para abrir la galería.AppsApps A continuación, haga clic en.Machine LearningEl alumno de clasificación

En la pestaña, en la sección, haga clic y seleccione.El alumno de clasificaciónFileNew SessionFrom Workspace

En el cuadro de diálogo nueva sesión, haga clic en la flecha y, a continuación, seleccione la tabla.Workspace VariabletTrain El alumno de clasificación detecta los predictores y la respuesta de la tabla.

La opción predeterminada es la validación cruzada de 5 veces, que protege contra el sobreajuste. Haga clic.Start Session El alumno de clasificación carga el conjunto de datos y traza un gráfico de dispersión de las dos primeras entidades.

En la pestaña, haga clic en la flecha situada a la derecha de la sección para abrir la galería.El alumno de clasificaciónModel Type A continuación, haga clic en.Los clasificadores de EnsembleBoosted Trees

El panel modelo actual del explorador de datos muestra la configuración predeterminada del modelo de conjunto de árboles potenciado.

En la pestaña, en la sección, haga clic en.El alumno de clasificaciónTrainingTrain Cuando se completa el entrenamiento, el panel Historial del explorador de datos muestra la precisión de clasificación de 5 veces, validada de forma cruzada.

En la pestaña, en la sección, haga clic en y, a continuación, seleccione.El alumno de clasificaciónExportExport ModelExport Compact Model Haga clic en el cuadro de diálogo.OK La estructura aparece en el área de trabajo de MATLAB.trainedModel El campo contiene el modelo compacto.ClassificationEnsembletrainedModel Extraiga el modelo entrenado de la estructura.

classificationEnsemble = trainedModel.ClassificationEnsemble; 

Entrenar conjunto de árbol impulsado en línea de comandos

Como alternativa, puede entrenar el mismo modelo de clasificación en la línea de comandos.

template = templateTree('MaxNumSplits',20); classificationEnsemble = fitcensemble(XTrain,YTrain, ...     'Method','AdaBoostM2', ...     'NumLearningCycles',30, ...     'Learners',template, ...     'LearnRate',0.1, ...     'ClassNames',[1; 2; 3; 4; 5]);

Realice una validación cruzada de 5 veces y calcule la precisión de la validación.classificationEnsemble

partitionedModel = crossval(classificationEnsemble,'KFold',5); validationAccuracy = 1-kfoldLoss(partitionedModel)
validationAccuracy = 0.9831 

Evaluar el rendimiento en datos de prueba

Evalúe el rendimiento en el conjunto de datos de prueba.

testAccuracy = 1-loss(classificationEnsemble,XTest,YTest)
testAccuracy = 0.9763 

El modelo entrenado clasifica correctamente el 97,63% de las actividades humanas en el conjunto de datos de prueba. Este resultado confirma que el modelo entrenado no se ajusta al conjunto de datos de entrenamiento.

Tenga en cuenta que los valores de precisión pueden variar ligeramente en función del sistema operativo.

Guardar modelo entrenado

Para la generación de código, incluido un objeto de modelo de clasificación, use y.saveCompactModelloadCompactModel

Guarde el modelo entrenado utilizando.saveCompactModel

saveCompactModel(classificationEnsemble,'EnsembleModel.mat');

El bloque de funciones de los modelos de Simulink carga el modelo entrenado utilizando y utiliza el modelo entrenado para clasificar los nuevos datos.predictActivityloadCompactModel

Implemente el modelo de Simulink en Device

Ahora que ha preparado un modelo de clasificación, puede abrir el modelo de Simulink, dependiendo del tipo de smartphone que tenga, e implementar el modelo en su dispositivo. Tenga en cuenta que el modelo de Simulink requiere el archivo y el archivo de matriz de calibración o.EnsembleModel.matslexHARAndroidCalibrationMatrix.matslexHARiOSCalibrationMatrix.mat Si pulsa el botón situado en la sección superior derecha de esta página y abre este ejemplo en MATLAB®, MATLAB® abre la carpeta de ejemplo que incluye estos archivos de matriz de calibración.

Escriba para abrir el modelo de Simulink para la implementación de Android.slexHARAndroidExample

Escriba para abrir el modelo de Simulink para la implementación de iOS.slexHARiOSExample

Los dos modelos de Simulink clasifican la actividad humana en función de los datos de aceleración medidos por un sensor de smartphone. Los modelos incluyen los siguientes bloques:

  • El bloque recibe los datos de aceleración sin procesar de los sensores del acelerómetro en el dispositivo.Accelerometer

  • El bloque es un bloque de función de MATLAB que caliena los datos de aceleración sin procesar.calibrate Este bloque utiliza la matriz de calibración en el archivo o en el archivo.slexHARAndroidCalibrationMatrix.matslexHARiOSCalibrationMatrix.mat Si pulsa el botón situado en la sección superior derecha de esta página y abre este ejemplo en MATLAB®, MATLAB® abre la carpeta de ejemplo que incluye estos archivos.

  • Los bloques de visualización, y están conectados al bloque y muestran los puntos de datos calibrados para cada eje en el dispositivo.Acc XAcc YAcc Zcalibrate

  • Cada uno de los bloques,, y, almacena en búfer 32 muestras de un eje del acelerómetro con 12 muestras de superposición entre las tramas almacenadas en búfer.BufferX BufferY BufferZ Buffer Después de recolectar 20 muestras, cada bloque se une a las 20 muestras con 12 muestras del fotograma anterior y pasa el total de 32 muestras al bloque.BufferextractFeatures Cada bloque recibe una muestra de entrada cada 0,1 segundos y emite un fotograma almacenado en búfer que incluye 32 muestras cada 2 segundos.Buffer

  • El bloque es un bloque de función de MATLAB que extrae 60 entidades de un marco almacenado en búfer de 32 muestras de acelerómetro.extractFeatures Este bloque de funciones utiliza DSP System Toolbox™ y Signal Processing Toolbox™.

  • El bloque es un bloque de función de MATLAB que carga el modelo entrenado desde el archivo mediante el uso y la clasificación de la actividad del usuario mediante las operaciones extraídas.predictActivityEnsembleModel.matloadCompactModel La salida es un número entero entre 1 y 5, correspondiente a sentado, de pie, caminando, corriendo, y bailando, respectivamente.

  • El bloque muestra los valores de actividad de usuario clasificados en el dispositivo.Predicted Activity

  • El subsistema utiliza un bloque de conmutador multipuerto para elegir los datos de imagen de actividad de usuario correspondientes que se mostrarán en el dispositivo.Video Output El bloque descompone la imagen seleccionada en vectores RGB separados y pasa la imagen al bloque.Convert to RGBActivity Display

Para desplegar el modelo de Simulink en su dispositivo, siga los pasos descritos en o.Ejecute Model en dispositivos AndroidEjecute Model en dispositivos iOS Una vez finalizado el proceso de configuración, haga clic para crear una aplicación con el mismo nombre que el modelo.Deploy to Hardware Ejecute la aplicación, coloque el dispositivo de la misma manera como se describió anteriormente para recopilar los datos de entrenamiento y pruebe las cinco actividades. La aplicación muestra la actividad clasificada en consecuencia.

Para garantizar la precisión de la aplicación, debe colocar el dispositivo de la misma manera que se describe para recopilar los datos de entrenamiento. Si desea colocar el dispositivo en una ubicación o orientación diferente, recopile los datos a su manera y utilice los datos para entrenar el modelo de clasificación.

La precisión de la aplicación puede ser diferente de la precisión del conjunto de datos de prueba (), dependiendo del dispositivo.testaccuracy Para mejorar la aplicación, puede considerar el uso de sensores adicionales y la actualización de la matriz de calibración. Además, puede agregar otro bloque de salida para los comentarios de audio al subsistema de salida mediante Audio Toolbox™. Usa un bloque de escritura de ThingSpeak™ para publicar actividades clasificadas y datos de aceleración desde tu dispositivo al Internet de las cosas. Para obtener más información, consultehttps://thingspeak.com/.

Referencias

[1] El Helou, A. Sensor HAR recognition App. MathWorks File Exchange https://www.mathworks.com/matlabcentral/fileexchange/54138-sensor-har-recognition-app

[2] STMicroelectronics, AN4508 Application note. “Parameters and calibration of a low-g 3-axis accelerometer.” 2014.

Consulte también

| | |

Temas relacionados