deep learning face detection

you can perform fast, accurate face detection with OpenCV using a pre-trained deep learning face detector model shipped with the library


"hidden" deep learning-based face detector that has been part of OpenCV since OpenCV 3.3


today's blog post:
(1)where this "hidden" deep learning face detector lives in the OpenCV library
(2)how you can perform face detection in images using OpenCV and deep learning
(3)how you can perform face detection in video using OpenCV and deep learning


back in august 2017, OpenCV 3.3 was officially released, bringing it with it a highly improved "deep neural networks" (dnn) module


this module supports a number of deep learning frameworks, including Caffe, Tensorflow, and Torch/PyTorch


since the release of OpenCV 3.3, I've been sharing a number of deep learning OpenCV tutorials


the Caffe-based face detector can be found in the face_detector sub-directory of the dnn samples


when using OpenCV's deep neural network module with Caffe models, you'll need two sets of files:
the .prototxt files which define the model architecture (the layers themselves)
the .caffemodel file which contains the weights for the actual layers
both files are required to when using models trained using Caffe for deep learning


OpenCV's deep learning face detector is based on the Single Shot Detector (SSD) framework with a ResNet base network (unlike other OpenCV SSDs that you may have seen which typically use MobileNet as the base network)


###
# import the neceesary packages
from imutils.video import VideoStream
import numpy as np
import argparse
import imutils
import time
import cv2


"""
python detect_faces_video_test1.py \
--prototxt deploy.prototxt.txt \
--model res10_300x300_ssd_iter_140000.caffemodel
"""


# contruct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-p", "--prototxt", required=True,
help="path to Caffe 'deploy' prototxt file")
ap.add_argument("-m", "--model", required=True,
help="path to Caffe pre-trained model")
ap.add_argument("-c", "--confidence", type=float, default=0.5,
help="minimum probability to filter weak detections")
args = vars(ap.parse_args())


# load our serialized model from disk
print("[INFO] loading model...")
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])


# initialize the video stream and allow the camera sensor to warm up
print("[INFO] starting video stream...")
vs = VideoStream(src=1).start()
time.sleep(2.0)


# loop over the frames from the video stream
while True:
# grab the frame from the threaded video stream and resize it
# to have a maximum width of 400 pixles
frame = vs.read()
#frame = imutils.resize(frame, width=400)


# grab the frame dimensions and convert it to a blob
(h, w) = frame.shape[:2]
blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)), 1.0,
(300, 300), (104.0, 177.0, 123.0))


# pass the blob through the network and obtain the detections and predictions
net.setInput(blob)
detections = net.forward()


# loop over the detections
for i in range(0, detections.shape[2]):
# extract the confidence (probability) associated with the predction
confidence = detections[0, 0, i, 2]


# filter out weak detections by ensuring the confidence is
# greater than the minimum confidence
if confidence < args["confidence"]:
continue


# compute the (x, y)-coordinates of the bounding box for the object
box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
(startX, startY, endX, endY) = box.astype("int")


# draw the bounding box of the face along with the associated probability
text = "{:.2f}%".format(confidence * 100)
y = startY - 10 if startY - 10 > 10 else startY + 10
cv2.rectangle(frame, (startX, startY), (endX, endY),
(0, 0, 255), 2)
cv2.putText(frame, text, (startX, y),
cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 0, 255), 2)


# show the output frame
cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF


# if the q key was pressed, break from the loop
if key == ord("q"):
break


# do a bit of cleanup
cv2.destroyAllWindows()
vs.stop()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值