en el reconocimiento de la cara del dispositivo – Swift

Tengo una aplicación que toma todas las imágenes del usuario (todos los activos de la aplicación Foto). Después de eso, la aplicación debe ejecutar tirar todas las imágenes y detectar rostros y devolver sus marcas faciales, y luego search en la database para ver si hay algún amigo con el mismo hito (reconocer caras de amigos), similar a lo que hace Facebook en momentos. y en la web. La aplicación mostrará todas las fotos que el amigo aparece en ellas. Parte importante de mi aplicación es la privacidad del usuario, por lo que me gustaría mantener todo el process en el dispositivo y no enviarlo al service en línea. Otra ventaja de mantenerlo en el dispositivo es que cada usuario de mi aplicación puede tener miles de imágenes, y trabajar con un service externo será expansivo y podría networkingucir el performance (si cada image necesita ser enviada al server).

De la investigación que hice, hay muchos services en línea (pero no se ajustan a mis requisitos, manteniendo el process fuera de línea). También está el CIDector que detecta las caras, y luego puede devolver algunas características como la location de los ojos y la location de la boca (que no creo que sea lo suficientemente bueno para un reconocimiento confiable). También escuché acerca de Luxand, openCV y openFace, que están todos en reconocimiento de dispositivos, pero son de class C ++, lo que dificulta la integración con un proyecto rápido (la documentation no es muy buena y no explica cómo integrarla en su proyecto y cómo realizar el reconocimiento facial en swift).

Entonces, mi pregunta es si hay alguna manera de realizar la detección de rostros que devuelva los puntos de reference faciales en el dispositivo.

  • Si no, hay alguna otra forma o service que pueda usar.

Además, si hay una forma eficiente y rápida de realizar detección y reconocimiento de rostros, si un usuario puede tener miles de imágenes.

Por cierto, estoy en la etapa inicial de desarrollo y estoy buscando services gratuitos que podría usar para la etapa de desarrollo.

iOS tiene detección de rostros nativos en el marco de CoreImage que funciona bastante bien. También puedes detectar ojos, etc. Solo mira este código, hay una muestra de cómo puedes trabajar con él.

 func detect() { guard let personciImage = CIImage(image: personPic.image!) else { return } let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyHigh] let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy) let faces = faceDetector.featuresInImage(personciImage) // converting to other coordinate system let ciImageSize = personciImage.extent.size var transform = CGAffineTransformMakeScale(1, -1) transform = CGAffineTransformTranslate(transform, 0, -ciImageSize.height) for face in faces as! [CIFaceFeature] { print("Found bounds are \(face.bounds)") // calculating place for faceBox var faceViewBounds = CGRectApplyAffineTransform(face.bounds, transform) let viewSize = personPic.bounds.size let scale = min(viewSize.width / ciImageSize.width, viewSize.height / ciImageSize.height) let offsetX = (viewSize.width - ciImageSize.width * scale) / 2 let offsetY = (viewSize.height - ciImageSize.height * scale) / 2 faceViewBounds = CGRectApplyAffineTransform(faceViewBounds, CGAffineTransformMakeScale(scale, scale)) faceViewBounds.origin.x += offsetX faceViewBounds.origin.y += offsetY let faceBox = UIView(frame: faceViewBounds) faceBox.layer.borderWidth = 3 faceBox.layer.borderColor = UIColor.networkingColor().CGColor faceBox.backgroundColor = UIColor.clearColor() personPic.addSubview(faceBox) if face.hasLeftEyePosition { print("Left eye bounds are \(face.leftEyePosition)") } if face.hasRightEyePosition { print("Right eye bounds are \(face.rightEyePosition)") } } 

}