Я ищу функцию opencv (в python), обнаруживающую линию левого уха - подбородок - правое ухо (похожее на парабол) на человеческих лицах. Есть ли какой-нибудь хааркаскад, выполняющий эту работу? Я уже знаю лобное лицо или глаза haarcascades, но я ищу что-то более точное.OpenCV обнаруживает ориентиры лица (линия уха-подбородок)
2
A
ответ
5
То, что вы ищете, называется распознаванием ориентира лица. Вы можете попробовать DLIB. DLIB написан на C++, но также имеет оболочку python. Install Instructions
Теперь с помощью DLib вы можете достичь этой
Code
import cv2
import dlib
import numpy
PREDICTOR_PATH = "/home/zed/dlib/files/shape_predictor_68_face_landmarks.dat"
predictor = dlib.shape_predictor(PREDICTOR_PATH)
cascade_path='haarcascade_frontalface_default.xml'
cascade = cv2.CascadeClassifier(cascade_path)
# #This is using the Dlib Face Detector . Better result more time taking
# def get_landmarks(im):
# rects = detector(im, 1)
# rect=rects[0]
# print type(rect.width())
# fwd=int(rect.width())
# if len(rects) == 0:
# return None,None
# return np.matrix([[p.x, p.y] for p in predictor(im, rects[0]).parts()]),fwd
def get_landmarks(im):
rects = cascade.detectMultiScale(im, 1.3,5)
x,y,w,h =rects[0]
rect=dlib.rectangle(x,y,x+w,y+h)
return numpy.matrix([[p.x, p.y] for p in predictor(im, rect).parts()])
def annotate_landmarks(im, landmarks):
im = im.copy()
for idx, point in enumerate(landmarks):
pos = (point[0, 0], point[0, 1])
cv2.putText(im, str(idx), pos,
fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,
fontScale=0.4,
color=(0, 0, 255))
cv2.circle(im, pos, 3, color=(0, 255, 255))
return im
im=cv2.imread('face_leo1.jpg')
cv2.imshow('Result',annotate_landmarks(im,get_landmarks(im)))
cv2.waitKey(0)
cv2.destroyAllWindows()
Результаты
Очки, связанные с ориентир:
FACE_POINTS = list(range(17, 68))
MOUTH_POINTS = list(range(48, 61))
RIGHT_BROW_POINTS = list(range(17, 22))
LEFT_BROW_POINTS = list(range(22, 27))
RIGHT_EYE_POINTS = list(range(36, 42))
LEFT_EYE_POINTS = list(range(42, 48))
NOSE_POINTS = list(range(27, 35))
JAW_POINTS = list(range(0, 17))
CHIN_POINTS=list(range(6,11))
Смежные вопросы
- 1. Saving обнаружены ориентиры для лица в файл
- 2. распознавание лица OpenCV/EmguCV
- 3. OpenCV линия/обнаружение линейки
- 4. распознавание лица OpenCV
- 5. OpenCV: Одно обнаружения лица
- 6. Opencv Обнаружение лица медленнее
- 7. распознавание лица opencv
- 8. лица образец обнаружения OpenCV
- 9. OpenCV обнаружение лица
- 10. iPhone OpenCV обнаружение лица
- 11. OpenCV обнаруживает затемненный прямоугольник
- 12. opencv обнаруживает световую частоту
- 13. OpenCV обнаруживает пересечение контуров
- 14. OpenCV обнаруживает границу изображения
- 15. Сравнение лиц, использующих ориентиры?
- 16. OpenCV & Python: Обнаружение лица с использованием haarcascades обнаруживает много ящиков в виде глаз.
- 17. OpenCV - линия подгонки Ransac
- 18. линия сканирования OpenCV
- 19. Haarcascade обнаруживает только площадь лица, а не уши
- 20. распознавание лица OpenCV + Qt + cvMat
- 21. opencv - обнаружение лица на android
- 22. Обнаружение лица (Haar) без opencv
- 23. Медленное распознавание лица на OpenCV?
- 24. Распознавание лица OpenCV в Python
- 25. Haar- Каскадное распознавание лица OpenCv
- 26. Обнаружение лица с использованием opencv
- 27. openCV распознавание лица в видеороликах
- 28. OpenCV петля обнаружения лица параметры
- 29. Превосходные прогнозы OpenCV для лица
- 30. CamShift + обнаружение лица в OpenCv
спасибо, что это именно то, что я искал! – fonfonx
Тем не менее, я получаю ошибку в строке 'rect = dlib.rectangle (x, y, x + w, y + h)', которая является 'Boost.Python.ArgumentError: типы аргументов Python в прямоугольник .__ init __ (rectangle, numpy .int32, numpy.int32, numpy.int32, numpy.int32) не соответствует C++ подпись: __init __ (_ объект *, длинный левый, длинный верх, длинный правый, нижний длинный) __init __ (_ объект *) ' ли вы уже получили эту ошибку и знаете, как ее исправить? – fonfonx
У меня не было такой ошибки, но я столкнулся с множеством проблем и придумал это решение, и это сработало. :/у вас есть правильный путь к каскаду ?? и предиктором ?? – Arijit