2. El tema que elegí para esta asignación fue el
de redes neuronales artificiales.
3. Con la ayuda de un biblioteca de codigo
abierto lograr desarrollar una aplicación que
mediante el uso de redes neuronales
artificiales logré detectar rostros humanos.
4. Básicamente seleccione este tema por que es
parte de mi proyecto de clase, el cual consiste
en un detector de mentiras de tiempo real.
Mientras tanto en esta practica he decidido
poder iniciarme en el uso de redes neuronales
artificiales para el procesamiento de datos, ya
que la deteccion facial no es nadamas que
simple agrupamiento y clasificacion a niveles
un poco más complejos
5.
6. Para iniciar con el desarrollo de esta practica
requeri descargar la libreria que me ayudaria
a realizar el procesamiento de imagenes,
video y por fortuna también a utilizar las
redes neuronales artificiales. Decidí usar esta
libreria por que esta bajo la licencia BSD que
me permite usarla libremente para
propósitos comerciales y de investigación tal
es este caso.
7.
Lo primero que hice fue descargar los binarios
necesarios de la pagina de openCV para poderlos
utilizar en el sistema android, esto es un poco
complicado ya que el codigo de openCV esta hecho en
C/C++ entonces hay dos opciones utilizar el NDK de
android para poder utilizar codigo nativo en las
aplicaciones y poder usar openCV tranquilamente. O
usar javaCV el cual se podría decir que es la tradución
de openCV pero en java.
8. Despues de configuraciones simples en el IDE
eclipse ( agregar librerias externas a un
proyecto de android 2.2 ) y agregar el codigo
de ejemplo que viene para crear vistas
simples con javaCV fui creando la aplicación.
9. Para el entrenamiento me di cuenta que para
lograr resultados decentes o considerables
necesitaba una buena base de conocimiento,
por fortuna openCV contiene ya una base
entrenada por haartraining con una cantidad de
3000 samples positivos y 1500 negativos la cual
no pude quedarme con la tentación de ver que
tan acertada era con una cantidad tan grande
samples.
10. /*En esta seccion de codigo podemos ver como
*se hace el procesamiento de
*cada frame, primero se hace una
*copia a color y una en escala de grises
*despues se verifica si mCascade no esta
*vacia, este objeto es el clasificador
*despues se toman los datos para iniciar
*con la comparacion y se utiliza el
*metodo detectMultiScale del clasificador
*para comparar dicho imagen
*Despues por cada rostro que se detecte se
*crea un rectangulo para enmarcarlo.
*Por ultimo se crea un mapa de bits con los
*datos de la matriz de colores.
*/
14. Este segmento de codigo esta inmediato
despues de proporcionarle a la aplicacion la base
del entrenamiento previo. Por ultimo otras
generalidades del proyecto fueron que solo lo
pude permitir usar como landscape para tener
una uso solido y poder seleccionar el tamaño del
rostro en comparación del tamaño de resolución
del celular. Esto es para poder ver el
comportamiento dandole diferentes rangos al
procesamiento.
Código completo AQUI
15. La aplicación es capaz de detectar rostros,
utilizando un tamaño de rostro pequeño en
comparacion de la resolución de la camara.
Son buenos resultados tomando en cuenta
que el entrenamiento de la red fue tomando
desde los ejemplos que proporciona openCV.
16. Pués los resultados resultaron bastantes
satisfactorios, sin embargo no son 100%
perfectos. Esto lo digo por que cuando esta
detectando los rostros a veces confunde
otras cosas con rostros, ademas parece ser
que es más practico utilizar un tamaño de
rostro pequeño con respecto a la resolución
de la camara, pero esto produce más
procesamiento y por ende le pide mas
recursos al telefono lo cual no es muy bueno.