偵測人臉位置與人臉關鍵點,兩個混 合 在 一 起
MTCNN -- Multi-task Cascaded Convolutional Networks
從完成名稱可以看出一些端倪:
到這裡你已經知道MTCNN的精隨了,剩下的就是如何訓練MTCNN。
但這部分是需要精心設計訓練資料,以及分階段訓練MTCNN (P-Net -> R-Net -> O-Net),
這裡我們只專注在如何使用,
Let's Go!
facial_landmark
目錄下新增mtcnn_predictor.py
mtcnn_predictor.py
,輸入下面到目前為止最簡單的程式碼:
import time
import cv2
import mtcnn
from imutils.video import WebcamVideoStream
def main():
# 初始化模型
detector = mtcnn.MTCNN()
# 啟動WebCam
vs = WebcamVideoStream().start()
time.sleep(2.0)
while True:
frame = vs.read()
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
faces = detector.detect_faces(rgb)
for face in faces:
(x, y, w, h) = face['box']
keypoints = face['keypoints']
conf = face['confidence']
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(frame, f"confidence: {str(round(conf, 3))}", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 2)
for (s0, s1) in keypoints.values():
cv2.circle(frame, (s0, s1), 2, (0, 0, 255), -1)
cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
# 清除用不到的物件
cv2.destroyAllWindows()
vs.stop()
if __name__ == '__main__':
main()
python facial_landmark/mtcnn_predictor.py
這次我給模型更困難的辨識情況:
但實際辨識結果你可以看到:不但辨識率有90%以上,也可以大致上辨別出眼、鼻、嘴等的位置。
而實際上,
FaceNet網路在訓練人臉辨識時也是使用MTCNN當作人臉偵測與人臉關鍵點任務使用
好工具,不學起來用嗎?