Я пытаюсь нанести ключевые точки лица на видеокадр с помощью Open CV Video Capture. Я использую обученную модель CNN Pytorch. Вот код:
cap = cv.VideoCapture(0)
time.sleep(2.0)
while cap.isOpened():
ret, frame = cap.read()
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
face_gray = gray[y:y+h, x:x+w]
sample = cv.resize(face_gray, (96, 96))
sample = sample.astype('float32')/255
sample = np.asarray(sample).reshape(1,96,96)
sample = torch.from_numpy(sample).unsqueeze(0).to(device)
output = saved_model(sample)
output = output.view(-1, 2).detach()
output = (output * 48) + 48
output = output.cpu().numpy()
print(output)
for i in range(15):
cv.circle(frame, (output[i][0], output[i][1]), 1, (0, 0, 255), -1)
cv.imshow("Frame", frame)
key = cv.waitKey(1) & 0xFF
if key == ord('q'):
break
cap.release()
cv.destroyAllWindows()
Входной размер: факел. Тензор ([1,1,96,96]), 1 изображение в оттенках серого
Выходной размер: факел. Тензор ([15, 2]), (x, y) из 15 ключевых точек лица
При обнаружении лица (с использованием каскада Хаара) в режиме видеозахвата выходные значения совпадают, из-за чего график ключевых точек не изменяется.