ios - digitos - Reconocimiento facial en el iPhone
cual es el codigo de iphone (5)
El reconocimiento facial se puede implementar como un algoritmo de aprendizaje automático. Este libro tiene un capítulo que describe esta tarea y cómo implementarla. ¡Vale la pena la lectura!
Utiliza la descomposición de valor único (SVD), más específicamente el método Tensor SVD .
¿Cómo puedo hacer reconocimiento facial en el iPhone? ¿Podría alguien proporcionarme referencias / artículos para señalarme en la dirección correcta, por favor? Investigué y me di cuenta de que primero tenía que hacer la detección facial para extraer la imagen y luego hacer un reconocimiento facial al compararla con otras imágenes dentro de una base de datos.
Me di cuenta de que tengo la detección de rostros usando OpenCV o utilizando iOS 5.0 y superior para detectar la cara. No estoy seguro del reconocimiento facial (planeo almacenar imágenes en una base de datos remota y luego hacer la comparación con la base de datos remota).
Es probable que desee ver el proyecto de Midian por Pedro Centieiro, que realiza Reconocimiento de Rostros en iOS 5 con OpenCV. Está en github en:
Utiliza partes de mi libfacerec , por lo que es compatible con Eigenfaces, Fisherfaces y Hispanos de patrones binarios locales para el reconocimiento de rostros.
Detección de rostro
Utilizaría las Haarcascades disponibles en CV abierto para realizar una detección de rostros rápida y precisa.
http://opencv.willowgarage.com/wiki/FaceDetection
Reconocimiento facial
Utilizaría un método como Análisis de Componentes Principales (PCA) aka eigenfaces.
http://www.cognotics.com/opencv/servo_2007_series/part_5/index.html
Ese enlace muestra un tutorial sobre cómo conseguir que funcione con OpenCV; creo que está escrito para C, pero estoy seguro de que puede obtener una explicación básica de ello.
También podría considerar implementarlo usted mismo si se siente valiente (no es tan malo) ...
http://www.face-rec.org/algorithms/PCA/jcn.pdf
http://blog.zabarauskas.com/eigenfaces-tutorial/
Base de datos
De hecho, hice algo similar a ti, aunque en una PC, no en un iPhone, pero sigue siendo el mismo concepto. Almacenaba todas mis imágenes en la base de datos como tipos de datos Blob y luego las cargaba en mi programa cuando era necesario.
Editar
La base de datos es una parte particularmente complicada del sistema, ya que es donde se encuentra el mayor cuello de botella. En mi solicitud, seguiría los siguientes pasos ...
- Abra la aplicación y tome imágenes de entrenamiento de la base de datos
- Genere un conjunto de entrenamiento basado en estas imágenes
- Una vez que se completó 1 y 2, el sistema es muy rápido ya que solo realiza reconocimiento contra el conjunto de entrenamiento.
Afortunadamente para mí, mi servidor de base de datos estaba ubicado en una LAN, por lo tanto la velocidad no era un problema, sin embargo, puedo ver por qué tiene un problema debido a que en un dispositivo móvil tiene una conexión de datos limitada (velocidad / ancho de banda). Puede comprimir las imágenes, pero esto puede llevar a una peor tasa de reconocimiento, debido a la reducción de la calidad de la imagen y también tendrá que decodificar en el dispositivo. También está la cuestión de cómo exponer la base de datos remota a la aplicación, sin embargo, sí creo que esto es posible utilizando PHP y JSON (y otras tecnologías, ver a continuación).
Recuperando datos de una base de datos remota
¿Tal vez podría hacer una sincronización inicial con la base de datos para que las imágenes estén almacenadas en la memoria caché del teléfono? De una forma u otra, creo que probablemente tendrá que tener las imágenes en el teléfono en algún momento independientemente.
Descubrir la mejor manera de almacenar los datos / imágenes de reconocimiento en la base de datos fue uno de los mayores desafíos que enfrenté, por lo que me interesaría saber si encuentra un buen método.
Tenemos la siguiente aplicación de reconocimiento facial:
1. OpenCV
2. Kairos
3. CraftarAR
4. AAFaceDetection
5. MoodMe
Y, en mi opinión, CraftAR
es bueno si desea usarlo en aplicaciones fuera de línea y, en caso de que quiera utilizarlo en línea, Kairos
es el mejor. Mientras que OpenCV
es también una opción famosa y confiable.
Y la mejor ventaja de OPENCV es que es de código abierto.
Busque estos en google para obtener más detalles y también vea ejemplos de github para ver cómo funcionan estas API.
Como señaló, el primer paso (detección de la cara) es fácil con iOS 5 y CoreImage.framework
. Ejemplo rápido:
CIImage *image = [CIImage imageWithCGImage:image_ref];
NSDictionary *options = [NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy];
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:options];
NSArray *features = [detector featuresInImage:image];
for (CIFaceFeature *feature in features)
{
CGRect face_bounds = [feature bounds];
CGPoint mouth_position = [feature mouthPosition];
// do something with these values
}
Con respecto a la segunda parte de su pregunta (es decir, el reconocimiento facial), se lo dejo a alguien más calificado que yo para responder. :)