我正在微调 VGG-16 以进行面部检测,输入形状 = (120,120,3)。当我在测试集中预测它并绘制坐标时,一切看起来都是正确的。但是当我执行一些实时检测时,坐标无法正确渲染。
在这里,我绘制了一批测试集的预测坐标。
fig,axes = plt.subplots(ncols=4,nrows=4,figsize=(60,60))
for idx,ax in enumerate(axes.flatten()):
img = test_X[idx].copy()
cv2.rectangle(img,
tuple(np.multiply(coords[idx][:2], [120,120]).astype(int)),
tuple(np.multiply(coords[idx][2:],[120,120]).astype(int)),
(255,0,0),1)
ax.imshow(img)
plt.tight_layout()
这是我尝试进行实时检测的地方:
cap = cv2.VideoCapture(0)
while cap.isOpened():
_ , frame = cap.read()
frame = cv2.resize(frame,(640,380))
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
resized = tf.image.resize(rgb, (120,120))
classes,coords = facetracker.predict(np.expand_dims(resized/255.0,0))
if classes > 0.5:
# Controls the main rectangle
cv2.rectangle(frame,
tuple(np.multiply(coords[0][:2], [640,380]).astype(int)),
tuple(np.multiply(coords[0][2:], [640,380]).astype(int)),
(255,0,0), 2)
cv2.imshow('EyeTrack', frame)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
输出:实时预测截图