關於python整合dlib

何33512336發表於2020-09-26

前言

這是一篇以“踩坑”為驅動的文章,如果直接使用pip install dlib安裝,那麼就會引用到對C++編譯的Cmake和boost,如果還使用了win系統,還會涉及到visual studio和winSdk等各個方面,以及各種庫的版本問題。顯然上述南轅北轍。如果在python環境下涉及到庫的安裝最好使用非編譯的包*.whl,這種方式是較為合理的,也很簡潔。

1.dlib簡介

Dlib是一個現代化的C ++工具箱,其中包含用於在C ++中建立複雜軟體以解決實際問題的機器學習演算法和工具。它廣泛應用於工業界和學術界,包括機器人,嵌入式裝置,行動電話和大型高效能運算環境。Dlib的開源許可證 允許您在任何應用程式中免費使用它。詳情見文末所附內容

2.獲取渠道

 這是官方的下載通道https://pypi.org/project/dlib/#files,值得注意的是需要下載對應自己python版本的包。

個人渠道dlib-19.21.99-cp38-cp38-win_amd64.whl適用於py3.8

個人渠道dlib-19.6.0-cp36-cp36m-win_amd64.whl適用於py3.6

3.python安裝whl

    在與此資料夾同級下開啟cmd  執行pip install *.whl即可。

4.dlib的使用目標檢測

dlib 中的函式 find_candidate_object_locations() 能夠識別指定的圖片,並把可能存在目標的物件找出來。實現方法基於 Koen van de Sande 的論文 Segmentation as Selective Search for Object Recognition by Koen E. A. van de Sande, et al.。這個方法可以快速找到候選目標的區域,我們可以使用這些區域進行後續操作。

示例程式碼 如下:

import dlib

image_file = 'test1.jpg'
img = dlib.load_rgb_image(image_file)

# Locations of candidate objects will be saved into rects
rects = []
dlib.find_candidate_object_locations(img, rects, min_size=500)

print("number of rectangles found {}".format(len(rects))) 
for k, d in enumerate(rects):
    print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
        k, d.left(), d.top(), d.right(), d.bottom()))

程式碼中, 函式 load_rgb_image(...) 接受一個檔名稱,然後返回 numpy 陣列物件,這個作為 find_candidate_object_locations(...) 函式的輸入。函式 find_candidate_object_locations(...) 第二個引數 rects 為列表,儲存找到候選推向所在的區域,第三個引數 min_size 表示找到的區域大小不應該小於指定的畫素值。

 

:詳細特點

文件豐富

  1. 與許多開源專案不同的是,Dlib為每個類和功能提供了完整和精確的文件。同時它還有除錯模式,可以幫助你檢查使用某個函式的先決條件。啟用此功能後,它將捕獲由於錯誤地呼叫函式或以不正確的方式使用物件而導致的絕大多數錯誤。
  2. 提供了許多示例程式(非常有用的示例!)
  3. 我認為文件是函式庫最重要的部分。因此,如果您發現任何未記錄的內容,不清楚或已過時的文件,請告訴原作者,作者會及時修復它。

高質量的廣泛相容的程式碼

  1. 好的單元測試覆蓋率。程式碼的單元測試行與庫程式碼行之比約為1到4。
  2. 該庫在MS Windows,Linux和Mac OS X系統上定期進行測試。事實上,它可以在任何POSIX系統上執行,並且已經在Solaris,HPUX和BSD上使用。
  3. 沒有其他軟體包依賴。只需要通過開箱即用的作業系統提供的底層API。
  4. 在使用庫之前,不需要安裝或配置步驟。有關詳細資訊,請參閱 如何編譯頁面。
  5. 所有作業系統特定的程式碼都被隔離在儘可能小的作業系統抽象層中。庫的其餘部分要麼在OS抽象層之上分層,要麼是純ISO標準C ++。

機器學習演算法

  1. 深度學習Deep Learning
  2. 傳統的基於SMO的支援向量機用於分類(classification) 和 迴歸(regression)
  3. 用於大規模分類 和迴歸的Reduced-rank methods
  4. 用於分類 和迴歸的推薦相關向量機(Relevance vector machine)
  5. 通用多類分類(multiclass classification)工具
  6. 一個多類SVM(Multiclass SVM)
  7. 解決與結構支援向量機(structural support vector machines相關的優化問題的工具 。
  8. 用於序列標記(sequence labeling)的結構SVM工具
  9. 用於解決分配問題(assignment problems)的結構SVM工具
  10. 用於影像中物體檢測(object detection)的結構SVM工具以及用於物體檢測的更強大(但更慢)的深度學習工具(deep learning tools for object detection
  11. 用於標記圖中節點的結構SVM工具(labeling nodes
  12. 一個大規模的SVM-Rank實現
  13. 線上核RLS迴歸(kernel RLS regression演算法
  14. 線上SVM分類(SVM classification演算法
  15. 半確定度量學習(Semidefinite Metric Learning)
  16. 線上核化的質心估計器(centroid estimator /新穎檢測器和離線支援向量一類分類器(one-class classification
  17. 聚類演算法:線性 或核k-means, Chinese Whispers聚類和 Newman聚類
  18. 徑向基函式網路(Radial Basis Function Networks)
  19. 多層感知器(Multi layer perceptrons)

數值計算演算法

  1. 使用表示式模板技術實現的快速矩陣物件,並且在可用時能夠使用BLAS和LAPACK庫。
  2. 為矩陣物件定義了許多線性代數和數學運算,如 奇異值分解, 轉置, 三角函式等。
  3. 使用共軛梯度, BFGS和 L-BFGS 技術的通用非約束非線性優化演算法
  4. Levenberg-Marquardt用於求解非線性最小二乘問題
  5. 通過BOBYQA演算法進行箱約束無導數優化
  6. 的的實現割平面演算法優化(Optimized Cutting Plane Algorithm)
  7. Several quadratic program solvers
  8. 用於求解最優分配和 最小切割/最大流動問題的組合優化工具 以及用於查詢most probable parse tree的CKY演算法
  9. 一個大整數物件
  10. 一個隨機數物件
  11. 圖形模型推理演算法
  12. 加入樹演算法在貝葉斯網路中進行精確推理。
  13. 吉布斯取樣馬爾可夫鏈monte carlo演算法用於貝葉斯網路中的近似推斷。
  14. 鏈式結構, Potts或 一般因子圖中執行MAP推斷的例程 。

影像處理

  1. 用於讀取和 儲存常見影像格式的例程。
  2. 各種畫素型別之間的自動顏色空間轉換
  3. 常見的影像操作,如邊緣檢測和形態學操作
  4. SURF, HOGFHOG 特徵提取演算法。(可惜木有SIFT和ORB)
  5. 用於影像中的物件檢測工具,包括 正面人臉檢測和 物件姿勢估計
  6. 高質量的人臉識別

執行緒

  1. 該庫提供了一個可移植且簡單的執行緒API
  2. 用於執行緒間和程式間通訊的訊息傳遞管道
  3. 一個計時器物件,能夠生成按時間間隔排列的事件
  4. 執行緒物件
  5. 執行緒函式
  6. 迴圈並行
  7. 面向未來的thread_pool

網路通訊

  1. 該庫提供了一個可移植且簡單的TCP套接字API
  2. 幫助您製作基於TCP的伺服器的物件
  3. iostreamstreambuf 物件,使TCP套接字能夠與C ++ iostreams庫互操作
  4. 一個簡單的HTTP伺服器物件,可用於將Web伺服器嵌入到應用程式中
  5. 用於執行緒間和程式間通訊的訊息傳遞管道
  6. 用於使用批量同步並行(BSP)計算模型實現演算法的工具

圖形使用者介面

  1. 該庫提供了一個便攜且簡單的核心GUI API
  2. 在核心GUI API的基礎上實現了許多小部件
  3. 與許多其他GUI工具包不同,整個dlib GUI工具包是執行緒安全的

資料壓縮和完整性檢查演算法

  1. CRC 32物件
  2. MD5功能
  3. 代表資料壓縮 演算法部分的各種抽象物件。包括許多形式的PPM演算法。

測試

  1. 在流行的Java日誌記錄器log4j之後的執行緒安全日誌記錄器物件
  2. 模組化的單元測試框架
  3. 各種斷言巨集對測試前置條件很有用

其他通用功能

  1. 一個型別安全的物件,用於在大小位元組排序之間進行轉換
  2. 一個命令列解析器,能夠使用各種引數和選項分析和驗證命令列
  3. 一個XML解析器
  4. 可以執行base64轉換的物件
  5. 許多容器類
  6. 序列化支援
  7. 許多實現不同記憶體池策略的記憶體管理器物件
  8. 一個工具,可以讓您輕鬆地從MATLAB呼叫C ++

相關文章