Você está na página 1de 14

Comunidad de Programadores de Software Libre del Ecuador

Enviado por palichis en Mi, 08/04/2010 - 22:30


Como veo que Tonny esta interesado en opencv.. les traigo ahora los pasos para entrenar la red
neuronal para el reconocimiento de patrones, ahora ya podemos entrenarlo para que reconozca lo
que queramos
Cuando se instala la librera Opencv se puede jugar con algunos ejemplos bsicos para detectar rostro, boca, ojos,
nariz. Para ello se utiliza unos archivos *.xml de muestra que trae OpenCV.
Pero que hay de generar nuestros propios archivos para reconocimientos de objetos?
Proceso
El proceso completo lleva una serie de 4 pasos
1 Adquisicin de imagenes
2 Crear muestra
3 Entrenamiento
4 Pruebas
Lo primero que debemos hacer es generar una estructura de directorio para poder trabajar:
training
data
cascade
negativas
positivas
1.Adquisicin de imgenes:
negativas: las denominadas imgenes negativas son cualquier grupo de imgenes en las cuales no aparece el
objeto sobre el cual queremos generar el entrenamiento.
Para estas imgenes tambin hay que generar un archivo (negativas.txt) que sirve de indice para las etapas
posteriores, con la siguiente estructura:
negativas/img1.jpg
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
1 de 14 29-11-2013 12:32
negativas/img2.jpg
negativas/img3.jpg
negativas/imgn.jpg
positivas: estas imgenes son las que contienen el objeto que estamos intentando detectar. La idea es generar un
muestreo del objeto en distintos ngulos, iluminacin, etc.
Para estas imgenes tambin debe generarse un archivo indice, pero que contienen algo mas de informacin:
positivas/img1.bmp 1 100 100 25 25
positivas/img1.bmp 1 120 110 27 28
positivas/img1.bmp 1 130 900 30 31
positivas/img1.bmp 1 140 105 22 23
En este archivo se especifica donde se encuentra el objeto dentro de la imagen positiva. Siendo la primera el
numero de objetos dentro de la imagen, las 2 siguientes son las coordenadas x e y (respectivamente) y las
siguientes 2 ancho y largo.
Para generar este archivo se cuenta con una herramienta que trae OpenCV llamada objectmarker.
Para un buen entrenamiento se necesitaran aproximadamente 5000 imgenes negativas y 1500 positivas, claro
que para realizar las pruebas con unas 200 positivas y unas 1000 negativas bastar
2.Crear muestra:
En esta etapa nos valdremos de una herramienta llamada createsamples.
En este caso desde la linea de comando de GNU/Linux debemos ejecutar:
opencv-createsamples -info positivas.txt -vec data/muestra.vec -num 1500 -w 20 -h 20
-info: es la ubicacin del archivo con el indice las imgenes positivas.
-vec: es el nombre del archivo de salida con la muestra generada.
-num: cantidad de imgenes positivas.
-w: ancho de la muestra de salida.
-h: alto de la muestra de salida.
Se puede verificar el archivo con el siguiente comando:
opencv-createsamples -vec positivas.vec -w 20 -h 20
3.Entrenamiento:
Para esta etapa nos valdremos de otra herramienta llamada haartraining, el archivo indice generado con las
imgenes negativas y el archivo de muestras generado en la etapa anterior.
Nuevamente desde la linea de comandos:
opencv-haartraining -data data/cascade -vec data/muestra.vec
-bg negativas.txt -nstages 30 -nsplit 2 -minhitrate 0.999
-maxfalsealarm 0.5 -npos 1500 -nneg 5000 -w 20 -h 20 -mem 1300
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
2 de 14 29-11-2013 12:32
-mode ALL
-data: directorio de salida para la generacin del entrenamiento.
-vec: archivo con muestras generado en la etapa anterior.
-bg: archivo indice con las imgenes negativas.
-nstages: nmero de etapas de entrenamiento. Es directamente proporcional a la calidad del clasificador a generar.
-nsplit: debilidad del clasificador.
-minhitrate: mnimo rango de cada etapa.
-maxfalsealarm: determina el rango mximo de falsas alarmas admitidas para cada etapa.
-npos: numero de imgenes positivas indexadas.
-nneg: numero de imgenes negativas indexadas.
-w: ancho.
-h: alto.
-mem: memoria a utilizar en el proceso.
4.Pruebas:
como vemos en la imagen capturada lo he entrenado para que detecte las placas de los vehculos y lo saco en una
ventana nueva
Comentarios
Wow impresionante palichis (/comment/570#comment-570)
Enlace permanente (/comment/570#comment-570) Enviado por Tonny en Jue, 08/05/2010 - 21:26
Wow impresionante palichis los tutoriales estn excelentes sera mejor moverlos al libro de coplec
que cheveres cosas que se pueden hacer con sw libre
as q tenga tiempo sigo jugando con estas librerias, es chevere cuando mas personas ponen mas contenido en el
sitio.
Saludos.
(http://www.fsf.org/resources/formats/playogg)
Tienes el cdigo en python ? (/comment/581#comment-581)
Enlace permanente (/comment/581#comment-581) Enviado por Tonny en Dom, 08/29/2010 - 16:04
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
3 de 14 29-11-2013 12:32
Tienes el cdigo en python ?
(http://www.fsf.org/resources/formats/playogg)
Qu cdigo?? (/comment/583#comment-583)
Enlace permanente (/comment/583#comment-583) Enviado por palichis en Lun, 08/30/2010 - 16:13
Qu cdigo??
Opps me equivoque, me (/comment/587#comment-587)
Enlace permanente (/comment/587#comment-587) Enviado por Tonny en Mar, 09/28/2010 - 00:56
Opps me equivoque, me refera a si tu realizaste el entrenamiento y tienes los archivos xml ya que ah se ve
que encontr la placa
(http://www.fsf.org/resources/formats/playogg)
ah, sipe ah te va, tambien (/comment/592#comment-592)
Enlace permanente (/comment/592#comment-592) Enviado por palichis en Lun, 12/27/2010 - 17:05
ah, sipe ah te va, tambien envo un entrenamiento de reconocimiento de llantas, claro que no
esta bien entrenado ya que no tena las placas suficientes como pa entrenarlo bien,
entrenamiento con aprox 200 placas.. mnimo requerido 3000
Excelente post (/comment/2483#comment-2483)
Enlace permanente (/comment/2483#comment-2483) Enviado por AtariQuez en Mar, 10/09/2012 - 16:22
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
4 de 14 29-11-2013 12:32
Esta excelente este post gracias palichis por favor tu debes tener ya listo el xml sera que me podrias ayudar
con eso por favor... Y bueno de paso como veo que andas empapado del tema consultarte algunas cosas...
Gracias, saludos
Justo lo que buscaba (/comment/856#comment-856)
Enlace permanente (/comment/856#comment-856) Enviado por slawert en Vie, 10/15/2010 - 11:37
Hola.
Estoy haciendo un reconocedor de seales de trfico. Cuntas imgenes positivas y negativas crees que
necesitara por lo menos ? COnoces alguna base de datos o algun fichero xml que las contengan ya? Un saludo
y muchas gracias.
Saludos slawer, no entiendo (/comment/857#comment-857)
Enlace permanente (/comment/857#comment-857) Enviado por palichis en Mar, 10/19/2010 - 09:12
Saludos slawer, no entiendo muy bien lo que necesitas.. si puedes describir un poco mejor
tu proyecto, para poder ayudarte....
ahora si hablas de seales (/comment/858#comment-858)
Enlace permanente (/comment/858#comment-858) Enviado por palichis en Mar, 10/19/2010 - 09:24
ahora si hablas de seales quiere decir que son varias, recuerda que el entrenamiento es para
reconocer ciertos patrones, si bien las placas no son todas iguales, tienen caractersticas
similares, tienen 3 letras son de la misma tipografa, se le entrena para reconocimiento de 3 o cuatro nmeros
etc.
Si entiendo bien tu quieres ver las seales de transito, como "pare" "no estacionar" "ceda el paso" etc. nota que
tienen primero distinta forma, segundo el contenido al se amplio entonces los patrones no te van a coincidir.
Para esto debes tener un entrenamiento por separado de las N seales de transito.
Otra opcin es usar un reconocimiento o una comparacin con imgenes... algo como... http://coplec.org
/?q=2010/08/06/buscar-un-objeto-dentro-de-una-escena (http://coplec.org/?q=2010/08/06/buscar-un-objeto-dentro-
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
5 de 14 29-11-2013 12:32
de-una-escena) , pero en este caso tambin deberas hacer N comparaciones, segn las seales.
Cualquier novedad nos escribes
saludos
Hablo de seales :) (/comment/861#comment-861)
Enlace permanente (/comment/861#comment-861) Enviado por slawert en Lun, 10/25/2010 - 12:31
Hola y gracias por contestar tan rpido.
Realmente no quiero comparar con N imgenes, supongo que eso har que el vaya todo demasiado lento.
Me interesa algo como lo de las matriculas, darle ejemplos y que el programa se las arregle solo. Debera
separar, por ejemplo, las seales triangulares de las redondas en dos tipos (2 xml)?No hara, tambin, que
todo fuese muy lento? Mi intencin era realizar un nico xml.
un saludo y gracias.
Hola (/comment/867#comment-867)
Enlace permanente (/comment/867#comment-867) Enviado por palichis en Vie, 10/29/2010 -
08:50
Pues la verdad si tendras que realizar algunos xml para que te reconozca por separado
las seales, ya que como deca son diferentes, cada una tiene particularidades distintas comenzando
desde la forma, una solucin para que el reconocimiento sea rpido es escalar la imagen obtenida a la
mitas o menos..
O tal vez realizar un entrenamiento de toda la seal, es decir desde el poste al raz del suelo hasta la
parte superior, pero ah tendrs varios falsos positivos de letreros que no sean seales de transito.. es
una posible solucin.. se tendra que probar para ver la factibilidad de implementacin de este tipo
entrenamiento....
Cualquier duda o si pones en practica el entrenamiento de esta ultima idea nos comentas
saludos
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
6 de 14 29-11-2013 12:32
Hola (/comment/868#comment-868)
Enlace permanente (/comment/868#comment-868) Enviado por slawert en Vie, 10/29/2010 - 11:25
Y una vez ms gracias por contestar.
He probado lo que me sugeriste anteriormente y funciona, el problema que tengo ahora es que solo
puedo usar un fichero xml cada vez, por ejemplo, tengo un xml de seales triangulares y otro de
seales redondas. Mi pregunta es la siguiente: Puedo usarlos a la vez, es decir, puedo sobre el
mismo video capturar a la vez las seales triangulares y las redondas?o opencv me restringe a solo
un xml?
Espero haberme explicado bien.
Un saludo y Gracias.
A ver,.. lo que se tendra (/comment/869#comment-869)
Enlace permanente (/comment/869#comment-869) Enviado por palichis en Dom, 10/31/2010 - 12:00
A ver,.. lo que se tendra que hacer en este caso hacer comparaciones, si frame capturado y
primer xml tienen reconocimiento entonces sigue la secuencia, caso contrario mandas al otro
reconocimiento
redondas = cv.HaarDetectObjects(small_img, cascadered, cv.CreateMemStorage(0),haar_scale, min_neighbors,
haar_flags, min_size)
if redonas:
print redondas
elif:
trinangulares = cv.HaarDetectObjects(small_img, cascadetri, cv.CreateMemStorage(0),haar_scale, min_neighbors,
haar_flags, min_size)
if triangulares:
print triangulares
elif
exagonales = cv.HaarDetectObjects(small_img, cascade, cv.CreateMemStorage(0), haar_scale, min_neighbors,
haar_flags, min_size)
if exagonales;
print exagonales
y as con todos los xml que tengas... la verdad no te permite usar mas de un xml por funcin
saludos
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
7 de 14 29-11-2013 12:32
Gracias (/comment/870#comment-870)
Enlace permanente (/comment/870#comment-870) Enviado por slawert en Lun, 11/01/2010 - 15:24
Muchas gracias por todo.
Creo que ya tengo toda la informacin que necesito. Muchas gracias por todo. Y felicidades por los
tutoriales, estn muy bien.
Un saludo y gracias.
Pregunta (/comment/872#comment-872)
Enlace permanente (/comment/872#comment-872) Enviado por sramirez en Mar, 11/09/2010 - 09:56
Me parece muy bueno lo que has publicado, he trabajado con reconocimientos de rostros pero no me imaginaba
que se podia hacer un entrenamiento para cualquier objeto, pero me guatara que me aclares algo, las imagenes
de muestra tanto positivas y negativas deben ser obtenidas en el campo donde se va aplicar el algoritmo de
detencin o pueden ser adquiridas en otro lugar?
Gracias.
Saludos sramirez, pues las (/comment/873#comment-873)
Enlace permanente (/comment/873#comment-873) Enviado por palichis en Mar, 11/09/2010 - 18:28
Saludos sramirez, pues las imgenes pueden ser de cualquier lugar, incluso de cualquier
perspectiva, es decir de lado, de frente, desde arriba de abajo, etc etc, las imgenes negativas
pueden ser cualquier imagen, capturas de pantalla, fotos personales, tu galera de imgenes etc, siempre y
cuando no est el objeto a reconocer en ninguna de ellas,
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
8 de 14 29-11-2013 12:32
Gracias por la aclaracin, (/comment/874#comment-874)
Enlace permanente (/comment/874#comment-874) Enviado por sramirez en Mi, 11/10/2010 - 08:57
Gracias por la aclaracin, una pregunta ms, en las imagenes positivas de alguna forma es necesario especificar
donde esta el objeto o algo por el estilo? Por ejemplo en la imagen de prueba que tienes en el foro fue necesario
decir en que lugar estaba o slo bast con decirle que es una imagen positiva.
Gracias.
Aqu un documento como (/comment/877#comment-877)
Enlace permanente (/comment/877#comment-877) Enviado por Tonny en Dom, 11/14/2010 - 15:29
Aqu un documento como entrenar opencv no recuerdo de donde lo descargue pero puede servirte.
http://www.coplec.org/files/training.odt (http://www.coplec.org/files/training.odt)
(http://www.fsf.org/resources/formats/playogg)
Pues si, el documento que te (/comment/880#comment-880)
Enlace permanente (/comment/880#comment-880) Enviado por palichis en Lun, 11/15/2010 -
10:34
Pues si, el documento que te da tonny es similar a mi howto, ah tienes las coordenadas
de la imagen 130 900 30 31 x y y tamao.
Pero puedes cortar la imagen como te deca en el post anterior
y as tener 0 0 32 31.. x y y tamao de la imagen, para evitarte estar controlando las coordenadas de la
imagen
saludos
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
9 de 14 29-11-2013 12:32
Hola.. Pues si, si la imagen (/comment/879#comment-879)
Enlace permanente (/comment/879#comment-879) Enviado por palichis en Lun, 11/15/2010 - 10:24
Hola..
Pues si, si la imagen contiene mas objetos debes especificar las coordenadas de la imagen.. o lo que io hago
es cortar el espacio en donde se encuentra la imagen y pues las coordenadas serian 0 0 y el tamao de la
imagen 100 200 por ejemplo. siempre deja un los colores de fondo, no borres nada que le tape o que este a
lado de la imagen, esto sirve para mejorar el reconocimiento
Camara IP (/comment/876#comment-876)
Enlace permanente (/comment/876#comment-876) Enviado por norberto en Vie, 11/12/2010 - 13:41
Buenas, recien estoy comenzando a utilizar opencv, y no encuentro la solucin para poder obtener imagenes
desde una camara ip, podrias ayudarme o darme un consejo al respecto?
Desde ya muchas gracias
en que lenguaje estas (/comment/878#comment-878)
Enlace permanente (/comment/878#comment-878) Enviado por Tonny en Dom, 11/14/2010 - 15:32
en que lenguaje estas programando
aqu hay un trozo en c
Capt ur e * capt ur e = cvCr eat eFi l eCapt ur e( "ht t p: / / 172. 16. 0. 201" ) ; / / cr eat e a camer a c
(http://www.fsf.org/resources/formats/playogg)
Dudas.. (/comment/886#comment-886)
Enlace permanente (/comment/886#comment-886) Enviado por eduarv2015 en Lun, 11/22/2010 - 14:53
Hola que tal palichis, excelente post... En este momento me encuentro desarrollando un proyecto y estoy
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
10 de 14 29-11-2013 12:32
empezando a familiarizarme con opencv pero no entiendo varias cosas.. Como se genera el xml? Cual seria el
codigo a ejecutar? el mismos que se encuentra en la carpeta samples?? Muchas Gracias
A ver... los pasos que hay (/comment/887#comment-887)
Enlace permanente (/comment/887#comment-887) Enviado por palichis en Lun, 11/22/2010 - 15:27
A ver... los pasos que hay que seguir estn al inicio... el entrenamiento te genera el xml.. los
comandos son
opencv-createsamples -info positivas.txt -vec data/muestra.vec -num 1500 -w 20 -h 20
opencv-haartraining -data data/cascade -vec data/muestra.vec
claro que primero tienes que seguir los pasos anteriores....
el cdigo a generar?
si te refieres al cdigo para usar el xml, pues este cdigo va a depender de lo que necesites que realice tu
programa... si te sirven los que estn en samples, pues puedes usarlos
Palichis, segn entiendo (/comment/889#comment-889)
Enlace permanente (/comment/889#comment-889) Enviado por Tonny en Lun, 11/22/2010 - 22:36
Palichis, segn entiendo recortaste las imgenes positivas, lo hiciste en lote o como lo hiciste o con que
herramientas?
saludos!!!
(http://www.fsf.org/resources/formats/playogg)
tonny con gimp una a una.... (/comment/903#comment-903)
Enlace permanente (/comment/903#comment-903) Enviado por palichis en Vie, 11/26/2010 - 22:54
tonny con gimp una a una.... ufff fue un trabajo muy arduo :P
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
11 de 14 29-11-2013 12:32
Hola Palichis! (/comment/938#comment-938)
Enlace permanente (/comment/938#comment-938) Enviado por eduarv2015 en Lun, 01/10/2011 - 22:16
Hola Palichis espero que todo bien... no se si recuerdas de que te escribi hace un tiempo acerca de un proyecto
de reconocimiento...trate de hacerlo por el otro ejemplo de hallar el objeto en la imagen pero aunque resulta
mas facil aplicarlo es mas complicado trabajar con el de una manera eficiente. Estoy intentando ahora con haar
pero tengo unas dudas...
Estoy utilizando mingw para compilar... sabes los comandos que me sirvan para entrenar la red?? o como
generar los xml bajo windows?
y debo hacer el reconocimiento de manera recursiva, pasandole una serie de imagenes... algun consejo de como
hacer esto??
Muchas Gracias palichis
Muy buen post (/comment/939#comment-939)
Enlace permanente (/comment/939#comment-939) Enviado por miguel en Lun, 01/17/2011 - 14:46
Excelente ejemplo palichis... Una pregunta palichis cuantas imagenes utilizaste para este ejemplo? Cual piensas
tu que seria el minimo necesario para una imagen sencilla que no cambie mucho por ejemplo una oreja o algo
asi??
gracias miguel... Pues use (/comment/940#comment-940)
Enlace permanente (/comment/940#comment-940) Enviado por palichis en Sb, 01/22/2011 - 17:34
gracias miguel...
Pues use aprox 500 positivas y unas 1500 negativas, en el ejemplo tengo varios falsos
positivos que se pueden corregir con un entrenamiento bien realizado...
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
12 de 14 29-11-2013 12:32
Para el ejemplo que pones de la oreja pues deben tener en cuenta que la oreja no cambia mucho pero si la
cantidad de cabellos que la rodea iluminacin sombras etc....
puedes probar con pocas imgenes positivas pero mientras mas utilices mejores resultados obtendrs
Reconocimiento (/comment/2474#comment-2474)
Enlace permanente (/comment/2474#comment-2474) Enviado por Andreaa en Jue, 11/03/2011 - 15:15
Buenas tardes.... est muy bueno el ejemplo... Mi pregunta, es q yo estoy haciendo un reconocimiento de billetes
de diferentes denominaciones, pero al tomar la foto, me reconoce no solo el billete sino adems otras partes....
estoy trabajando con 500 fotos positivas...
No entiendo bien con las (/comment/2477#comment-2477)
Enlace permanente (/comment/2477#comment-2477) Enviado por palichis en Vie, 11/25/2011 - 16:08
No entiendo bien con las otras partes, pero supongo haces referencia a falsos positivos.
Bueno Andreaa, hay gran diferencia entre placas de auto y un billete, como te das cuente al billete tiene
mayor detalle y mayor cantidad de texturas etc, entonces para un mejor resultado sera optimo que se
entrene con mayor cantidad de imgenes positivas....
saludos
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
13 de 14 29-11-2013 12:32
detectar sonrisas (/comment/2475#comment-2475)
Enlace permanente (/comment/2475#comment-2475) Enviado por ana en Vie, 11/25/2011 - 13:53
porfavor de manera urgente necesito ayuda, mi tesis es acerca de detectar sonrisas hice el procesos de
entrenamiento pero no m creo un .xml me creo carpetas con .txt dentro no se como ocuparlo y estoy a poko
tiempo de entregarlo por favor ayudame
Hola, ana (/comment/2476#comment-2476)
Enlace permanente (/comment/2476#comment-2476) Enviado por palichis en Vie, 11/25/2011 - 16:05
Hola, ana
Es normal que te salga un montn de carpetas con txt, eso es parte del entrenamiento, y al final de todo el
proceso las carpetas van a quedarse ah pero tambin se te generar el archivo xml que es la cascada con la
informacin de tu entrenamiento, no cortes este entrenamiento en ningn momento porque el xml
aparecer al final de todo el proceso.
Te recuerdo que el entrenamiento se demorar dependiendo del nmero de imgenes positivas y negativas,
pero igual mientras mas positivas tengas mejor resultados obtendrs
Como entrenar una red neuronal en Opencv (/comment/2478#comment-2478)
Enlace permanente (/comment/2478#comment-2478) Enviado por caprilu5 en Mi, 11/30/2011 - 17:39
Hola a todos, soy nueva y la info que hay es buena, lo que pasa es que no se como generar los archivos .txt para
las imagenes positiva y negativas, para el entrenamiento de la red, es decir no se cmo guardar las imagenes,
me podrian ayudar en esto, es que estoy haciendo mi trabajo de grado y necesito entrenar un red neuronal con
opencv. Gracias
Entrenar opencv | C O P L E C http://www.coplec.org/2010/08/05/entrenar-opencv
14 de 14 29-11-2013 12:32

Você também pode gostar