OpenCv高階(十七)——dlib庫安裝、dlib人臉檢測

文章目錄

  • 前言
  • 一、dlib庫簡介
  • 二、dlib庫安裝
    • 1、本地安裝(離線)
    • 2、線上安裝
  • 三、dlib人臉檢測原理
    • 1、HOG 特征提取
    • 2、 SVM 分類器訓練
    • 3、 滑動窗口搜索
    • 4、非極大值抑制(NMS)
  • 四、dlib人臉檢測代碼
    • 1、導入OpenCV計算機視覺庫和dlib機器學習庫
    • 2、初始化dlib的預訓練人臉檢測器(基于HOG特征+線性分類器)
    • 3、使用OpenCV讀取圖像文件
    • 4、遍歷每個檢測到的人臉區域
    • 5、創建窗口并顯示處理后的圖像
  • 總結


前言

人臉檢測是計算機視覺領域的核心基礎任務之一,廣泛應用于安防監控、人機交互、智能攝影等領域。本文基于經典的 dlib 庫和 OpenCV 工具,實現了一個簡單但高效的人臉檢測系統。

一、dlib庫簡介

Dlib 是一個由 C++ 編寫的高性能開源機器學習庫,同時支持 Python 接口。它廣泛應用于圖像處理、人臉檢測、人臉識別、目標跟蹤、特征提取等任務,尤其以 人臉關鍵點檢測(如 68 點特征)和 高效的機器學習算法 著稱。

主要功能:

	圖像處理:人臉檢測(HOG、CNN 方法)、關鍵點檢測、圖像分割等。機器學習:支持分類、回歸、聚類、支持向量機(SVM)、深度學習等。工具類:矩陣運算、數據預處理、多線程加速等。

特點:

	高效性:高度優化的 C++ 代碼,適合實時應用。跨平臺:支持 Windows、Linux、macOS。文檔豐富:提供詳細的 API 文檔和示例代碼。開源協議:基于 BSD 協議,允許商業用途。

二、dlib庫安裝

1、本地安裝(離線)

dlib庫的wheel文件,直接安裝的話會缺少一些依賴庫,所以下載到本地安裝,安裝時要注意cmd環境變量對應的版本要和下載的dlib庫的版本一致否則不能成功安裝
選擇正確的 Wheel 版本:
下載鏈接: https://github.com/z-mahmud22/Dlib_Windows_Python3.x
資源來源于GitHub所以下載時如果加載不出來,可以考慮是用加速器,訪問 PyPI Dlib 頁面,找到與你的 Python 版本和系統架構匹配的 .whl 文件。

例如:Python 3.10 64位系統 → dlib-19.24.1-cp310-cp310-win_amd64.whlPython 3.9 64位系統 → dlib-19.24.1-cp39-cp39-win_amd64.whl

下載 Wheel 文件:

直接點擊文件名下載,或使用 pip download dlib 命令。
步驟3:安裝 Wheel 文件

#打開命令提示符(CMD)或 PowerShell,進入 Wheel 文件所在目錄
pip install dlib-19.24.1-cp39-cp39-win_amd64.whl

在這里插入圖片描述

2、線上安裝

使用 pip 編譯安裝

# 打開命令提示符(CMD)或 PowerShell
pip install dlib

該命令會自動下載源碼并編譯,但耗時較長(約 10-30 分鐘)。

常見問題解決:
1、安裝超時或網絡問題,可以通過添加國內的鏡像源來實現更快的安裝。
2、Wheel 版本不匹配
3、報錯:CMake 未找到或者缺少 C++ 編譯器。

三、dlib人臉檢測原理

1、HOG 特征提取

HOG 是一種用于描述圖像局部紋理特征的方法,通過計算圖像中不同區域的梯度方向直方圖來表征目標(如人臉)的形狀和邊緣信息。具體步驟包括:

分塊與歸一化:將圖像劃分為多個小單元(cell),每個單元內統計梯度方向直方圖。塊內梯度統計:對每個單元內的像素梯度方向進行直方圖統計(通常分為 9 個方向區間),并歸一化以增強光照不變性65。特征向量生成:將多個單元的直方圖串聯成高維特征向量,用于分類器訓練。

2、 SVM 分類器訓練

使用大量標記的人臉和非人臉樣本訓練 SVM 分類器,學習區分人臉和非人臉區域的決策邊界。

SVM 通過尋找最大間隔超平面,確保分類結果魯棒性高。

3、 滑動窗口搜索

在輸入圖像上以不同尺度和位置滑動固定大小的窗口,對每個窗口提取 HOG 特征,并通過 SVM 分類器判斷是否包含人臉。

多尺度搜索確保不同大小的人臉均能被檢測到。

4、非極大值抑制(NMS)

滑動窗口會產生大量重疊的候選框,NMS 通過合并重疊區域并保留置信度最高的框,消除冗余檢測結果。

算法流程:輸入圖像預處理:轉為灰度圖像以減少計算量。多尺度滑動窗口:遍歷圖像生成候選區域。HOG 特征提取:對每個候選窗口提取特征。SVM 分類:判斷候選窗口是否為人臉。后處理:應用非極大值抑制輸出最終檢測結果。

dlib 的默認人臉檢測算法基于 HOG 特征和 SVM 分類器,通過滑動窗口和非極大值抑制實現高效檢測。對于需要更高精度的場景,可切換至基于 CNN 的模型。其設計兼顧速度與準確性,廣泛應用于計算機視覺任務中。

四、dlib人臉檢測代碼

1、導入OpenCV計算機視覺庫和dlib機器學習庫

import cv2
import dlib

2、初始化dlib的預訓練人臉檢測器(基于HOG特征+線性分類器)

# 該檢測器適用于正面人臉的檢測
detector = dlib.get_frontal_face_detector()

3、使用OpenCV讀取圖像文件

# 注意:路徑"../data/pd.png"表示上級目錄的data文件夾中的pd.png文件
img = cv2.imread("../data/pd.png")# 執行人臉檢測,第二個參數4表示對圖像進行4次上采樣
# 上采樣可以幫助檢測更小的人臉,但會增加計算量
# 返回值faces是一個包含所有檢測到的人臉矩形區域的列表
faces = detector(img, 4)

4、遍歷每個檢測到的人臉區域

for face in faces:# 從矩形區域對象中提取邊界坐標x1 = face.left()  # 人臉框左側x坐標y1 = face.top()   # 人臉框頂部y坐標x2 = face.right() # 人臉框右側x坐標y2 = face.bottom() # 人臉框底部y坐標# 在原始圖像上繪制綠色矩形框# 參數說明:(圖像,左上角坐標,右下角坐標,顏色(BGR格式),線寬)cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)

5、創建窗口并顯示處理后的圖像

cv2.imshow('img', img)
# 等待鍵盤輸入,0表示無限等待
cv2.waitKey(0)
# 關閉所有OpenCV創建的窗口
cv2.destroyAllWindows()

效果
在這里插入圖片描述


總結

本文通過 dlib 庫與 OpenCV 的協同使用,完整實現了一個基于 HOG 特征與線性分類器的人臉檢測系統。代碼核心通過以下步驟完成:

利用 dlib.get_frontal_face_detector() 加載預訓練模型,快速定位圖像中的正面人臉;通過圖像上采樣增強對小尺度人臉的檢測能力;使用矩形框標注檢測結果,直觀展示算法性能。

該實現體現了傳統機器學習方法在輕量化場景下的優勢:模型計算效率高、資源占用少,適用于實時性要求較高的場景。然而,其局限性在于對非正面人臉或復雜背景的魯棒性不足,未來可通過以下方向改進:結合深度學習模型(如 MTCNN、YOLO)提升檢測精度;引入多尺度滑動窗口機制增強對小目標的捕捉能力;添加人臉關鍵點檢測等擴展功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82478.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AD-PCB--AD20軟件安裝及中英文切換 DAY 2

1.軟件安裝 1.1 軟件包下載 給你一個捷徑: 1.2 安裝過程(安裝過的人跳過就好,一般很多都支持懶人安裝) 雙擊其中的exe文件 點擊下一步 選擇中文 接受用戶協議 下面這個彈窗有的沒有。 建議勾選導入導出 安裝目錄&#xff0c…

單向循環鏈表與雙向鏈表

單向循環鏈表的原理與應用 思考:對于單向鏈表而言,想要遍歷鏈表,則必須從鏈表的首結點開始進行遍歷,請問有沒有更簡單的方案實現鏈表中的數據的增刪改查? 回答:是有的,可以使用單向循環的鏈表進…

Windows鼠標掉幀測試與修復

前言 這兩天突然發現鼠標似乎有掉幀,但是掉的又不太明顯,用著感覺似乎快速移動的時候會有一瞬間卡一下,但是眼睛又看不清楚,不太確定是不是自己的心理作用,非常難受。 如何判斷鼠標是否掉幀 根據我的經驗&#xff0…

U 盤數據恢復全攻略

目錄 💾 U盤數據誤刪怎么辦?兩款實用工具助你找回丟失文件!1?? Recover My Files:數據恢復的得力助手📌 主要特點🛠 使用步驟詳解1. 下載與安裝2. 啟動軟件并選擇恢復類型3. 選擇U盤所在分區4. 選擇文件恢…

HarmonyOS NEXT~鴻蒙系統運維:全面解析與最佳實踐

HarmonyOS NEXT~鴻蒙系統運維:全面解析與最佳實踐 摘要 本文深入探討鴻蒙(HarmonyOS)系統的運維管理,從架構特點到日常維護操作,全面分析這一全場景分布式操作系統的運維要點。文章將介紹鴻蒙系統特有的分布式能力運維管理、性能…

基于 STM32 的智慧農業溫室控制系統設計與實現

摘要 本文提出一種基于 STM32 微控制器的智慧農業溫室控制系統設計方案,通過集成多類型環境傳感器、執行機構及無線通信模塊,實現對溫室內溫濕度、光照、土壤濕度等參數的實時監測與自動調控。文中詳細闡述硬件選型、電路連接及軟件實現流程,并附關鍵代碼示例,為智慧農業領…

Appium+python自動化(五)- 模擬器

簡介 Appium是做安卓自動化的一個比較流行的工具,對于想要學習該工具但是又局限于沒 android 手機來說,可以通過安卓模擬器來解決該問題,下面就講解使用appium連接安卓模擬器的操作步驟。而是由于手機數據線問題,也只好先用模擬器…

汽車充電樁專用ASCP210系列電氣防火限流式保護器

1.概述汽車充電樁專用電氣防火限流式保護器 電氣防火限流式保護器可有效克服傳統斷路器、空氣開關和監控設備存在的短路電流大、切斷短路電流時間長、短路時產生的電弧火花大,以及使用壽命短等弊端,發生短路故障時,能以微秒級速度快速限制短…

Linux中磁盤分區與掛載

一、磁盤劃分 1.1 了解磁盤 硬盤的接口類型 接口類型發展方向應用場景IDESATA I/II/III個人PC機SCSISAS服務器上 磁盤命名規則 OSIDE(并口)SATA(串口)SCSIRHEL5/dev/hda/dev/sda/dev/sdaRHEL6/dev/sda/dev/sda/dev/sdaRHEL7/dev/sda/dev/sda/dev/sda 1.2 磁盤劃分 磁盤劃…

【數據分析】什么是特征蒸餾?

引言 —— “ 在數據洪流中提煉真金——解密特征蒸餾的藝術。” 在數據爆炸的時代,我們每天產生的信息量已遠超人類處理能力的極限。當企業擁有百萬維的用戶行為數據,醫療研究者面對TB級的基因測序記錄,工程師試圖從千萬張圖像中識別關鍵模式…

機器學習筆記【Week4】

一、 為什么要用神經網絡? 邏輯回歸只能處理線性可分問題。例如,經典的 XOR 異或問題無法用單層邏輯回歸準確分類。神經網絡通過多層結構和非線性激活函數,能學習復雜的決策邊界,解決非線性問題。 二、神經網絡的基本組成 神經網…

java交易所,多語言,外匯,黃金,區塊鏈,dapp類型的,支持授權,劃轉,挖礦(源碼下載)

目前這套主要是運營交易所類型的,授權的會貴點,編譯后的是可以直接跑的,圖片也修復了,后門也掃了 都是在跑的項目支持測,全開源 源碼下載:https://download.csdn.net/download/m0_66047725/90887047 更多…

2025CCPC河北省賽題解

題目區分度不錯&#xff0c;不過兩題手快銅確實沒想到。 Attention is all you need&#xff01; H - What is all you need? 簽到題 #include <bits/stdc.h> #define x first #define y second #define int long long #define double long doubleusing namespace st…

【IOS】【OC】【應用內打印功能的實現】如何在APP內實現打印功能,連接本地打印機,把想要打印的界面打印成圖片

【IOS】【OC】【應用內打印功能的實現】如何在APP內實現打印功能&#xff0c;連接本地打印機&#xff0c;打印想打印的界面 設備/引擎&#xff1a;Mac&#xff08;14.1.1&#xff09;/cocos 開發工具&#xff1a;Xcode 開發語言&#xff1a;OC/C 開發需求&#xff1a;工程中…

AWS WebRTC:獲取信令服務節點和ICE服務節點

建立WebRTC的第一步是獲取信令服務節點和ICE服務節點。 前提條件是有訪問AWS的密鑰&#xff0c;主要是ak&#xff0c;sk&#xff0c;token&#xff0c;我這邊是業務云有接口可以返回這些信息&#xff0c;所以我直接從業務云獲取。 先介紹一下什么是ak&#xff0c;sk&#xff…

C++23 新成員函數與字符串類型的改動

文章目錄 引言std::basic_string::contains 與 std::basic_string_view::contains (P1679R3)功能介紹示例代碼優勢 禁止從 nullptr 構造 std::basic_string 和 std::basic_string_view (P2166R1)背景改動影響 std::basic_string_view 的顯式范圍構造函數 (P1989R2)功能介紹示例…

VMware-MySQL主從

MySQL主從 服務器信息 服務器類型角色主機地址主機名稱虛擬機master192.168.40.128test-1虛擬機slave192.168.40.129test-2 Master 配置&#xff08;192.168.40.128&#xff09; 刪除自動生成的配置 /var/lib/mysql/auto.cnf [roottest-1 ~]# rm -rf /var/lib/mysql/auto.…

Java組合、聚合與關聯:核心區別解析

在Java中&#xff0c;組合、聚合和關聯是描述類之間關系的三種不同方式&#xff0c;它們的核心區別在于對象間的依賴強度和生命周期管理。以下是它們的詳細對比&#xff1a; 1. 關聯&#xff08;Association&#xff09; 定義&#xff1a;最基本的類間關系&#xff0c;表示一個…

如何保護網絡免受零日漏洞攻擊?

零日漏洞&#xff08;Zero-Day Vulnerability&#xff09;是指軟件或系統中尚未被廠商發現或修補的安全漏洞。這個名稱中的“零日”意味著&#xff0c;從漏洞被發現到廠商發布修復補丁的時間是零天&#xff0c;也就是說&#xff0c;黑客可以利用這個漏洞進行攻擊&#xff0c;而…

linux快速入門-VMware安裝linux,配置靜態ip,使用服務器連接工具連接,快照和克隆以及修改相關配置信息

安裝VMWare 省略&#xff0c;自己檢索 安裝操作系統-linux 注意&#xff1a;需要修改的我會給出標題&#xff0c;不要修改的直接點擊下一步就可以 選擇自定義配置 選擇稍后安裝操作系統 選擇合適的內存 選擇NAT模式 僅主機模式 虛擬機只能和主機通信&#xff0c;不能上網…