基于OpenCV的人臉識別:LBPH算法

文章目錄

    • 引言
    • 一、概述
    • 二、代碼實現
      • 1. 代碼整體結構
      • 2. 導入庫解析
      • 3. 訓練數據準備
      • 4. 標簽系統
      • 5. 待識別圖像加載
      • 6. LBPH識別器創建
      • 7. 模型訓練
      • 8. 預測執行
      • 9. 結果輸出
    • 三、 LBPH算法原理解析
    • 四、關鍵點解析
    • 五、改進方向
    • 總結

引言

人臉識別是計算機視覺領域的一個重要應用,今天我將分享一個使用Python和OpenCV實現的簡單人臉識別系統。這個系統能夠識別特定人物的照片,并給出識別結果的置信度。

一、概述

這個系統使用了OpenCV的LBPH(Local Binary Patterns Histograms)人臉識別算法,通過訓練已知的人臉圖像,然后對新的圖像進行預測識別。

二、代碼實現

import cv2
import numpy as np# 加載訓練用的人臉照片
images = []
images.append(cv2.imread('linyuner 1.jpg', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('linyuner 2.jpg', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('chendulin 1.jpg', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('chendulin 2.jpg', cv2.IMREAD_GRAYSCALE))# 對應標簽(0代表林允兒,1代表陳都靈)
labels = [0, 0, 1, 1]# 標簽字典,用于將數字標簽轉換為可讀名稱
dic = {0: '林允兒', 1: '陳都靈', -1: '無法識別'}# 加載待識別的人臉圖像
predict_image = cv2.imread('chendulin 3.jpg', cv2.IMREAD_GRAYSCALE)# 創建LBPH人臉識別器,設置閾值為80
recognizer = cv2.face.LBPHFaceRecognizer_create(threshold=80)# 訓練識別器
recognizer.train(images, np.array(labels))# 進行預測
label, confidence = recognizer.predict(predict_image)# 輸出結果
print('這人是:', dic[label])
print('置信度', confidence)

1. 代碼整體結構

這段代碼實現了一個簡單但完整的人臉識別系統,主要流程包括:

  1. 加載訓練圖像
  2. 準備對應標簽
  3. 創建識別器
  4. 訓練模型
  5. 預測新圖像
  6. 輸出結果

2. 導入庫解析

import cv2
import numpy as np
  • cv2:OpenCV庫,提供計算機視覺相關功能,這里主要使用其人臉識別模塊
  • numpy:Python科學計算基礎庫,用于處理數組和矩陣運算

3. 訓練數據準備

images = []
images.append(cv2.imread('linyuner 1.jpg', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('linyuner 2.jpg', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('chendulin 1.jpg', cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread('chendulin 2.jpg', cv2.IMREAD_GRAYSCALE))
  • cv2.imread():讀取圖像文件
    • 第一個參數:圖像路徑
    • 第二個參數cv2.IMREAD_GRAYSCALE:以灰度模式讀取圖像,因為人臉識別通常不需要顏色信息
  • 將讀取的圖像存儲在images列表中

4. 標簽系統

labels = [0, 0, 1, 1]
dic = {0: '林允兒', 1: '陳都靈', -1: '無法識別'}
  • labels:與訓練圖像對應的數字標簽
    • 0代表"林允兒"
    • 1代表"陳都靈"
  • dic:字典,將數字標簽映射為可讀的名稱
    • -1表示無法識別的情況

5. 待識別圖像加載

predict_image = cv2.imread('chendulin 3.jpg', cv2.IMREAD_GRAYSCALE)
  • 同樣以灰度模式加載待識別的圖像
  • 放入一張陳都靈的照片進行檢驗,后面代碼會顯示預測結果
    在這里插入圖片描述

6. LBPH識別器創建

recognizer = cv2.face.LBPHFaceRecognizer_create(threshold=80)
  • LBPH(Local Binary Patterns Histograms):局部二值模式直方圖
    • 一種高效的人臉識別算法
    • 對光照變化有一定魯棒性
  • threshold=80:設置識別閾值
    • 當預測的置信度距離大于此值時,返回-1(無法識別)
    • 這個值需要根據實際情況調整

7. 模型訓練

recognizer.train(images, np.array(labels))
  • 使用訓練圖像和對應標簽訓練模型
  • 將Python列表轉換為numpy數組,這是OpenCV函數常見的輸入要求

8. 預測執行

label, confidence = recognizer.predict(predict_image)
  • predict():對新的圖像進行預測
  • 返回兩個值:
    • label:預測的標簽(對應之前的0或1)
    • confidence:置信度(距離值),越小表示匹配度越高

9. 結果輸出

print('這人是:', dic[label])
print('置信度', confidence)
  • 使用字典將數字標簽轉換為可讀名稱
  • 輸出識別結果和置信度
  • 結果輸出如下:

在這里插入圖片描述

三、 LBPH算法原理解析

LBPH工作的三個主要步驟:

  1. 局部二值模式(LBP)特征提取

    • 對每個像素與其鄰域像素比較
    • 生成二進制模式
  2. 直方圖構建

    • 將圖像分成多個小區域
    • 為每個區域構建LBP直方圖
  3. 比較直方圖

    • 比較輸入圖像與訓練圖像的直方圖
    • 使用卡方距離等度量方法

四、關鍵點解析

  1. 圖像加載:所有圖像都以灰度模式加載(cv2.IMREAD_GRAYSCALE),因為人臉識別通常不需要顏色信息。

  2. 標簽系統:使用數字標簽(0,1)對應不同人物,并通過字典轉換為可讀名稱。

  3. LBPH算法:Local Binary Patterns Histograms是一種高效的人臉識別算法,對光照變化有一定的魯棒性。

  4. 閾值設置:閾值設為80,當預測的置信度高于此值時,返回-1(無法識別)。

  5. 訓練與預測:先使用已知圖像訓練模型,然后對新的圖像進行預測。

五、改進方向

  1. 增加更多的人臉樣本以提高準確性
  2. 實現實時攝像頭人臉識別
  3. 添加人臉檢測功能,自動裁剪人臉區域
  4. 使用更先進的深度學習模型

總結

通過這個簡單的示例,我們了解了如何使用OpenCV實現基礎的人臉識別功能。雖然這個系統比較簡單,但它展示了人臉識別的基本原理和工作流程。隨著樣本數量的增加和算法的優化,系統的識別準確率可以進一步提高。

希望這篇博客對你理解人臉識別技術有所幫助!如果你有任何問題或建議,歡迎在評論區留言。

萬事勝意,得償所愿!加油各位!!!🚀🚀🚀

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

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

相關文章

ElasticSearch重啟之后shard未分配問題的解決

以下是Elasticsearch重啟后分片未分配問題的完整解決方案,結合典型故障場景與最新實踐: 一、快速診斷定位 ?檢查集群狀態 GET /_cluster/health?pretty # status為red/yellow時需關注unassigned_shards字段值 ? 2.查看未分配分片詳情 …

CSS- 3.1 盒子模型-塊級元素、行內元素、行內塊級元素和display屬性

本系列可作為前端學習系列的筆記,代碼的運行環境是在HBuilder中,小編會將代碼復制下來,大家復制下來就可以練習了,方便大家學習。 HTML系列文章 已經收錄在前端專欄,有需要的寶寶們可以點擊前端專欄查看! 點…

Git/GitLab日常使用的命令指南來了!

在 GitLab 中拉取并合并代碼的常見流程是通過 Git 命令來完成的。以下是一個標準的 Git 工作流,適用于從遠程倉庫(如 GitLab)拉取代碼、切換分支、合并更新等操作。 🌐 一、基礎命令:拉取最新代碼 # 拉取遠程倉庫的所…

HTML 表格與div深度解析區別及常見誤區

一、HTML<div>元素詳解 <div>是HTML中最基本的塊級容器元素&#xff0c;本身沒有語義&#xff0c;主要用于組織和布局頁面內容。以下是其核心用法&#xff1a; 1. 基礎結構與特性 <div><!-內部可包含任意HTML元素 --><h2>標題</h2><p…

mybatisPlus 新增時 其他字段的值和 id 保持一致實現方法

MyBatis-Plus 實現 sp_id_path 與 id 同步的方案 要實現新增時 sp_id_path 自動與 id 保持一致&#xff0c;需要在實體類和插入邏輯中做相應處理。MyBatis-Plus 提供了幾種方式來實現這一需求&#xff1a; 方案一&#xff1a;使用 MyBatis-Plus 的自動填充功能 這是最優雅的…

蘭亭妙微設計:為生命科技賦予人性化的交互語言

在醫療科技日新月異的今天&#xff0c;卓越的硬件性能唯有匹配恰如其分的交互語言&#xff0c;方能真正發揮價值。作為專注于醫療UI/UX設計的專業團隊&#xff0c;蘭亭妙微設計&#xff08;www.lanlanwork.com&#xff09;始終相信&#xff1a;每一處像素的排布&#xff0c;都應…

Tcping詳細使用教程

Tcping詳細使用教程 下載地址 https://download.elifulkerson.com/files/tcping/0.39/在windows環境下安裝tcping 在以上的下載地中找到exe可執行文件&#xff0c;其中tcping.exe適用于32位Windows系統&#xff0c;tcping64.exe適用于64位Windows操作系統。 其實tcping是個…

springCloud/Alibaba常用中間件之Seata分布式事務

文章目錄 SpringCloud Alibaba:依賴版本補充Seata處理分布式事務(AT模式)AT模式介紹核心組件介紹AT的工作流程&#xff1a;兩階段提交&#xff08;**2PC**&#xff09; Seata-AT模式使用Seata(2.0.0)下載、配置和啟動Seata案例實戰前置代碼添加全局注解 GlobalTransactional Sp…

COMSOL隨機參數化表面流體流動模擬

基于粗糙度表面的裂隙流研究對于理解地下水的流動、污染物傳輸以及與之相關的地質災害&#xff08;如滑坡&#xff09;等方面具有重要意義。本研究通過蒙特卡洛方法生成隨機表面形貌&#xff0c;并利用COMSOL Multiphysics對隨機參數化表面的微尺度流體流動進行模擬。 參數化…

初識——QT

QT安裝方法 一、項目創建流程 創建項目 入口&#xff1a;通過Qt Creator的歡迎頁面或菜單欄&#xff08;文件→新建項目&#xff09;創建新項目。 項目類型&#xff1a;選擇「Qt Widgets Application」。 路徑要求&#xff1a;項目路徑需為純英文且不含特殊字符。 構建系統…

7-15 計算圓周率

π?131?352!?3573!??357?(2n1)n!?? 輸入格式&#xff1a; 輸入在一行中給出小于1的閾值。 輸出格式&#xff1a; 在一行中輸出滿足閾值條件的近似圓周率&#xff0c;輸出到小數點后6位。 輸入樣例&#xff1a; 0.01輸出樣例&#xff1a; 3.132157 我的代碼 #i…

【圖片識別工具】批量單據識別批量重命名,批量OCR識別圖片文字并重命名,批量改名工具的使用步驟和注意事項

一、適用場景 ??財務與發票管理??&#xff1a;企業需處理大量電子發票或掃描件&#xff0c;通過OCR識別發票代碼、金額等關鍵信息&#xff0c;自動重命名為發票號_金額.pdf格式&#xff0c;便于歸檔與稅務審計。 ??物流單據處理??&#xff1a;物流公司需從運單中提取單…

Modbus TCP轉Profinet網關:數字化工廠異構網絡融合的核心樞紐

在現代工業生產中&#xff0c;隨著智能制造和工業互聯網的不斷發展&#xff0c;數字化工廠成為了制造業升級的重要方向。數字化工廠的核心在于實現設備、數據和人的互聯互通&#xff0c;而這其中&#xff0c;通信協議扮演著至關重要的角色。今天&#xff0c;我們就來探討開疆智…

win11平臺下的docker-desktop中的volume位置問題

因為需要搞個本地的mysql數據庫&#xff0c;而且本地安裝的程序較多&#xff0c;不想再安mysql了&#xff0c;就想到使用docker來安裝。而且因為數據巨大&#xff0c;所以想到直接使用轉移data文件夾的方式。 各種查詢&#xff0c;而且還使用ai查詢&#xff0c;他們都提到&…

【MySQL】項目實踐

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;MySQL 文章目錄 1. 項目實踐概述1.1 項目實踐的重要性1.2 項目中MySQL的典型應用場景 2. 數據庫設計流程2.1 需求分析與規劃2.2 設計過程示例2.3 數據庫設計工具 3. 電子商務平臺實踐案例3.1 系統架構3.2 數據庫Schema設計3.3 數…

React學習———CSS Modules(樣式模塊化)

CSS Modules CSS Modules&#xff08;樣式模塊化&#xff09;是一種用于模塊化和局部作用域化CSS樣式的技術&#xff0c;讓CSS只在當前組件內生效&#xff0c;避免全局樣式沖突的技術方案 工作原理 文件命名&#xff1a;通常以.module.css、.module.less、.module.scss等結尾…

agent 智能體應用產品:生圖、生視頻、代碼等

生圖片 Lovart&#xff1a;全球首個設計 Agent https://www.lovart.ai/ 生視頻 AI 視頻 Agent 產品&#xff1a;Medeo https://www.medeo.app/ 代碼 vscode copilot、cursor、trae 其他research manus grok等各個大模型產品

青少年ctf平臺應急響應-應急響應2

題目&#xff1a; 當前服務器被創建了一個新的用戶&#xff0c;請提交新用戶的用戶名&#xff0c;得到的結果 ssh rootchallenge.qsnctf.com -p 30327 這個命令用于通過 SSH 協議連接到指定的遠程服務器。具體解釋如下&#xff1a; ssh&#xff1a;這是在 Unix-like 系統中…

碼蹄集——圓包含

MT1181 圓包含 輸入2個圓的圓心的坐標值&#xff08;x&#xff0c;y&#xff09;和半徑&#xff0c;判斷斷一個圓是否完全包含另一個圓&#xff0c;輸出YES或者NO。另&#xff1a;內切不算做完全包含。 格式 輸入格式&#xff1a;輸入整型&#xff0c;空格分隔。 每行輸入一組…

基于EMD-PCA-LSTM的光伏功率預測模型研究

摘要 本文提出了一種結合經驗模態分解(EMD)、主成分分析(PCA)和長短期記憶網絡(LSTM)的混合預測模型,用于提高光伏功率預測的準確性。該模型首先利用EMD算法將非平穩的光伏功率序列分解為多個本征模態函數(IMF),然后通過PCA對多維氣象特征進行降維處理,最后將處理后的特征輸…