OpenCV2 का उपयोग करके चेहरे के स्थलों का पता लगाने में असमर्थ
मैंने उस स्क्रिप्ट का उपयोग करके dlibऔर cv2उस छवि में एक चेहरे वाले चित्रों पर चेहरे के स्थलों को खींचने के लिए एक स्क्रिप्ट विकसित की है । यहाँ स्क्रिप्ट है;
import cv2
import dlib
img_path = 'landmarks.png'
detector = dlib.get_frontal_face_detector()
shape_predictor = 'shape_predictor_68_face_landmarks.dat'
predictor = dlib.shape_predictor(shape_predictor)
count = 1
ready = True
while ready:
frame = cv2.imread("demo.jpg")
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = detector(gray)
for face in faces:
x1 = face.left()
y1 = face.top()
x2 = face.right()
y2 = face.bottom()
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 3)
landmarks = predictor(gray, face)
for n in range(0, 68):
x = landmarks.part(n).x
y = landmarks.part(n).y
cv2.circle(frame, (x, y), 4, (255, 0, 0), -1)
cv2.imshow("Frame", frame)
cv2.waitKey(0)
ready = False
अब, यहाँ क्या मुझे पागल बना देता है। जब मैं इसका परीक्षण करने के लिए Google से किसी भी चित्र (मास्क के साथ या बिना) डाउनलोड करने का प्रयास करता हूं, तो यह स्क्रिप्ट ठीक काम कर रही है। इसी तरह, आप इन परिणामों को देख सकते हैं जैसे,
लेकिन जब मैं इन निम्नलिखित छवियों पर कोशिश करता हूं, तो यह कुछ भी नहीं करता है।
मैंने इंटरनेट पर कुछ खोज की है लेकिन मुझे ऐसा कुछ नहीं मिला है जो वर्तमान उद्देश्य को पूरा कर रहा हो।
यहां तक कि, मैंने के संयोजन की कोशिश की है
cv2.CascadeClassifier("haarcascade_frontalface_default.xml")eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')m_cascade = cv2.CascadeClassifier('haarcascade_mcs_mouth.xml')
मैंने निम्नलिखित उपयोगी लिंक पर भी ध्यान दिया है;
फेस बाउंडिंग बॉक्स
Android में फेस लैंडमार्क का पता लगाएं (यहां तक कि एक ही डोमेन नहीं)
लैंडमार्क का पता लगाना
OpenCV2 चेहरे के लैंडमार्क का पता लगाएं
लेकिन यह भी इन छवियों पर काम नहीं कर रहा है। CV2 detectorएक खाली सूची दिखाता है जब मैं स्क्रिप्ट के माध्यम से डीबग करता हूं जैसे;
मैं बस उपरोक्त छवियों का उपयोग करके फ़िड्यूशियल स्थलों को आकर्षित करना चाहता हूं । सबसे अच्छा संभव उपाय, मैं किस माध्यम से जा सकता हूं? हो सकता है, मुझे कुछ याद आ रहा हो cv2और Dlib, लेकिन आवश्यकतानुसार परिणाम प्राप्त करने में असमर्थ हों।
मैं यह भी पता है आत्मविश्वास स्कोर के लिए dlibएक से सिफारिश की कार्यान्वयन का उपयोग रुचि है स्टैक ओवरफ़्लो जैसे;
import dlib
detector = dlib.get_frontal_face_detector()
img = dlib.load_rgb_image('demo.jpg')
dets, scores, idx = detector.run(img, 1, -1)
for i, d in enumerate(dets):
print("Detection {}, score: {}, face_type:{}".format(
d, scores[i], idx[i]))
यहां दूसरी पंक्ति में ऊपर दी गई छवियों में पहली छवि के लिए एक आत्मविश्वास स्कोर का परिणाम है ;
वहाँ से बाहर किसी भी भयानक लोगों से बेहतर अनुसंधान प्राप्त करने के लिए आगे देख रहे हैं। धन्यवाद
जवाब
पहले, मैं यह देखने की कोशिश कर सकता हूं कि क्या आप dlib से आत्मविश्वास स्कोर प्राप्त कर सकते हैं। मुझे यकीन नहीं है कि विश्वास सीमा क्या है, लेकिन शायद चेहरे का पता लगाया जाता है जो सीमा से नीचे हैं। से dlib Git रेपो है, तो यहां detections से विश्वास प्राप्त करने के लिए का एक उदाहरण है:
if (len(sys.argv[1:]) > 0):
img = dlib.load_rgb_image(sys.argv[1])
dets, scores, idx = detector.run(img, 1, -1)
for i, d in enumerate(dets):
print("Detection {}, score: {}, face_type:{}".format(
d, scores[i], idx[i]))
वैकल्पिक रूप से, एक अन्य फेस डिटेक्टर पर विचार करें, उदाहरण के लिए इस मोबाइलनेट एसएसडी फेस डिटेक्टर जैसे सीएनएन-आधारित डिटेक्टर। मैंने इस विशेष मॉडल का उपयोग नहीं किया है, लेकिन मैंने इसी तरह के मॉडल का उपयोग किया है, जैसे Google टीपीयू-आधारित फेस डिटेक्टर मॉडल यहां बहुत अच्छे परिणाम के साथ है।
" Shape_predictor_68_face_landmarks.dat " लिंक डाउनलोड करें: लिंक विवरण यहां दर्ज करें
100% काम करने वाला कोड यह आज़माएं:
import cv2
import dlib
import numpy as np
img= cv2.imread('Capture 8.PNG')
gray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
p = "shape_predictor_68_face_landmarks.dat"
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(p)
faces = detector(gray)
for face in faces:
x1=face.left()
y1=face.top()
x2=face.right()
y2=face.bottom()
cv2.rectangle(img, (x1,y1), (x2,y2),(0,255,0),3)
landmarks=predictor(gray, face)
for n in range(0,68):
x=landmarks.part(n).x
y=landmarks.part(n).y
cv2.circle(img, (x, y), 4, (0, 0, 255), -1)
cv2.imshow(img)