Стабилизация лицевых ориентиров
Я создал модель для предсказания глаз через модули openCV и Dlib на python. Переходя по этой ссылке. Модель при создании и я использовал ее в реальном времени для тестирования. Ориентиры были шаткими, и если я пытаюсь переместить / повернуть / наклонить голову, ориентиры не останутся на глазах, либо они будут двигаться вверх / вниз. Я попытался применить к нему оптический поток, но это тоже не помогло. Не могли бы вы помочь мне с этим, чтобы я смог стабилизировать ориентир?? Спасибо.
Вот фрагмент кода обнаружения глаз в реальном времени.
cap = cv2.VideoCapture(0)
_, frame = cap.read()
frame = imutils.resize(frame, width=600)
fst_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
detector = dlib.get_frontal_face_detector()
# pre = open("shape_predictor_68_face_landmarks.dat.bz2", 'rb')
# pred = joblib.load(pre)
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks (1).dat')
lk_params = dict(winSize = (10, 10),
maxLevel = 4,
criteria = (cv2.TERM_CRITERIA_EPS | cv2.TermCriteria_COUNT, 10, 0.03))
point = ()
eX = 0
eY = 0
while True:
_, frame = cap.read()
frame = imutils.resize(frame, width=600)
grayframe = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = detector(grayframe, 0)
for face in faces:
(x, y, w, h) = face_utils.rect_to_bb(face)
# print(x, y, w, h)
cv2.rectangle(frame, (x , y), (x + w, y + h), (255,0,0), 2)
landmarks = predictor(grayframe, face)
landmarks = face_utils.shape_to_np(landmarks)
for eX, eY in landmarks:
if eX is not 0 and eY is not 0:
# print("eye_pred")
prev_points = np.array([[eX, eY]], dtype=np.float32)
cv2.circle(frame, (eX, eY), 1, (0,0,255), -1)
# print(prev_points)
new_landmark, status, error = cv2.calcOpticalFlowPyrLK(fst_gray, grayframe, prev_points, None, **lk_params)
fst_gray = grayframe.copy()
prev_points = new_landmark
nX, nY = new_landmark.ravel()
cv2.circle(frame, (nX, nY), 1, (0,255,0), -1)
# print(new_landmark)
cv2.imshow("Video Stream", frame)