¿Hay una biblioteca para detectar las caras que se han rotado en el plano de la imagen? ¿O hay alguna forma en la que podría usar una cascada para la detección de la cara vertical con opencv para hacerlo?detección de rostros girados
Respuesta
manera Naive:
- lista de ángulos Generar (por ejemplo, de -170 a 180 en 10 pasos grado)
- Para cada ángulo
n
en la lista: Girar imagen- por
n
grados - Run face detector en la imagen girada
- Calcula la posición de las caras detectadas en la imagen original (deshace la rotación)
- por
- Realizar la supresión máxima no en el resultado sumado de todos los ángulos (es probable que obtener múltiples detecciones desde ángulos vecinos)
esto hace que la detección sea muy lenta y devuelve muchos más falsos positivos, pero es probablemente la única manera de hacer que la detección de Haar sea un tipo de rotación invariante ... – Ben
métodos para la detección de rostros basado en histograma de color es independiente de la orientación de la cara.
puede usar la bolsa de palabras/bolsa del método de funciones con los métodos AAM, ASM. pero también pueden dar una solución no óptima que no converge al máximo global.
también las características similares a haar son solo una colección de características y puede usar características invariantes de rotación y ponerlas luego en adaboost classifer.
Aquí es un simple que escribí con Python cv2
No es lo más eficiente, y se utiliza de la manera ingenua sugerido por etarion, pero funciona bastante bien para casi normal de la cabeza basculante (Se detecta nada de - 40 a 40 inclinación de la cabeza, que es más o menos todo lo que puede inclinar la cabeza mantenerse en posición vertical.
import cv2
from math import sin, cos, radians
camera = cv2.VideoCapture(0)
face = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
settings = {
'scaleFactor': 1.3,
'minNeighbors': 3,
'minSize': (50, 50),
'flags': cv2.cv.CV_HAAR_FIND_BIGGEST_OBJECT|cv2.cv.CV_HAAR_DO_ROUGH_SEARCH
}
def rotate_image(image, angle):
if angle == 0: return image
height, width = image.shape[:2]
rot_mat = cv2.getRotationMatrix2D((width/2, height/2), angle, 0.9)
result = cv2.warpAffine(image, rot_mat, (width, height), flags=cv2.INTER_LINEAR)
return result
def rotate_point(pos, img, angle):
if angle == 0: return pos
x = pos[0] - img.shape[1]*0.4
y = pos[1] - img.shape[0]*0.4
newx = x*cos(radians(angle)) + y*sin(radians(angle)) + img.shape[1]*0.4
newy = -x*sin(radians(angle)) + y*cos(radians(angle)) + img.shape[0]*0.4
return int(newx), int(newy), pos[2], pos[3]
while True:
ret, img = camera.read()
for angle in [0, -25, 25]:
rimg = rotate_image(img, angle)
detected = face.detectMultiScale(rimg, **settings)
if len(detected):
detected = [rotate_point(detected[-1], img, -angle)]
break
# Make a copy as we don't want to draw on the original image:
for x, y, w, h in detected[-1:]:
cv2.rectangle(img, (x, y), (x+w, y+h), (255,0,0), 2)
cv2.imshow('facedetect', img)
if cv2.waitKey(5) != -1:
break
cv2.destroyWindow("facedetect")
Personalmente, no sé de una biblioteca. Pero, lo que puedo decir es, utilizo un sistema de detección de ojos Haar Cascade, y traza una línea entre los ojos. Luego, puedes usar la función atan
y encontrar el ángulo por el cual la cabeza está rota ed. (Suponiendo que la persona tiene los dos ojos en el mismo nivel horizontal cuando la cabeza no se gira)
deg = atan((leftEye.y - rightEye.y)/(leftEye.x - rightEye.x))
Una vez que este punto de vista, rotar la imagen que tiene por negativos deg
grados y usted debe tener una cara que puede ser detectado usando las Cascadas Haar.
- 1. UIImage detección de rostros
- 2. Detección y comparación de rostros
- 3. Detección de rostros en PHP
- 4. Detección de rostros robustos en C/C++?
- 5. ¿Cómo puedo realizar la detección de colisión en rectángulos girados?
- 6. Tecnología de detección de rostros y reconocimiento de rostros en phoneGap
- 7. Herramientas de detección de rostros recomendadas/SDK/etc.
- 8. Erosión de imagen para la detección de rostros en C#
- 9. Detección de rostros con OpenCV para imágenes no frontales
- 10. píxeles de la cámara girados
- 11. Algoritmo de detección de rostros para una cara de 15x15 píxeles?
- 12. ¿Cómo obtener una "foto policial" de los cuadros de detección de rostros?
- 13. ¿Cómo elegir el archivo en cascada para la detección de rostros?
- 14. Reconocimiento de rostros en Java
- 15. Reconocimiento de rostros en R
- 16. ¿Cómo desarrollar una aplicación de reconocimiento de rostros para iPhone?
- 17. ¿Detección de la cara en Android?
- 18. Detección de Objetos 3D-Opencv
- 19. ¿Es seguro borrar registros binarios MySQL girados?
- 20. detección de parpadeo para iphone sdk
- 21. Detección de rostro lento en OpenCV?
- 22. Detección de cuerpo humano en Javascript
- 23. API de detección facial para Objective-C
- 24. ¿Una utilidad para comprimir archivos de registro girados?
- 25. jQuery problema de tamaño en los elementos girados
- 26. ¿Cómo puedo realizar el recorte en rectángulos girados?
- 27. Técnica de detección de movimiento facial en iphone
- 28. ¿Alguna biblioteca para el reconocimiento de rostros en JavaScript?
- 29. Rostros de reconocimiento facial y envejecimiento en C++
- 30. ¿Qué técnicas de imagen de preprocesamiento debo tener en cuenta antes de aplicar el método Viola-Jones de OpenCV para la detección de rostros?
¿Has probado la biblioteca EXIF ?. Estoy seguro de que será útil. –