Dlib機器學習庫編譯以及安裝
阿新 • • 發佈:2019-01-29
這篇主要是編譯和安裝,最終目的是編譯出dilb.lib,這樣就可以將該靜態庫新增到我們自己的工程,供我們使用。
步驟一:下載Dlib庫
下載連結:http://dlib.net/
可以看到網站上還提供了了C++與Python的例程。
步驟二:用CMake製作dilb.lib
配置好路徑後,點選1,會提示你選擇編譯器,按照你的需求選擇就可以。前提是你的電腦必須安裝,比如你想編譯VS2013X64,你必須安裝VS2013.然後點選2.等待即可。
如果你以為這樣就OK,那就錯了,以上只是將Dlib轉換成了一個VS工程,我們還需要開啟VS,生成這個工程。
步驟三:生成dlib.lib
開啟F:/dlibbuild2013x64(這是我的儲存路勁,請換成你自己的),找到Project.sln,開啟後
根據你的需要選擇Debug或Release,win32或X64
右擊ALL_BUILD->重新生成。等待編譯好後在F:/dlibbuild2013x64 裡多出兩個兩個資料夾Debug和x64,dlib.lib在Debug資料夾裡。匯入自己的工程就OK了!
步驟一:下載Dlib庫
下載連結:http://dlib.net/
可以看到網站上還提供了了C++與Python的例程。
步驟二:用CMake製作dilb.lib
配置好路徑後,點選1,會提示你選擇編譯器,按照你的需求選擇就可以。前提是你的電腦必須安裝,比如你想編譯VS2013X64,你必須安裝VS2013.然後點選2.等待即可。
如果你以為這樣就OK,那就錯了,以上只是將Dlib轉換成了一個VS工程,我們還需要開啟VS,生成這個工程。
步驟三:生成dlib.lib
開啟F:/dlibbuild2013x64(這是我的儲存路勁,請換成你自己的),找到Project.sln,開啟後
根據你的需要選擇Debug或Release,win32或X64
右擊ALL_BUILD->重新生成。等待編譯好後在F:/dlibbuild2013x64 裡多出兩個兩個資料夾Debug和x64,dlib.lib在Debug資料夾裡。匯入自己的工程就OK了!
Dlib庫的人臉檢測演算法使用的hog特徵與級聯分類器。廢話少說,下面開始。
步驟一:建立工程,配置工程。
建立工程就不多說了,不用預編譯頭,建立一個空專案就可以。下面主要說配置。
(1)
(2)
(3)就是把上一篇部落格中生成的dlib.lib匯入工程中
在此我使用的dlib庫提供的例子,我只是增加了中文註釋
<code class="hljs fsharp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt</span> /* This example program shows how <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> find frontal human faces <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> an image. In particular, this program shows how you can take a list <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> images from the command line <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> display each on the screen <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">with</span> red boxes overlaid on each human face. 檢測正臉,可檢測一系列的圖片上的人臉並用紅色方框表示 The examples/faces folder contains some jpg images <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> people. You can run this program on them <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> see the detections by executing the following command: ./face_detection_ex faces/*.jpg 可以使用此命令執行該程式 This face detector is made using the now classic Histogram <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> Oriented Gradients (HOG) feature combined <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">with</span> a linear classifier, an image pyramid, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> sliding window detection scheme. This <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">type</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">of</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">object</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">detector</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">is</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">fairly</span></span> general <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> capable <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> detecting many types <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> semi-rigid objects <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> addition <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> human faces. Therefore, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> you are interested <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> making your own object detectors <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">then</span> read the fhog_object_detector_ex.cpp example program. It shows how <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">use</span> the machine learning tools which were used <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> create dlib's face detector. Finally, note that the face detector is fastest <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">when</span> compiled <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">with</span> at least SSE2 instructions enabled. So <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> you are using a PC <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">with</span> an Intel <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> AMD chip <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">then</span> you should enable at least SSE2 instructions. If you are using cmake <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> compile this program you can enable them by using one <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> the following commands <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">when</span> you create the build project: cmake path_to_dlib_root/examples -DUSE_SSE2_INSTRUCTIONS=ON cmake path_to_dlib_root/examples -DUSE_SSE4_INSTRUCTIONS=ON cmake path_to_dlib_root/examples -DUSE_AVX_INSTRUCTIONS=ON This will set the appropriate compiler options <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> GCC, clang, Visual Studio, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> the Intel compiler. If you are using another compiler <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">then</span> you need <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> consult your compiler's manual <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> determine how <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> enable these instructions. Note that AVX is the fastest but requires a CPU from at least <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2011.</span> SSE4 is the next fastest <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> is supported by most current machines. */ #include <dlib/image_processing/frontal_face_detector.h> #include <dlib/gui_widgets.h> #include <dlib/image_io.h> #include <iostream> using <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">namespace</span> dlib; using <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">namespace</span> std; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// ----------------------------------------------------------------------------------------</span> int main(int argc, char** argv) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (argc == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>) { cout << <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Give some image files as arguments to this program."</span> << endl; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; } frontal_face_detector detector = get_frontal_face_detector();<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//定義一個frontal_face_detctor類的例項detector,用get_frontal_face_detector函式初始化該例項</span> image_window win;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//一個顯示視窗</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Loop over all the images provided on the command line.</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 迴圈所有的圖片</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (int i = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; i < argc; ++i) { cout << <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"processing image "</span> << argv[i] << endl; array2d<unsigned char> img; load_image(img, argv[i]);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 載入一張圖片,從argv[i](圖片路勁)載入到變數img</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Make the image bigger by a factor of two. This is useful since</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// the face detector looks for faces that are about 80 by 80 pixels</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// or larger. Therefore, if you want to find faces that are smaller</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// than that then you need to upsample the image as we do here by</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// calling pyramid_up(). So this will allow it to detect faces that</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// are at least 40 by 40 pixels in size. We could call pyramid_up()</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// again to find even smaller faces, but note that every time we</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// upsample the image we make the detector run slower since it must</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// process a larger image.</span> /*確保檢測圖片是檢測器的兩倍。這第一點是十分有用的,因為臉部檢測器搜尋的人臉大小是<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>*<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>或者更大。 因此,如果你想找到比<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>*<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>小的人臉,需要將檢測圖片進行上取樣,我們可以呼叫pyramid_up()函式。 執行一次pyramid_up()我們能檢測<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">40</span>*<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">40</span>大小的了,如果我們想檢測更小的人臉,那還需要再次執行pyramid_up()函式。 注意,上取樣後,速度會減慢!*/ pyramid_up(img);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//對影象進行上採用,檢測更小的人臉</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Now tell the face detector to give us a list of bounding boxes</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// around all the faces it can find in the image.</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//開始檢測,返回一系列的邊界框</span> std::vector<rectangle> dets = detector(img);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//detector()函式檢測人臉,返回一系列邊界盒子</span> cout << <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Number of faces detected: "</span> << dets.size() << endl;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//dets.size 人臉數量</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Now we show the image on the screen and the face detections as</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// red overlay boxes.</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 在原圖片上顯示結果</span> win.clear_overlay(); win.set_image(img); win.add_overlay(dets, rgb_pixel(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">255</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>)); cout << <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Hit enter to process the next image..."</span> << endl; cin.get(); } } catch (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exception</span>& e) { cout << <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\nexception thrown!"</span> << endl; cout << e.what() << endl; } } <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// ----------------------------------------------------------------------------------------</span> </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li></ul>
(2)這個程式碼是帶參主函式,我們可以編譯完後用命令列的形式執行。如果你不想那麼麻煩,我們可以在屬性裡設定命令引數
做完這一切,編譯執行就可以了。
注意!!!
如果有如下報錯1>dlib.lib(base_widgets.obj) : error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項: 值“2”不匹配值“0”(dlib_face.obj 中)
1>dlib.lib(base_widgets.obj) : error LNK2038: 檢測到“RuntimeLibrary”的不匹配項: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”(dlib_face.obj 中)
原因是,你生成的dlib.lib是debug版本,而你的工程建立的是release版本,所有會有這個包括,只要將兩者保持一致,就沒有在這個報錯了!