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