Python圖像處理札記——dlib環(huán)境搭建與Demo驗(yàn)證

人生苦短,我用python —— 29行代碼實(shí)現(xiàn)人臉識(shí)別

0x00環(huán)境搭建

  1. VS 2017:提供C++編譯環(huán)境(C++IDE可自行選擇,非不必選安裝)
    • 需要將cl.exe配置到環(huán)境變量中,
    • cmd中輸入cl,若提示不可運(yùn)行,證明沒(méi)有將VS配置到環(huán)境變量中
    • eg:本地cl.exe路徑添加到Path路徑中
      • D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\bin\Hostx64\x64
        cl_02.PNG
    • 官方文檔VS Command Prompt 工具打開(kāi)方法
  2. cmake 官方下載地址
    • 功能介紹:Cmake是用來(lái)makefile的一個(gè)工具:讀入所有源文件之后,自動(dòng)生成makefile。
    • 圖形界面下一步到最后,安裝過(guò)程順利暫時(shí)無(wú)坑可踩
    • 本地安裝路徑: D:\CMake
  3. boost:官網(wǎng)下載
    • 功能介紹:一個(gè)開(kāi)源的C++庫(kù),豐富強(qiáng)大解壓,運(yùn)行批處理,生成bjam.exe,可執(zhí)行文件

    • 下載,解壓,編譯,配置,運(yùn)行

      • 解壓后路徑地址: D:\Program Files (x86)\boost_1_69_0
      • 為了支持跨平臺(tái)性,一部分的功能庫(kù),需要根據(jù)用戶(hù)操作系統(tǒng)編譯完成才可以使用
    • 編譯步驟

      • 首先運(yùn)行批處理腳本,生成編譯引擎bjam.exe。

        • 打開(kāi)VS的Native Tools Command,進(jìn)入boost目錄運(yùn)行批處理文件bootstrap回車(chē)
          cmd下也可以,在命令行中直接輸入.bat文件的名稱(chēng),回車(chē)即可
        • 文件夾內(nèi)會(huì)生成b2.exe, bjam.exe, project-config.jam, 和bootstrap.log四個(gè)文件
        • 細(xì)節(jié)
          • bjam.exe與b2.exe作用相同,bjam是舊版,b2是新版編譯
          • bjam.exe必須與boost-build.jam在同級(jí)目錄,其中jam文件為編譯引擎的配置讀取
          • PS : 通過(guò)命令行運(yùn)行bootstrap.bat和直接雙擊效果相同,但是在命令行中運(yùn)行你會(huì)看到如下提示比一閃而過(guò)要好得多:


            run_bat_result.PNG
      • 開(kāi)始編譯,運(yùn)行bjam.exe(PS:還是推薦用命令方式啟動(dòng)運(yùn)行,有完全編譯和指定編譯兩種選擇)

      • 配置IDE路徑和環(huán)境變量Path路徑

        • 設(shè)置環(huán)境變量
          • BOOST_ROOT = D:\Program Files (x86)\boost_1_69_0
          • BOOST_LIBRARYDIR = D:\Program Files (x86)\boost_1_69_0\stage\lib
        • IDE設(shè)置 以VS2017為例
          • 新建一個(gè)C++項(xiàng)目用以測(cè)試boost環(huán)境


            test_03.PNG
            • 源文件--新建test01.cpp,代碼如下。輸入完成后,會(huì)看到有報(bào)錯(cuò)提示,證明此時(shí)VS未加載到boost類(lèi)庫(kù)
            •   #include <boost/lexical_cast.hpp>
                #include <iostream>
                int main()
                {
                    using boost::lexical_cast;
                    int a = lexical_cast<int>("123");
                    double b = lexical_cast<double>("123.12");
                    std::cout << a << std::endl;
                    std::cout << b << std::endl;
                    return 0;
                }
              
          • 設(shè)置VS中boost加載路徑:菜單欄--項(xiàng)目--項(xiàng)目名屬性(Boostest屬性)-- 配置屬性


            test_02.PNG
            • VC++目錄中設(shè)置
              • 包含目錄 中 添加 D:\Program Files (x86)\boost_1_69_0
              • 庫(kù)目錄 中 添加 D:\Program Files (x86)\boost_1_69_0\stage\lib
            • 鏈接器
              • 附件庫(kù)目錄 添加 D:\Program Files (x86)\boost_1_69_0\stage\lib
            • 疑問(wèn) 為什么我直接仿照配置文件中語(yǔ)法$(BOOST_ROOT); $(BOOST_LIBRARYDIR); 不識(shí)別呢???
          • 編譯

            • 配置完boost路徑后,代碼中紅線(xiàn)消失,F(xiàn)5 開(kāi)始編譯代碼,輸出目錄生成exe文件
            • 疑問(wèn) 控制臺(tái)中大量“無(wú)法查找或打開(kāi)PDB文件”的解決方法”,原因缺少符號(hào)解析
              • 解決 菜單欄--調(diào)試--選項(xiàng)--調(diào)試--
                • 常規(guī)設(shè)置 右邊勾選啟用源服務(wù)器支持
                • 符號(hào)設(shè)置 右邊勾選微軟符號(hào)服務(wù)器


                  運(yùn)行完成,不會(huì)再提示無(wú)法查找或打開(kāi)PDB文件了

                  )

            • 在命令行打開(kāi)如圖


              測(cè)試正常
      • 運(yùn)行實(shí)例驗(yàn)證結(jié)果

        • 官方示例
    • 文檔資料

  4. dlib
  5. OpenCV
    • 下載安裝 pip install opencv_python

0x01人臉識(shí)別示例代碼
import sys
import dlib
import cv2

# 人臉?lè)诸?lèi)器
detector = dlib.get_frontal_face_detector()

for f in sys.argv[1:]:
    img = cv2.imread(f, cv2.IMREAD_COLOR)
    b, g, r = cv2.split(img)
    img2 = cv2.merge([r, g, b])
    dets = detector(img, 1)
    print("Number of faces detected: {}".format(len(dets)))  # 打印識(shí)別到的人臉個(gè)數(shù)

    for index, face in enumerate(dets):
        print('face {}; left {}; top {}; right {}; bottom {}'.format(index, face.left(), face.top(), face.right(),
                                                                     face.bottom()))

        left = face.left()
        top = face.top()
        right = face.right()
        bottom = face.bottom()
        cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0), 3)
        cv2.namedWindow(f, cv2.WINDOW_AUTOSIZE)
        cv2.imshow(f, img)
# 等待按鍵,隨后退出,銷(xiāo)毀窗口
k = cv2.waitKey(0)
cv2.destroyAllWindows() 
驗(yàn)證效果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容