Get Started with Face Detection with Python

NOTE: Used a pre-trained model
Face detection in photos can be performed using the classical feature-based cascade classifier using the OpenCV library (cv2).

Used packages

<span>import</span> <span>cv2</span>
<span>import</span> <span>time</span>
<span>import</span> <span>os</span>
<span>import</span> <span>cv2</span>
<span>import</span> <span>time</span>
<span>import</span> <span>os</span>
import cv2 import time import os

Enter fullscreen mode Exit fullscreen mode

OpenCV provides the CascadeClassifier class that creates a cascade classifier for face detection. The constructor can take a filename as an argument that specifies the XML file for a pre-trained model.

Download a pre-trained model (file here) for frontal face detection from the OpenCV GitHub project – to be placed in your working directory.

Setup the image directory

<span># function to get images from folder </span><span>def</span> <span>get_images</span><span>(</span><span>dir_name</span><span>):</span>
<span>list_images</span> <span>=</span> <span>os</span><span>.</span><span>listdir</span><span>(</span><span>dir_name</span><span>)</span>
<span>all_images</span> <span>=</span><span>list</span><span>()</span>
<span>for</span> <span>entry</span> <span>in</span> <span>list_images</span><span>:</span>
<span>full_path</span> <span>=</span><span>os</span><span>.</span><span>path</span><span>.</span><span>join</span><span>(</span><span>dir_name</span><span>,</span> <span>entry</span><span>)</span>
<span>if</span> <span>os</span><span>.</span><span>path</span><span>.</span><span>isdir</span><span>(</span><span>full_path</span><span>):</span>
<span>all_images</span><span>.</span><span>all_images</span> <span>+</span> <span>get_images</span><span>(</span><span>full_path</span><span>)</span>
<span>else</span><span>:</span> <span>all_images</span><span>.</span><span>append</span><span>(</span><span>full_path</span><span>)</span>
<span>return</span> <span>all_images</span>
<span># function to get images from folder </span><span>def</span> <span>get_images</span><span>(</span><span>dir_name</span><span>):</span>
    <span>list_images</span> <span>=</span> <span>os</span><span>.</span><span>listdir</span><span>(</span><span>dir_name</span><span>)</span>
    <span>all_images</span> <span>=</span><span>list</span><span>()</span>

    <span>for</span> <span>entry</span> <span>in</span> <span>list_images</span><span>:</span>
        <span>full_path</span> <span>=</span><span>os</span><span>.</span><span>path</span><span>.</span><span>join</span><span>(</span><span>dir_name</span><span>,</span> <span>entry</span><span>)</span>
        <span>if</span> <span>os</span><span>.</span><span>path</span><span>.</span><span>isdir</span><span>(</span><span>full_path</span><span>):</span>
            <span>all_images</span><span>.</span><span>all_images</span> <span>+</span> <span>get_images</span><span>(</span><span>full_path</span><span>)</span>
        <span>else</span><span>:</span> <span>all_images</span><span>.</span><span>append</span><span>(</span><span>full_path</span><span>)</span>
    <span>return</span> <span>all_images</span>
# function to get images from folder def get_images(dir_name): list_images = os.listdir(dir_name) all_images =list() for entry in list_images: full_path =os.path.join(dir_name, entry) if os.path.isdir(full_path): all_images.all_images + get_images(full_path) else: all_images.append(full_path) return all_images

Enter fullscreen mode Exit fullscreen mode

Load the model that will perform face detection on photographs by calling the detectMultiScale() function.

<span># Face Detection </span>
<span>def</span> <span>main</span><span>():</span>
<span>dir_name</span> <span>=</span> <span>'</span><span>images</span><span>'</span> <span># directory for images </span> <span>list_images</span> <span>=</span> <span>get_images</span><span>(</span><span>dir_name</span><span>)</span>
<span>for</span> <span>i</span> <span>in</span> <span>range</span><span>(</span><span>20</span><span>):</span> <span>#20 images </span> <span>image_path</span> <span>=</span> <span>list_images</span><span>[</span><span>i</span><span>]</span>
<span>print</span><span>(</span><span>image_path</span><span>)</span>
<span># load the pre-trained model </span> <span>case_path</span> <span>=</span> <span>"</span><span>haarcascade_frontalface_default.xml</span><span>"</span> <span># define the model used for recognition detection </span> <span>faceCascade</span><span>=</span> <span>cv2</span><span>.</span><span>CascadeClassifier</span><span>(</span><span>case_path</span><span>)</span>
<span>image</span><span>=</span><span>cv2</span><span>.</span><span>imread</span><span>(</span><span>image_path</span><span>)</span>
<span>gray</span> <span>=</span> <span>cv2</span><span>.</span><span>cvtColor</span><span>(</span><span>image</span><span>,</span><span>cv2</span><span>.</span><span>COLOR_BGR2GRAY</span><span>)</span> <span># make the picture to gray from color </span>
<span># face detection </span> <span>faces</span> <span>=</span> <span>faceCascade</span><span>.</span><span>detectMultiScale</span><span>(</span><span>gray</span><span>,</span>
<span>scaleFactor</span> <span>=</span> <span>1.1</span><span>,</span>
<span>minNeighbors</span><span>=</span><span>5</span><span>,</span>
<span>minSize</span> <span>=</span> <span>(</span><span>30</span><span>,</span> <span>30</span><span>))</span>
<span>for </span><span>(</span><span>x</span><span>,</span> <span>y</span><span>,</span> <span>w</span><span>,</span> <span>h</span><span>)</span> <span>in</span> <span>faces</span><span>:</span> <span># draw rectangles on the faces when detected </span> <span>cv2</span><span>.</span><span>rectangle</span><span>(</span><span>image</span><span>,</span> <span>(</span><span>x</span><span>,</span><span>y</span><span>),</span> <span>(</span><span>x</span> <span>+</span> <span>w</span><span>,</span> <span>y</span><span>+</span><span>h</span><span>),</span> <span>(</span><span>0</span><span>,</span> <span>255</span><span>,</span> <span>0</span><span>),</span> <span>2</span><span>)</span>
<span>#Load the detected faces </span> <span>cv2</span><span>.</span><span>imshow</span><span>(</span><span>"</span><span>Face Found</span><span>"</span><span>,</span> <span>image</span><span>)</span>
<span>cv2</span><span>.</span><span>waitKey</span><span>(</span><span>5</span><span>)</span>
<span>time</span><span>.</span><span>sleep</span><span>(</span><span>5</span><span>)</span>
<span>cv2</span><span>.</span><span>destroyAllWindows</span><span>()</span>
<span>if</span> <span>__name__</span> <span>==</span> <span>'</span><span>__main__</span><span>'</span><span>:</span>
<span>main</span><span>()</span>
<span># Face Detection </span>
<span>def</span>  <span>main</span><span>():</span>
    <span>dir_name</span> <span>=</span> <span>'</span><span>images</span><span>'</span> <span># directory for images </span>    <span>list_images</span> <span>=</span> <span>get_images</span><span>(</span><span>dir_name</span><span>)</span>

    <span>for</span> <span>i</span> <span>in</span> <span>range</span><span>(</span><span>20</span><span>):</span> <span>#20 images </span>        <span>image_path</span> <span>=</span> <span>list_images</span><span>[</span><span>i</span><span>]</span>

        <span>print</span><span>(</span><span>image_path</span><span>)</span>

        <span># load the pre-trained model </span>        <span>case_path</span> <span>=</span> <span>"</span><span>haarcascade_frontalface_default.xml</span><span>"</span> <span># define the model used for recognition detection </span>        <span>faceCascade</span><span>=</span> <span>cv2</span><span>.</span><span>CascadeClassifier</span><span>(</span><span>case_path</span><span>)</span>
        <span>image</span><span>=</span><span>cv2</span><span>.</span><span>imread</span><span>(</span><span>image_path</span><span>)</span>
        <span>gray</span> <span>=</span> <span>cv2</span><span>.</span><span>cvtColor</span><span>(</span><span>image</span><span>,</span><span>cv2</span><span>.</span><span>COLOR_BGR2GRAY</span><span>)</span> <span># make the picture to gray from color </span>
        <span># face detection </span>        <span>faces</span> <span>=</span> <span>faceCascade</span><span>.</span><span>detectMultiScale</span><span>(</span><span>gray</span><span>,</span>
                                            <span>scaleFactor</span> <span>=</span> <span>1.1</span><span>,</span>
                                            <span>minNeighbors</span><span>=</span><span>5</span><span>,</span>
                                            <span>minSize</span> <span>=</span> <span>(</span><span>30</span><span>,</span> <span>30</span><span>))</span>

        <span>for </span><span>(</span><span>x</span><span>,</span> <span>y</span><span>,</span> <span>w</span><span>,</span> <span>h</span><span>)</span> <span>in</span> <span>faces</span><span>:</span> <span># draw rectangles on the faces when detected </span>            <span>cv2</span><span>.</span><span>rectangle</span><span>(</span><span>image</span><span>,</span> <span>(</span><span>x</span><span>,</span><span>y</span><span>),</span> <span>(</span><span>x</span> <span>+</span> <span>w</span><span>,</span> <span>y</span><span>+</span><span>h</span><span>),</span> <span>(</span><span>0</span><span>,</span> <span>255</span><span>,</span> <span>0</span><span>),</span> <span>2</span><span>)</span>

        <span>#Load the detected faces </span>        <span>cv2</span><span>.</span><span>imshow</span><span>(</span><span>"</span><span>Face Found</span><span>"</span><span>,</span> <span>image</span><span>)</span>
        <span>cv2</span><span>.</span><span>waitKey</span><span>(</span><span>5</span><span>)</span>
        <span>time</span><span>.</span><span>sleep</span><span>(</span><span>5</span><span>)</span>
        <span>cv2</span><span>.</span><span>destroyAllWindows</span><span>()</span>

<span>if</span> <span>__name__</span> <span>==</span> <span>'</span><span>__main__</span><span>'</span><span>:</span>
    <span>main</span><span>()</span>
# Face Detection def main(): dir_name = 'images' # directory for images list_images = get_images(dir_name) for i in range(20): #20 images image_path = list_images[i] print(image_path) # load the pre-trained model case_path = "haarcascade_frontalface_default.xml" # define the model used for recognition detection faceCascade= cv2.CascadeClassifier(case_path) image=cv2.imread(image_path) gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) # make the picture to gray from color # face detection faces = faceCascade.detectMultiScale(gray, scaleFactor = 1.1, minNeighbors=5, minSize = (30, 30)) for (x, y, w, h) in faces: # draw rectangles on the faces when detected cv2.rectangle(image, (x,y), (x + w, y+h), (0, 255, 0), 2) #Load the detected faces cv2.imshow("Face Found", image) cv2.waitKey(5) time.sleep(5) cv2.destroyAllWindows() if __name__ == '__main__': main()

Enter fullscreen mode Exit fullscreen mode

Running the model loads the images and configures the cascade classifier; faces are detected, and each bounding box gets printed.

The model only works for faces directly at the camera (in front).

原文链接:Get Started with Face Detection with Python

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
To beleve , each day the sun wll not lve up to ther own smle.
要坚信,每一天的阳光都不会辜负自己的笑容
评论 抢沙发

请登录后发表评论

    暂无评论内容