Cov txheej txheem:

Detección De Rostros Con Arduino Intel Edison: 8 Kauj Ruam
Detección De Rostros Con Arduino Intel Edison: 8 Kauj Ruam

Video: Detección De Rostros Con Arduino Intel Edison: 8 Kauj Ruam

Video: Detección De Rostros Con Arduino Intel Edison: 8 Kauj Ruam
Video: Detección y seguimiento de rostros con OpenCV + Python + Arduino Uno 2024, Lub Xya hli ntuj
Anonim
Detección De Rostros Con Arduino Intel Edison
Detección De Rostros Con Arduino Intel Edison

El procesamiento de imágenes o la visión por computadora es uno de esos campos que requiere enormes cantidades de investigación debido a que involucra métodos para adquirir, procesar, analizar y comprender las imágenes del mundo tiag con el fin de producir información ser tratados por un ordenador. Qhov tseeb, los mejores algoritmos para tales tareas se basan en redes neuronales convolucionales, las cuales generalmente procesan mais de imágenes de rostros humanos mediante el uso de aprendizaje supervisado para entrenar el algoritmo que identificara el objeto buscado. Ua txhaum txoj cai, tsis muaj vamos a meternos en tantos lios en este qhia tau y usaremos una biblioteca de código abierto de visión por computadora llamada OpenCV la cual gracias al arduo trabajo de la comunidad de cientificos y desarrolladores que aportan, tiag tiag con un rico set de carcaterisiticas que podemos implementar facilmente para la detección y reconocimiento de imágenes.

Pesar de que OpenCV se encuentra escrita en C ++ orientado a objetos, este soporta múltiples idiomas y nosotros vamos a usar Python como nuestro lenguaje de programación para realizar la detección de rostros. un procesamiento y una imágen de salida. Intel Edison no tiene una interfaz de video, por lo que ejecutaremos el script de Python en nuestro PC. Luego, después del funcionamiento exitoso del código en la PC, hloov kho el el código para correrlo en el Edison. Las cosas se aclararán cuando hagamos la implementación práctica. Nuestro objetivo es realizar la detección de rostros y, si se detecta, realizar alguna acción.

Khoom siv

El cov ntaub ntawv que yuav tsum tau ua rau llevar a cabo este tutorial yog:

HARDWARE

  • 1 lub laptop/PC.
  • 1 Placa Arduino Intel Edison.
  • 2 cable USB micro-B.
  • 1 smartphone con la app "IP Webcam".
  • 1servomotor kws 90.

SOFTWARE

  • Intel Flash tool Lite V5.2.4
  • PuTTy
  • FileZilla FTP
  • Imágen Yocto Poky (V25.5-15)
  • VS Code
  • Nab hab sej 2.7
  • OpenCV Versión 3.3.0
  • Quaj
  • Libreria MRAA
  • Cov tsav tsheb ntawm Windows rau lub khoos phis tawj Intel Edison (Se descargan en cuanto se conecta la placa).
  • Archivos dll de Windows (Pueda ser que te falten al momento de instalar OpenCV en tu laptop).

Kauj Ruam 1: Conectando El Intel Edison rau La PC

Conectando El Intel Edison thiab La PC
Conectando El Intel Edison thiab La PC
Conectando El Intel Edison thiab La PC
Conectando El Intel Edison thiab La PC
Conectando El Intel Edison thiab La PC
Conectando El Intel Edison thiab La PC

El módulo de kho vajtse Intel Edison lo podemos encontrar en tres presentaciones:

  • La placa de desarrollo creada por Intel sib xws nrog Arduino (es la que usamos en este tutorial).
  • Una placa mini-breakout (con el móudlo ya montado) tau tshaj con la expansion Board de Arduino.
  • El módulo Intel Edison en su estado nativo (Aquí requerimos fabricar nuestra propia PCB).

Yo siv la placa de expansión sib xws nrog Arduino debido a la flexibilidad y compatibilidad para interactuar con otros actuadores y sensores. El Intel Edison, qhov sib txawv ntawm kev sib txuas ntawm Arduino como UNO lossis MEGA corre un sistema operativo, yog li caso una imágen Linux llamada Yocto.

Ua raws li cov lus qhia hauv qab no kom pom cov kab hluav taws xob USB micro-B del Arduino Edison lub nuestra laptop. Fijate bien que el interrupor (marcado con el número 1 en la imágen), este apuntando hacia abajo, si no se encuentra en dicha posición el Arduino Edison permanentecerá apagado.

El conector USB micro-B marcado con el numero 2 se se utiliza para alimentación de 5V, programación utilizando el IDE Arduino, lectura/escritura en la memoria flash y uso de Ethernet través de USB.

El conector USB micro-B marcado con el número 3 se utiliza para acceder por SSH a nuestro Edison.

Una vez conectado dejemos que se instalen los tsav tsheb Windows. Posteriormente revisamos en el Admsinistrador de dispositivos de Windows si reconoce dos puertos:

  • El puerto COM virtual los ntawm Intel Edison
  • El puerto serial COM ntawm Intel Edison.

Habiendo rov kho dua yav dhau los, txheej txheem txheej txheem txheej txheem paso, flashear el Intel Edison con la imagen de Linux.

Kauj Ruam 2: Flasheando El Intel Edison

Flasheando El Intel Edison
Flasheando El Intel Edison
Flasheando El Intel Edison
Flasheando El Intel Edison
Flasheando El Intel Edison
Flasheando El Intel Edison

Una vez que tu dispositivo esta correctamente detectado por la PC, debes flashearlo con a imagen de Linux. Para esto usaremos la herramienta flash provista por Intel: Flash Tool Lite y el conector USB micro-B marcado con el numero 2 (ver paso anterior).

1. Abre la herramienta "Flash Tool Lite" y conecta tu dispositivo a la PC.

2. Haz clic en Examinar y busca el archivo.zip de la imagen de Linux que descargaste (edison-image-ww25.5-15.zip).

3. Después de hacer clic en "Start to flash", la herramienta descomprimirá automáticamente el archivo y empezará a subir la imágen de Linux en el Intel Edison.

4. Ua raws li cov lus qhia hauv qab no thiab txuas rau lub xov tooj cua USB cable 2, txuas.

5. El rectangulito de carga debe de llegar al 100%. ¡Lis! Koj tab tom nrhiav Intel Edison.

Ahora que ya tienes instalada la imágen "Linux Yocto Poky" ya podemos empezar a configurar el Intel Edison.

Kauj Ruam 3: Configurando El Intel Edison (Primeros Pasos)

Configurando El Intel Edison (Primeros Pasos)
Configurando El Intel Edison (Primeros Pasos)
Configurando El Intel Edison (Primeros Pasos)
Configurando El Intel Edison (Primeros Pasos)
Configurando El Intel Edison (Primeros Pasos)
Configurando El Intel Edison (Primeros Pasos)

Después de flashear con éxito tu Edison, ahora configuraremos el dispositivo, para ello vamos a usar la terminal PuTTY. PuTTY tsis yog tus siv SSH y telnet, desarrollado originalmente por Simon Tatham para la plataforma Windows. Vamos a usar la conexión serial aqui.

Antes de abrir la terminal de PuTTY, abre el "Administrador de dispositivos" y anota el número de puerto correspondiente para el COM del Edison (tsis muaj el virtual). Este valor lo usaremos para inicializar la comunicación.

Abre PUTTY y luego, selecciona el botón "Serial" e ingresa el número de puerto COM del Edison. Posteriormente anota la velocidad en baudios a la que se comunicara el Edison con tu equipo, sau ntawv 115200. Finalmente presiona abrir para empezar la comunicación con el dispositivo.

Una vez que estas en la terminal de PuTTY puedes ejecutar comandos para configurar tu Edison. Lo siguiente es un listado tareas que haremos en la consola para configurar el dispositivo:

  • Configurar un nombre para el dispsotivo.
  • Configurar una contraseña rau hauv paus.
  • Conectar el Edison tsis muaj WIFI liab.

Cuando te conectas por primera vez se te pedira hace log in. Sau "hauv paus" y presiona "Nkag mus". Veras "hauv paus@edison" lo cual significa que te encuentras en el directorio root.

Ahora que ya te encuentras listo para teclear comandos, sau tseg:

configure_edison -teeb tsa

Presiona sau y posteriormente sau ntawv tsis nkag lo lus zais y nuevamente presiona nkag mus. Luego te pedira un nombre para el dispositivo (que en realidad es un alias mas que un nombre), sau ib qho tsis suav nrog y da nkag.

Qhov kawg ntawm qhov teeb tsa teeb tsa WIFI liab. El móudlo escaneara el lugar y detectará las redes WIFI qhov tsis txaus ntseeg, sau tus lej naj npawb de la opción de la red detectada la que te vas a conectar y posteriormente te pedirá el password de la red, escríbelo y presiona enter.

¡Lis! Nws debes de estar conectado rau WIFI. Koj feem ntau tsis tuaj yeem nkag mus hauv el navegador nrog tu hostame y tu dirección IP. Asimismo puedes rov tshuaj xyuas koj li parámetros de tu conexión escribiendo:

ifconfig

Presiona sau y te mostrará los parámetros de tu liab WIFI.

Ya estamos listo para configurar el Entorno de Desarrollo Integrado (IDE) para empezar con la programación. Hauv nuestro caso será… Python!

Kauj Ruam 4: Usando Python Para Programar El Edison

Usando Python Para Programar El Edison
Usando Python Para Programar El Edison
Usando Python Para Programar El Edison
Usando Python Para Programar El Edison

El Edison se puede programar usando el IDE de Arduino, sin embargo aqui usaremos Python.

Al tratar con Python y kho vajtse, necesitamos usar la biblioteca "MRAA" para interactuar con los pines GPIO. MRAA es un biblioteca esqueleto de bajo nivel para comunicarse con los GPIO's plataformas GNU / Linux y es sib xws nrog casi todas las placas basadas en Linux utilizadas. Rau cov txheej txheem kev teeb tsa thiab teeb tsa.

En Putty, qub tub rog la la davhlau ya nyob twg y sau ntawv (puedes ocupar el editor vi o nano por ejemplo) en el archivo que gestiona los paquetes de Linux /etc/opkg/base-feeds.conf lo siguiente:

  • src/gz txhua qhov
  • src/gz edison
  • src/gz core2-32

Posteriormente guarda el archivo y actualiza la lista de paquetes escribiendo:

opkg txawj tej yam ntxiv

Ahora vamos a instalar git, sau:

opkg nruab git

Ahora vamos a instalar un repositorio de GitHib en el Edison:

git clone https://github.com/drejkim/edison-scripts.git ~/edison-scripts

Ahora añadiremos ~/edison-scripts rau PATH:

  • ncha 'export PATH = $ PATH: ~/edison-scripts' >> ~/.profile
  • qhov chaw ~/.profile

Ahora ejecutaremos los siguientes comandos:

  • resizeBoot.sh
  • installPip.sh
  • installMraa.sh

¡Lis! Ya debemos de tener configurado correctamente Python en el Edison. Para probar lo anterior ejecutaremos el código anexado en este paso ("prueba.py") usando FileZilla. Para ello abriremos FileZilla en la PC (Lo debiste de haber descargado) y en el campo de "Servidor", "usuario", "contraseña" y "Puerto" escribimos la IP de tu edison (revisalo escribiendo ifcong en tu edison), usuario (hauv paus), tu lo lus zais y finalmente en el campo del puerto escribiremos 22, ya que es el que generalmente se emplea para conexiones SSH.

Una vez conectado transfiere el archivo "prueba.py" rau nplaub tshev "hauv paus".

Ahora sau ntawv, xav tau Edison y en la ubicación "hauv paus" el comando siguiente para ejecutar el código.

nab hab sej prueba.py

Debemos de observar como el LED 13 enciende 2 milisegundos. nws yog 2 lub hlis dhau los.

¡Felicidades! Muaj ejecutado correctamente un código en phyton para tu Edison. Ahora ya estamos listo para procesar imágenes en nuestro Edison usando Python, pero antes escribiremos y probaremos el código de Python para detectar rostros en nuestra PC …

Kauj Ruam 5: Tshawb nrhiav Rostros Con OpenCV

Detectando Rostros Con OpenCV
Detectando Rostros Con OpenCV
Detectando Rostros Con OpenCV
Detectando Rostros Con OpenCV

El Intel Edison no tiene una interfaz de salida de video, por lo que para probar que el código que escribiremos en Python funciona a la perfección probaremos el código para correr en nuestra PC y posteriormente lo migraremos al Edison.

Nuestro objetivo es realizar la detección de rostros y, si se detecta, realizar alguna acción.

Antes de empezar necesitamos tener instalado Python y OpenCv en nuestras computadora. Los ntawm qhov ua tau zoo ntawm qhov ua tau zoo los ntawm lub khoos phis tawj PC:

  1. Rub tawm Python 2.7 en nuestra PC
  2. Rub tawm OpenCV version 3.3.0
  3. Ve al directorio en donde se extrajo OpenCv y posicionate en C: / opencv / build / python / 2.7 / x86 y copia el arhivo cv2.pyd al directorio de python C: / Python27 / Lib / site-packages.
  4. Instala pip, cov ntaub ntawv ntau ntxiv rau el siguiente enlace
  5. Instala numpy escribiendo el comando de sej -m pip nruab --user numpy

Para verificar que todo funciona correctamente escribe en la terminal de sej de de tu PC y da nkag mus:

  • ntshuam ntshuam
  • ua cv2

Ambos comandos respectivamente deben de responder ningún mensaje de error (osea nada), indicando que las bibliotecas se han importado correctamente.

Ahora descarga el archivo "3_detectaRostrosOjos.py", abre una terminal de Python en tu PC y corre el programa. Este programa vamos debe de activar la webcam de tu PC y detectar rostros y ojos tal y como en la imágen, pasa salir del programa presiona la tecla ESC.

Yog lorastraste, ¡felicidades! Pasemos al siguiente paso que es correr este código desde nuestro Intel Edison y activar un motor a pasos cada vez que detecte un rostro.

Kauj Ruam 6: Antes De Llegar Al Código En Edison… ¡Teoria De Funcionamiento

Antes De Llegar Al Código En Edison… ¡Teoria De Funcionamiento!
Antes De Llegar Al Código En Edison… ¡Teoria De Funcionamiento!

La detección de rostros es un caso muy específico del reconocimiento de objetos. Hay muchos enfoques para el reconocimiento ntsej muag. Sin embargo, vamos a discutir los dos mas comunes:

Segmentación basada en colour: En esta técnica, la cara se se se se se se se se se se se se se seú el el colour de la piel. La entrada de este algoritmo suele ser una imagen en formato de colores RGB, mientras que en la etapa de procesamiento la cambiamos a los formatos HSV o YIQ. En este proceso, cada píxel es clasificado como un píxel del xim de la piel o un píxel sin xim de la piel. La razón detrás del uso de otros modelos de colour que no sean RGB es que a veces RGB no puede distinguir los colores de la piel en diferentes condiciones de luz. Esto mejora significativamente al usar otros modelos de xim. Nosotros thiab usaremos este algoritmo

Kev lees paub raws qhov tshwj xeeb: Esta es la técnica que si usaremos para este qhia tau. En esta técnica buscamos ciertas características, y en base a eso hacemos el reconocimiento. El empleo de "haar feature-based cascade" para la detección de rostros es un método eficaz de detección de objetos propuesto por Paul Viola y Jones Kev Tshawb Fawb Lub Cev nrawm siv Boosted Cascade ntawm Cov Yam Ntxim Saib Ntxim Ua "del año 2001. Es un enfoque basado en el aprendizaje automático en donde la" cascade function "se entrena contra un conjunto de imágenes positivas y negativas. El algoritmo requiere de muchas imágenes positivas (en nuestro caso estas tub imágenes de caras) y muchas imágenes negativas (que no contienen imágenes de caras). Ib feem ntawm el vam vamos a entrenar el modelo para extraer las características de cada imágen. Para este propósito, se utilizan las "haar feature" que se muestran en la figura. Cada una de las figuras es un valor único obtenido al restar la suma de píxeles debajo de un rectángulo blanco de la suma de píxeles debajo de un rectángulo negro. Los "haar nta" deben estar entrenados para la cara, ojos, sonrisa, thiab lwm yam. La biblioteca OpenCV contiene un conjunto de clasificadores predefinidos. Estos están disponibles en la carpeta C: / opencv / build / etc / haarcascades

Kauj Ruam 7: Tshawb nrhiav Rostros Con OpenCV En Intel Edison

Tshawb nrhiav Rostros Con OpenCV En Intel Edison!
Tshawb nrhiav Rostros Con OpenCV En Intel Edison!
Tshawb nrhiav Rostros Con OpenCV En Intel Edison!
Tshawb nrhiav Rostros Con OpenCV En Intel Edison!

Vamos a instalar la biblioteca numpy y openCV en el Intel Edison, para ello escribimos los siguientes comandos desde la terminal del Edison:

  • opkg hloov tshiab
  • opkg txawj tej yam ntxiv
  • opkg nruab sej-numpy nab hab sej-opencv

Verifica que todo se haya instalado correctamente. Para ello ve a la terminal de Python desde tu arduino Edison y sau ntawv:

  • ntshuam ntshuam
  • ua cv2

Si cada uno de estos comandos no nos reporta ningún mensaje, todo se encuentra instalado a la perfección.

Ahora vamos a configurar la fuente de video de donde el Intel Edison leera los rostros. En tu smartphone descarga la app "IP Webcam". Hecho lo anterior accede a la app y ve a "Ajustes de IP Webcam"/"Preferencias de video"/"Resolución de las fotos" y dejamos el parámetro a 640x480. Es aqui cuando comienzas a notar que el Intel Edison simplemente no está destinado para el procesamiento de imágenes debido a la poca cantidad de RAM que posee (1GB de RAM).

En la app "IP Webcam" da nyem rau ntawm el boton tsis zoo "Iniciar servidor". Ahora, desde tu smartphone debes de poder ver la camara encendida (como si fuera a tomar foto) y una dirección IP abajito. Sau ntawv dicha dirección IP en tu navegador web de la PC y deberas ver el video en vivo, en mi caso salgo yo sentado trabajando.

Ahora descarga el código "tres.py" y el archivo "haarcascade_frontalface_default.xml" (Los dos códigos los puedes encontrar en los archivos del paso tiag) en tu PC. Usa FileZilla para pasar ambos códigos una misma localidad de tu Edison (por ejemplo en el folder root) y ejecuta el código de nab nab con el comando:

nab hab sej tres.py

Desde la terminal de tu Edison debes de ver un mensaje "Dame la dirección IP" aquí inserta la IP que te da "IP Webcam" (es la misma que escribiste en el navegador de tu PC para conectarte) y dale nkag. Si todo es correcto debes de ver el mensaje "Rostro detectado" en la terminal de tu Edison y "Rostro no detectado" en puag a si pones un rostro en la webcam de tu celular. Asimismo si se detecta un rostro tu Intel Edison debe de hacer girar el servomotor.

Pom zoo: