Paso 6: Reflexionar y aprender
Sí, a qué velocidad, crea dos subprocesos uno para cada servo, cuando es mover un servo, una velocidad es siempre. El subproceso e incrementa la posición del servo en uno con cada paso, hasta que alcance la posición deseada. Qué tan rápido coloca se basa en el parámetro de velocidad proporcionado. Esto le permite mover los servos a distintas velocidades, a pesar de la velocidad del motor no es ajustable. Originalmente esta implementado con hilos, pero python demostraron para tener muy mal manejo de hilos en altas cargas de CPU.
Al igual que prácticamente cualquier aplicación de reconocimiento facial de código abierto, estamos utilizando cascada de haar-clasificador de OpenCV para buscar patrones de los que se encuentran en la FrontalFace.xml incluido coincidencia a. Pero allí parece que hay algunos mal entendían y documentan aspectos de los parámetros de la función cvHaarDetectObjects que tienen un gran impacto en el rendimiento del programa.
El primer parámetro es, por supuesto, la imagen. Se pasa a la función de la imagen que desea buscar para las caras, parece haber cierta confusión en este paso - gente parece pensar que primero convirtiendo la imagen en escala de grises, el proceso será más rápido. Un simple benchmark mostrará que esto no es cierto - de hecho hará el proceso más lento porque se realiza un paso adicional. La gente también parece pensar que primero escala a la imagen hará las cosas más rápido, esto tiene sentido intuitivo, porque ahora hay una imagen más pequeños que buscan una cara dentro, pero esto es no es el método más eficiente, que me lleva al siguiente parámetro,
ScaleFactor--los habitantes de foro parecen dar sugerencias sobre lo que esto debe ser establecido en sin dar mucha explicación sobre lo que es. Para entender completamente, necesita saber cómo OpenCV detecta caras:
Detección de la cara de OpenCV: visualizado de Adam Harvey on Vimeo.
Ver ese video y una atención especial hacia el final. Tenga en cuenta que una plaza se mueve desde la parte superior izquierda a inferior derecha. Cada vez que se mueve, se ve un patrón dentro de ella--en este caso una cara, pero con OpenCV ese patrón puede ser cualquier cosa. ¿Ver cómo se hace un paso y se hace más grande, luego vuelve en él? La cantidad que aumenta de tamaño con cada pasada es el scalefactor. Si se establece será de 1.1 get 1.1 veces mayor (10%) con cada paso 1.3 sería conseguir 1.3 veces más grande con cada paso - 30%. Obviamente el más rápido está creciendo en tamaño, más rápido será completa, pero a expensas de posiblemente falta una cara que estaba allí.
El siguiente parámetro no tiene impacto sobre el rendimiento lo puedo decir. MinNeighbors indica al programa cómo exigente por lo que considera a un partido. La función está en busca de patrones y comprueba si los patrones coinciden con su base de datos patrón - un archivo xml. Creo que el valor predeterminado es 3--que significa que si hay 3 patrones dentro de cuadrados donde se busca, que coinciden con los patrones encontrados en el archivo xml, entonces considéralo un partido. Mina me la puse a 4. Cuanto más alto se establece, más seguro que usted puede ser cuando se dice que encontró un fósforo es correcto. Sin embargo, ajustado demasiado bajo y se cree todo lo que ve es una cara. Está muy alto y tendrá problemas de captura de caras reales.
El siguiente parámetro banderas; Estos son valores booleanos que permiten modificar las cosas:
uno es CV_HAAR_DO_CANNY_PRUNING. Esta bandera fue diseñada sólo para caras; cuenta la función para saltar búsqueda en áreas con bordes afilados... porque caras no suelen tener los bordes afilados. (Ver imagen adjunta, a veces puede...) Esto acelera las cosas según el contexto.
otro es HAAR_FIND_BIGGEST_OBJECT esto indica la función de retorno solamente el objeto más grande que encontró.
otro es CV_HAAR_DO_ROUGH_SEARCH que indica la función de dejar de mirar una vez que encuentra algo, se ha destinado a ser utilizado con HAAR_FIND_BIGGEST_OBJECT y mejora grandemente el rendimiento cuando usted sólo está tratando de encontrar una cara.
Los dos últimos parámetros son importantes, o al menos uno de ellos es - son MinSize y MaxSize. Un método común para acelerar la búsqueda parece ser para achicar imágenes, si desea duplicar la velocidad de la detección de una cara en una imagen de 800 x 600, la escala a 400 x 300. El problema con esa lógica es que se reducen posibles caras y haar confiablemente no encuentra caras menor de 20 x 20 píxeles. No sólo eso, ahora están utilizando recursos informáticos para reducir esa imagen. Puede obtener el mismo impulso de velocidad especificando un MinSize para la cara. 20 x 20 es el valor predeterminado, pero 40 x 40 se alocarán rápida en comparación. Cuanto más alto vayas, más rápido será la búsqueda, pero usted puede comenzar a faltar caras más pequeñas.
Sólo quería aclarar...
Espero que esto ayuda, y espero que todo el mundo disfruta trabajando con la frambuesa Pi y OpenCV tanto como lo hice.
Este es mi primer instructable. Me encantaría ver tus comentarios.
Gracias,
Chris