OpenCV no es la mejor biblioteca para tal problema. Pero permítanme analizar una posible solución a un problema tan interesante utilizando algoritmos puramente de aprendizaje automático (ML). Microsoft HowOld [1] en realidad usa enfoques ML que se ejecutan en la plataforma de computación en la nube de Azure.
Dicho esto, las mejores bibliotecas para tales problemas basados en clasificación / regresión son las bibliotecas ML como TensorFlow (TF). En TF hay algoritmos interesantes como las redes neuronales convolucionales (convNet) que puede usar para implementar sus algoritmos de detección de edad y género con algunos trucos. Simplemente reúne suficientes datos de entrenamiento y los clasifica en grupos de edad y género y entrena una arquitectura ML implementada en TF.
Pero no es tan trivial como eso, el sistema se puede implementar con dos módulos, la parte de edad se puede abordar mediante regresión y la parte de género mediante clasificación mediante una capa softmax de 2 vías, una salida para hombre y otra para mujer. Las dos subredes, la cabeza de regresión de edad y la cabeza de clasificación de género pueden compartir los mismos mapas de características convolucionales y entrenados de extremo a extremo utilizando datos sin procesar.
- Cómo aprender la estrategia de algoritmos
- ¿Cuáles son algunos de los diferentes casos que debería considerar usar matrices bidimensionales sobre matrices unidimensionales en Java?
- ¿Hay un libro sobre estructuras de datos PHP y algoritmos?
- ¿Cuál es la forma más eficiente de agregar 2 enteros?
- ¿Cuántas repeticiones del algoritmo L, U, R, D en un cubo de Rubik se necesitarían para revertir el cubo a su permutación original?
OpenCV puede ser útil para acelerar esto en una aplicación real. Se puede usar el detector de rostros de cascada para encontrar rápidamente las regiones faciales y luego enviar esas regiones a los detectores de edad / género descritos anteriormente. Pero el detector de rostros haarcascade no es muy robusto en comparación con las versiones convNet de detección de rostros. Por lo tanto, puede usar el enfoque YOLO (solo se ve una vez) para entrenar un detector facial rápido y robusto combinado con las cabezas de edad / género en un marco unificado que puede entrenar conjuntamente de una manera integral.
A estas alturas probablemente haya perdido interés en OpenCV. Pero incluso si OpenCV está limitado en las áreas de aplicación de ML, en realidad es muy importante para la mayoría de las técnicas de visión por computadora en 3D que requieren cosas como rastrear regiones sobresalientes, ajustar matrices de homografía, hacer detección de objetos a nivel de instancia, estimación de pose de cámara para realidad aumentada (AR), localización y mapeo simultáneos (SLAM) y cosido panorámico automático.
Hay muchas áreas de aplicaciones para OpenCV, pero está menos adaptado al aprendizaje automático (ML), ya que fue diseñado e implementado durante el tiempo en que los algoritmos como las redes neuronales profundas (DNN) todavía estaban en segundo plano.
Espero que esto ayude.
Notas al pie
[1] ¿Qué edad tengo?