File size: 11,019 Bytes
9375c9a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
td.linenos { background-color: #f0f0f0; padding-right: 10px; }
span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
pre { line-height: 125%; }
body .hll { background-color: #ffffcc }
body { background: #ffffff; }
body .c { color: #008000 } /* Comment */
body .err { border: 1px solid #FF0000 } /* Error */
body .k { color: #0000ff } /* Keyword */
body .ch { color: #008000 } /* Comment.Hashbang */
body .cm { color: #008000 } /* Comment.Multiline */
body .cp { color: #0000ff } /* Comment.Preproc */
body .cpf { color: #008000 } /* Comment.PreprocFile */
body .c1 { color: #008000 } /* Comment.Single */
body .cs { color: #008000 } /* Comment.Special */
body .ge { font-style: italic } /* Generic.Emph */
body .gh { font-weight: bold } /* Generic.Heading */
body .gp { font-weight: bold } /* Generic.Prompt */
body .gs { font-weight: bold } /* Generic.Strong */
body .gu { font-weight: bold } /* Generic.Subheading */
body .kc { color: #0000ff } /* Keyword.Constant */
body .kd { color: #0000ff } /* Keyword.Declaration */
body .kn { color: #0000ff } /* Keyword.Namespace */
body .kp { color: #0000ff } /* Keyword.Pseudo */
body .kr { color: #0000ff } /* Keyword.Reserved */
body .kt { color: #2b91af } /* Keyword.Type */
body .s { color: #a31515 } /* Literal.String */
body .nc { color: #2b91af } /* Name.Class */
body .ow { color: #0000ff } /* Operator.Word */
body .sa { color: #a31515 } /* Literal.String.Affix */
body .sb { color: #a31515 } /* Literal.String.Backtick */
body .sc { color: #a31515 } /* Literal.String.Char */
body .dl { color: #a31515 } /* Literal.String.Delimiter */
body .sd { color: #a31515 } /* Literal.String.Doc */
body .s2 { color: #a31515 } /* Literal.String.Double */
body .se { color: #a31515 } /* Literal.String.Escape */
body .sh { color: #a31515 } /* Literal.String.Heredoc */
body .si { color: #a31515 } /* Literal.String.Interpol */
body .sx { color: #a31515 } /* Literal.String.Other */
body .sr { color: #a31515 } /* Literal.String.Regex */
body .s1 { color: #a31515 } /* Literal.String.Single */
body .ss { color: #a31515 } /* Literal.String.Symbol */
</style>
</head>
<body>
<h2></h2>
<div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/python</span>
<span class="c1"># The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt</span>
<span class="c1">#</span>
<span class="c1"># This example shows how to run a CNN based face detector using dlib. The</span>
<span class="c1"># example loads a pretrained model and uses it to find faces in images. The</span>
<span class="c1"># CNN model is much more accurate than the HOG based model shown in the</span>
<span class="c1"># <a href="face_detector.py.html">face_detector.py</a> example, but takes much more computational power to</span>
<span class="c1"># run, and is meant to be executed on a GPU to attain reasonable speed.</span>
<span class="c1">#</span>
<span class="c1"># You can download the pre-trained model from:</span>
<span class="c1"># http://dlib.net/files/mmod_human_face_detector.dat.bz2</span>
<span class="c1">#</span>
<span class="c1"># The examples/faces folder contains some jpg images of people. You can run</span>
<span class="c1"># this program on them and see the detections by executing the</span>
<span class="c1"># following command:</span>
<span class="c1"># ./<a href="cnn_face_detector.py.html">cnn_face_detector.py</a> mmod_human_face_detector.dat ../examples/faces/*.jpg</span>
<span class="c1">#</span>
<span class="c1">#</span>
<span class="c1"># COMPILING/INSTALLING THE DLIB PYTHON INTERFACE</span>
<span class="c1"># You can install dlib using the command:</span>
<span class="c1"># pip install dlib</span>
<span class="c1">#</span>
<span class="c1"># Alternatively, if you want to compile dlib yourself then go into the dlib</span>
<span class="c1"># root folder and run:</span>
<span class="c1"># python setup.py install</span>
<span class="c1">#</span>
<span class="c1"># Compiling dlib should work on any operating system so long as you have</span>
<span class="c1"># CMake installed. On Ubuntu, this can be done easily by running the</span>
<span class="c1"># command:</span>
<span class="c1"># sudo apt-get install cmake</span>
<span class="c1">#</span>
<span class="c1"># Also note that this example requires Numpy which can be installed</span>
<span class="c1"># via the command:</span>
<span class="c1"># pip install numpy</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">dlib</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o"><</span> <span class="mi">3</span><span class="p">:</span>
<span class="k">print</span><span class="p">(</span>
<span class="s2">"Call this program like this:</span><span class="se">\n</span><span class="s2">"</span>
<span class="s2">" ./<a href="cnn_face_detector.py.html">cnn_face_detector.py</a> mmod_human_face_detector.dat ../examples/faces/*.jpg</span><span class="se">\n</span><span class="s2">"</span>
<span class="s2">"You can get the mmod_human_face_detector.dat file from:</span><span class="se">\n</span><span class="s2">"</span>
<span class="s2">" http://dlib.net/files/mmod_human_face_detector.dat.bz2"</span><span class="p">)</span>
<span class="nb">exit</span><span class="p">()</span>
<span class="n">cnn_face_detector</span> <span class="o">=</span> <span class="n">dlib</span><span class="o">.</span><span class="n">cnn_face_detection_model_v1</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">win</span> <span class="o">=</span> <span class="n">dlib</span><span class="o">.</span><span class="n">image_window</span><span class="p">()</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">:]:</span>
<span class="k">print</span><span class="p">(</span><span class="s2">"Processing file: {}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
<span class="n">img</span> <span class="o">=</span> <span class="n">dlib</span><span class="o">.</span><span class="n">load_rgb_image</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="c1"># The 1 in the second argument indicates that we should upsample the image</span>
<span class="c1"># 1 time. This will make everything bigger and allow us to detect more</span>
<span class="c1"># faces.</span>
<span class="n">dets</span> <span class="o">=</span> <span class="n">cnn_face_detector</span><span class="p">(</span><span class="n">img</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="sd">'''</span>
<span class="sd"> This detector returns a mmod_rectangles object. This object contains a list of mmod_rectangle objects.</span>
<span class="sd"> These objects can be accessed by simply iterating over the mmod_rectangles object</span>
<span class="sd"> The mmod_rectangle object has two member variables, a dlib.rectangle object, and a confidence score.</span>
<span class="sd"> </span>
<span class="sd"> It is also possible to pass a list of images to the detector.</span>
<span class="sd"> - like this: dets = cnn_face_detector([image list], upsample_num, batch_size = 128)</span>
<span class="sd"> In this case it will return a mmod_rectangless object.</span>
<span class="sd"> This object behaves just like a list of lists and can be iterated over.</span>
<span class="sd"> '''</span>
<span class="k">print</span><span class="p">(</span><span class="s2">"Number of faces detected: {}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">dets</span><span class="p">)))</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">dets</span><span class="p">):</span>
<span class="k">print</span><span class="p">(</span><span class="s2">"Detection {}: Left: {} Top: {} Right: {} Bottom: {} Confidence: {}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">i</span><span class="p">,</span> <span class="n">d</span><span class="o">.</span><span class="n">rect</span><span class="o">.</span><span class="n">left</span><span class="p">(),</span> <span class="n">d</span><span class="o">.</span><span class="n">rect</span><span class="o">.</span><span class="n">top</span><span class="p">(),</span> <span class="n">d</span><span class="o">.</span><span class="n">rect</span><span class="o">.</span><span class="n">right</span><span class="p">(),</span> <span class="n">d</span><span class="o">.</span><span class="n">rect</span><span class="o">.</span><span class="n">bottom</span><span class="p">(),</span> <span class="n">d</span><span class="o">.</span><span class="n">confidence</span><span class="p">))</span>
<span class="n">rects</span> <span class="o">=</span> <span class="n">dlib</span><span class="o">.</span><span class="n">rectangles</span><span class="p">()</span>
<span class="n">rects</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="n">d</span><span class="o">.</span><span class="n">rect</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">dets</span><span class="p">])</span>
<span class="n">win</span><span class="o">.</span><span class="n">clear_overlay</span><span class="p">()</span>
<span class="n">win</span><span class="o">.</span><span class="n">set_image</span><span class="p">(</span><span class="n">img</span><span class="p">)</span>
<span class="n">win</span><span class="o">.</span><span class="n">add_overlay</span><span class="p">(</span><span class="n">rects</span><span class="p">)</span>
<span class="n">dlib</span><span class="o">.</span><span class="n">hit_enter_to_continue</span><span class="p">()</span>
</pre></div>
</body>
</html>
|