OpenCv高階(十九)——dlib關鍵點定位

文章目錄

  • 一、什么是人臉關鍵點定位?
  • 二、關鍵點模型的下載及關鍵信息的理解
  • 三、dlib關鍵點定位的簡單實現
    • (1)導入必要的庫
    • (2)從指定路徑讀取圖像文件
    • (3)創建dlib的正面人臉檢測器對象
    • (4)使用檢測器在圖像上檢測人臉
    • (5)加載dlib預訓練的人臉關鍵點定位模型
    • (6)遍歷檢測到的每個人臉區域
    • (7)顯示處理后的圖像(包含人臉關鍵點標記)
  • 四、人臉關鍵點定位的主要作用和應用
  • 五、主要技術方法
  • 總結


一、什么是人臉關鍵點定位?

人臉關鍵點定位(Facial Landmark Detection),也稱為人臉特征點檢測或人臉對齊,是計算機視覺領域的一項基礎任務。它的核心目標是在一張包含人臉的圖像中,自動地、精確地定位出人臉上一系列預定義的關鍵解剖點的位置坐標(通常是二維像素坐標)。
在這里插入圖片描述

二、關鍵點模型的下載及關鍵信息的理解

關鍵點模型下載:
官網下載:http://dlib.net/files/
在這里插入圖片描述

關鍵點: 這些點是經過精心選擇的,代表了人臉的重要結構和特征。常見的點包括:

眉毛的輪廓點(例如,左右眉峰、眉梢)眼睛的輪廓點(例如,眼角、眼瞼)鼻子的輪廓點(例如,鼻尖、鼻翼)嘴巴的輪廓點(例如,嘴角、唇峰、唇谷)臉部的輪廓點(例如,下巴尖、臉頰邊緣)有時還包括瞳孔中心、臉頰點等。

定位: 算法需要輸出每個關鍵點的精確坐標 (x, y),這些坐標對應于它們在輸入圖像中的像素位置。

預定義模型: 關鍵點的數量和位置通常是預先定義好的標準模型。最常見的模型有:

68點模型: 這是最經典和廣泛使用的模型,包括眉毛(每邊5點)、眼睛(每邊6點)、鼻子(9點)、嘴巴(20點)和臉部輪廓(17點)。5點模型: 更簡單,通常定位兩個眼睛中心、鼻尖和兩個嘴角。常用于快速粗略對齊。106點模型 / 稠密關鍵點模型: 包含更多點(如臉頰、額頭),能更精細地描述人臉形狀,常用于高級特效和3D重建。

三、dlib關鍵點定位的簡單實現

(1)導入必要的庫

import cv2  # OpenCV庫,用于圖像處理和計算機視覺任務
import numpy as np  # NumPy庫,用于數值計算和數組操作
import dlib  # dlib庫,提供強大的機器學習工具,特別擅長人臉檢測和特征點定位

(2)從指定路徑讀取圖像文件

img = cv2.imread('../data/man.png')

(3)創建dlib的正面人臉檢測器對象

# get_frontal_face_detector()使用HOG特征+SVM分類器檢測人臉
detector = dlib.get_frontal_face_detector()

(4)使用檢測器在圖像上檢測人臉

# 參數0表示不進行上采樣(原始圖像大小檢測)
# 返回值faces是一個包含所有檢測到的人臉區域的矩形對象列表
faces = detector(img, 0)

(5)加載dlib預訓練的人臉關鍵點定位模型

# 該模型可以定位人臉上的68個關鍵點(shape_predictor_68_face_landmarks.dat)
predictor = dlib.shape_predictor("../data/shape_predictor_68_face_landmarks.dat")

(6)遍歷檢測到的每個人臉區域

for face in faces:# 使用關鍵點定位模型預測當前人臉的68個關鍵點# shape是一個包含68個關鍵點坐標的對象shape = predictor(img, face)# 將關鍵點轉換為NumPy數組格式,便于處理# 每個關鍵點表示為[x, y]坐標landmarks = np.array([[p.x, p.y] for p in shape.parts()])# 遍歷所有68個關鍵點及其索引for idx, point in enumerate(landmarks):# 獲取當前關鍵點的坐標pos = [point[0], point[1]]# 在圖像上繪制關鍵點(綠色實心圓)# 參數說明:#   img: 目標圖像#   pos: 圓心坐標#   2: 圓的半徑(像素)#   (0,255,0): 顏色(BGR格式,綠色)#   thickness=-1: 實心圓cv2.circle(img, pos, 2, color=(0, 255, 0), thickness=-1)# 在關鍵點旁邊繪制其索引編號(白色文本)# 參數說明:#   img: 目標圖像#   str(idx): 要繪制的文本(當前點的索引)#   pos: 文本左下角位置#   cv2.FONT_HERSHEY_SIMPLEX: 字體類型#   0.45: 字體縮放比例#   (255,255,255): 文本顏色(白色)#   1: 文本線寬#   cv2.LINE_AA: 抗鋸齒線型cv2.putText(img, str(idx), pos, cv2.FONT_HERSHEY_SIMPLEX, 0.45, (255, 255, 255), 1, cv2.LINE_AA)

(7)顯示處理后的圖像(包含人臉關鍵點標記)

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

效果展示
在這里插入圖片描述
同樣此處依然可以引入攝像頭,實時對人臉進行關鍵點定位。

四、人臉關鍵點定位的主要作用和應用

人臉對齊: 這是最基礎也是最重要的應用。通過定位關鍵點,可以將不同姿態、尺度、位置的人臉圖像“矯正”到一個標準姿態(通常是正面朝前),極大地提高后續人臉識別、表情識別等任務的準確性和魯棒性。

人臉識別/驗證: 對齊后的人臉特征更容易進行比較和匹配。

表情識別: 關鍵點位置的變化(如嘴角上揚、眉毛皺起)是分析面部表情的關鍵線索。

人臉姿態估計: 根據關鍵點的分布和相對位置,可以估計人臉在三維空間中的朝向(偏航角、俯仰角、翻滾角)。

人臉美化/美顏: 瘦臉、大眼、美妝等濾鏡效果需要精確知道眼睛、嘴巴、臉型的位置才能精準施加效果。

虛擬化妝/試妝: 在嘴唇、眼瞼等部位疊加虛擬妝容需要精確定位。

增強現實: 在臉上疊加虛擬面具、眼鏡、貼紙或特效(如動物鼻子、胡子)需要關鍵點作為錨點。

人機交互: 通過跟蹤關鍵點的運動(如眨眼、張嘴)實現非接觸式控制。

3D人臉重建: 稠密的關鍵點是構建高精度3D人臉模型的重要輸入。

醫學分析: 輔助分析某些面部特征或表情(如某些疾病的早期面部表征)。

疲勞駕駛檢測: 通過檢測眼睛開合程度、打哈欠(嘴部動作)等關鍵點狀態判斷駕駛員狀態。

動畫與游戲: 驅動虛擬角色的面部表情。

五、主要技術方法

傳統方法:

主動形狀模型: 通過迭代調整一個初始的平均人臉形狀模型來擬合圖像特征。主動外觀模型: 在ASM基礎上,不僅考慮形狀,還考慮紋理(外觀)信息。約束局部模型: 為每個關鍵點訓練獨立的局部檢測器,并利用形狀約束來優化整體結果。

深度學習方法 (主流):

使用卷積神經網絡直接學習從輸入圖像到關鍵點坐標的映射,通常視為一個回歸問題。常見網絡架構:各種定制的CNN、Hourglass網絡、HRNet等。通常輸出一個包含所有關鍵點坐標的向量,或者一個關鍵點位置的熱力圖。訓練需要大量標注好關鍵點位置的人臉圖像數據集。

總結

人臉關鍵點定位是讓計算機“看懂”人臉結構的基礎技術。它通過精確定位一系列預定義的面部特征點,為眾多上層應用(人臉識別、表情分析、美顏濾鏡、AR特效等)提供了至關重要的幾何結構信息。雖然深度學習方法極大地提升了定位的精度和魯棒性,但在處理極端姿態、嚴重遮擋和復雜光照等場景時仍存在挑戰,是計算機視覺領域持續研究的重要方向。

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

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

相關文章

人工智能100問?第36問:什么是BERT?

目錄 一、通俗解釋 二、專業解析 三、權威參考 BERT是基于Transformer Encoder的雙向語言預訓練模型,具備強大的語義理解能力,是現代自然語言處理的重要基石。它是一套讓機器像人一樣“前后一起看”的語言理解技術,它讓AI不光“讀得快”,還“讀得懂”。現在很多搜索引擎…

Chrome/ Edge 瀏覽器彈出窗口隱藏菜單地址欄

Chrome 利用快捷方式,打開一個無地址欄的瀏覽器窗口,以百度為例 創建瀏覽器快捷方式,在目標欄里 添加 -apphttps://www.baidu.com 點擊【應用】,【確定】按鈕保存生效。后面通過空上快捷方式打開的瀏覽器沒有地址欄。 Edge瀏覽…

計算機網絡常見體系結構、分層必要性、分層設計思想以及專用術語介紹

計算機網絡體系結構 從本此開始,我們就要開始介紹有關計算機網絡體系結構的知識了。內容包括: 常見的計算機網絡體系結構 計算機網絡體系結構分層的必要性 計算機網絡體系結構的設計思想 舉例說明及專用術語 計算機網絡體系結構是計算機網絡課程中…

【C++】“多態”特性

文章目錄 一、多態的概念二、多態的定義實現1. 多態的構成條件1.1 虛函數1.2 虛函數的重寫 2. 多態的調用3. 虛函數重寫的其他問題3.1 協變3.2 析構函數的重寫 三、override和final關鍵字四、重載/重寫/隱藏的對比五、純虛函數和抽象類六、多態的原理 C的三大主要特性&#xff…

2025.5.27學習日記 linux三劍客 sed與正則表達式

sed是Stream Editor(字符流編輯器)的縮寫,簡稱流編輯器。 sed是操作、過濾和轉換文本內容的強大工具。 常用功能包括結合正則表達式對文件實現快速增刪改查 , 其中查詢的功能中最常用的兩大功能是過 濾 ( 過濾指定字符串)、取行(取出指定行)。 注意sed和awk使用單引號,雙引號…

文科小白學習Linux系統之安全管理

目錄 前言 一、SELinux安全上下文 1、SELinux 簡介 2、基礎操作命令 1. 查看SELinux狀態 2. 切換工作模式 3、安全上下文(Security Context) 1. 查看上下文 2. 修改上下文 chcon命令 semanage 命令 4、SELinux布爾值(Booleans&am…

企業內訓系統源碼開發詳解:直播+錄播+考試的混合式學習平臺搭建

在企業數字化轉型的大潮中,員工培訓早已不再是傳統教室中的一場場“走過場”,而是通過技術驅動的“系統化能力提升”。尤其在知識更新換代加速、競爭壓力日益激烈的背景下,企業越來越傾向于建設自主可控、功能靈活、支持多種學習形態的內訓平…

智能化報銷與精細化管理:購物小票識別系統全面提升企業運營效率

在現代企業管理中,購物小票的處理一直是財務和運營管理中的一項挑戰。尤其在企業費用報銷、會員管理、庫存監控等環節,手動整理與核對小票不僅耗時費力,還容易產生錯誤。隨著人工智能技術的發展,企業亟需一種高效、智能的解決方案…

毫秒級數據采集的極致優化:如何用C#實現高性能、無冗余的實時文件寫入?

在工業控制、通信系統或高頻交易領域,毫秒級數據采集的精度直接決定系統性能。但一個棘手問題常被忽視:如何處理同一毫秒內的重復數據? 若簡單寫入所有數據,會導致文件臃腫、分析效率驟降;若處理不當,又可能…

NLua性能對比:C#注冊函數 vs 純Lua實現

引言 在NLua開發中,我們常面臨一個重要選擇:將C#函數注冊到Lua環境調用,還是直接在Lua中實現邏輯? 直覺告訴我們,C#作為編譯型語言性能更高,但跨語言調用的開銷是否會影響整體性能?本文通過基準…

go并發與鎖之sync.Mutex入門

sync.Mutex 原理:一個共享的變量,哪個線程握到了,哪個線程可以執行代碼 功能:一個性能不錯的悲觀鎖,使用方式和Java的ReentrantLock很像,就是手動Lock,手動UnLock。 使用例子: v…

【HarmonyOS5】DevEco Studio 使用指南:代碼閱讀與編輯功能詳解

?本期內容:【HarmonyOS5】DevEco Studio 使用指南:代碼閱讀與編輯功能詳解 🏆系列專欄:鴻蒙HarmonyOS:探索未來智能生態新紀元 文章目錄 前言代碼閱讀代碼導航功能代碼折疊語法高亮跨語言跳轉代碼查找 快速查閱API接口…

【Python 深度學習】1D~3D iou計算

一維iou 二維 import numpy as npdef iou_1d(set_a, set_b):# 獲得集合A和B的邊界 x1, x2 set_ay1, y2 set_b# 計算交集的上下界low max(x1,y1)high - min(x2, y2)# 計算交集if high - low < 0:inter 0else:inter high - low# 計算并集union (x2 -x1) (y2 - y1) - in…

SpringBoot Controller接收參數方式, @RequestMapping

一. 通過原始的HttpServletRequest對象獲取請求參數 二. 通過Spring提供的RequestParam注解&#xff0c;將請求參數綁定給方法參數 三. 如果請求參數名與形參變量名相同&#xff0c;直接定義方法形參即可接收。(省略RequestParam) 四. JSON格式的請求參數(POST、PUT) 主要在PO…

智能防護實戰:從攻擊成本看企業安全降本增效

1. 網絡攻擊的低成本與高回報陷阱 暗網中&#xff0c;一次完整的網絡釣魚攻擊僅需30美元/月起步&#xff0c;而勒索軟件攻擊成本平均1000美元&#xff0c;卻能導致企業損失高達445萬美元&#xff08;IBM 2023年數據&#xff09;。例如&#xff0c;信用卡信息每條僅售10美元&am…

大語言模型 20 - MCP 在客戶端中使用 Cursor Cline 中配置 MCP 服務

MCP 基本介紹 官方地址&#xff1a; https://modelcontextprotocol.io/introduction “MCP 是一種開放協議&#xff0c;旨在標準化應用程序向大型語言模型&#xff08;LLM&#xff09;提供上下文的方式。可以把 MCP 想象成 AI 應用程序的 USB-C 接口。就像 USB-C 提供了一種…

MySQL 在 CentOS 7 環境下的安裝教程

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 種一棵樹最好是十年前&#xff0c;其次是現在&#xff01; &#x1f680; 今天來學習Mysql的相關知識。 &#x1f44d; 如果覺得這篇文章有幫助&#xff0c;歡迎您一鍵三連&#xff0c;分享給更…

WPF的基礎設施:XAML基礎語法

XAML基礎語法 1 控件聲明與屬性設置1.1 特性語法&#xff08;Attribute Syntax&#xff09;1.2 屬性元素語法&#xff08;Property Element Syntax&#xff09;1.3 特殊值標記擴展 2 x:Name與Name的區別3 注釋與代碼折疊4 實用技巧集合5 常見錯誤排查 XAML( Extensible Applic…

機器學習筆記【Week3】

一、邏輯回歸&#xff08;Logistic Regression&#xff09; 與線性回歸的區別&#xff1a; 問題類型輸出類型舉例回歸問題連續實數房價預測、氣溫預測分類問題離散類別&#xff08;0 或 1&#xff09;是否患病、是否點擊廣告、是否合格 我們希望構建一個模型&#xff0c;根據…

6.4.2_3最短路徑問題_Floyd算法

Floyd弗洛伊德 膜拜大佬&#xff0c;給大佬鞠躬鞠躬鞠躬。。。。。。。。。 Floyd算法 ----解決頂點間的最短路徑&#xff1a; 過程&#xff1a; 如下&#xff1a; 初始化(沒有中轉點)&#xff1a;2個鄰接矩陣A和path&#xff0c;第一個是沒有中轉點的2個頂點之間的最短路徑…