Ich bin auf der Suche nach einer Opencv-Funktion (in Python) Erkennung der Linie linkes Ohr - Kinn - rechtes Ohr (das wie ein Parabol aussieht) auf menschlichen Gesichtern. Gibt es irgendeine Art von Haarkascade, die diesen Job macht? Ich kenne das Frontalgesicht oder die Augen Haarkaskaden, aber ich suche nach etwas genauerem.OpenCV erkennen Gesichtspunkte (Ohr-Kinn-Ohr-Linie)
2
A
Antwort
5
was Sie suchen, heißt Gesicht Wahrzeichen Erkennung. Sie können DLIB versuchen. DLIB ist in C++ geschrieben, hat aber auch einen Python-Wrapper. Install Instructions
Jetzt DLIB verwenden Sie dies zu Wahrzeichen im Zusammenhang
-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()
Ergebnisse
Punkte erreichen können:
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))
Verwandte Themen
- 1. Wie man Gesichtspunkte in opencv/Gesichtsverzerrung verschiebt
- 2. Können wir Gesichtsmarkierungen mit features2d von openCV erkennen und verfolgen?
- 3. Erkennen Mund mit OpenCV
- 4. OpenCV erkennen abgedunkeltes Rechteck
- 5. OpenCV Mit Parkplatz erkennen spots
- 6. Opencv erkennen Viereck in Python
- 7. OpenCV nicht erkennen Mat Größe
- 8. Überlappende Kreise in OpenCV erkennen
- 9. Python openCV erkennen parallele Linien
- 10. Erkennen Sternform in opencv-Python
- 11. Erkennen eines Musters mit OpenCV
- 12. Frame-Drop in OpenCV erkennen
- 13. Android OpenCV - Kurven von Houghlines erkennen
- 14. Python OpenCV: Eine allgemeine Bewegungsrichtung erkennen?
- 15. Erkennen von offenen und geschlossenen Formen opencv
- 16. Problem Erkennen von Ball mit opencv
- 17. OpenCV erkennen Quadrat mit schwierigem Hintergrund
- 18. Notwendigkeit zu erkennen, Bücher über OpenCV Python
- 19. Erkennen einer Dose oder Flasche in opencv
- 20. Erkennen von Blobs im Bild mit OpenCV
- 21. OpenCV: Katze mit bestimmter Farbe erkennen. Trivial?
- 22. OpenCV zu erkennen Bild mit Python
- 23. Erkennen von Gesichtern im Hochformat mit OpenCV
- 24. Gesichtsmerkmalspunkte Erkennung OpenCV mit
- 25. OpenCV Mit Kleidung Tasten auf einem Stück Papier erkennen
- 26. OpenCV: Mit Hough Circle Transformation Iris zu erkennen
- 27. wie Augenpupille zirkular in opencv zu erkennen ist
- 28. Wie kann ich mit OpenCV Registrierungsmarkierungen auf Papier erkennen?
- 29. Erkennen von farbigen Kreis und seine Mitte mit OpenCV
- 30. wie Mitte eines unscharfen Kreises zu erkennen mit opencv
danke das war genau das was ich gesucht habe! – fonfonx
Trotzdem bekomme ich einen Fehler bei der Zeile 'rect = dlib.rectangle (x, y, x + w, y + h)' was 'Boost.Python.ArgumentError: Python Argumenttypen in Rechteck .__ Init __ (Rechteck, numpy .int32, numpy.int32, numpy.int32, numpy.int32) nicht C++ Signatur entspricht: __init __ (_ Objekt *, lange links, lange spitze, lange rechts, lange unten) __init __ (_ Objekt *) ' Did Sie haben diesen Fehler bereits und wissen, wie Sie ihn beheben können? – fonfonx
Ich hatte keinen Fehler genau so, aber ich hatte viele Probleme und kam mit dieser Lösung und es funktionierte. :/Sie haben den richtigen Weg zu kaskaden? und der Prädiktor? – Arijit