程序代碼篇---face_recognition庫實現的人臉檢測系統

以下是一個基于face_recognition庫的人臉管理系統,支持從文件夾加載人臉數據、實時識別并顯示姓名,以及動態添加新人臉。系統采用模塊化設計,代碼結構清晰,易于擴展。

一、系統架構

face_recognition_system/
├── faces/                  # 人臉數據庫(按姓名命名子文件夾)
│   ├── person1/
│   │   ├── photo1.jpg
│   │   ├── photo2.jpg
│   ├── person2/
│   │   ├── photo1.jpg
├── main.py                 # 主程序
├── face_manager.py         # 人臉管理模塊
└── utils.py                # 工具函數

二、核心代碼實現

1. 人臉管理模塊(face_manager.py)
import os
import pickle
import face_recognition
import cv2
from typing import List, Dict, Tupleclass FaceManager:def __init__(self, data_dir="faces", encodings_file="face_encodings.pkl"):"""初始化人臉管理器"""self.data_dir = data_dir  # 人臉數據庫目錄self.encodings_file = encodings_file  # 編碼數據緩存文件self.known_face_encodings = []  # 已知人臉編碼self.known_face_names = []  # 對應的姓名self.load_known_faces()  # 加載已知人臉數據def load_known_faces(self):"""從文件或目錄加載已知人臉數據"""# 優先從緩存文件加載if os.path.exists(self.encodings_file):try:with open(self.encodings_file, "rb") as f:data = pickle.load(f)self.known_face_encodings = data["encodings"]self.known_face_names = data["names"]print(f"從緩存加載了 {len(self.known_face_names)} 個人臉")returnexcept Exception as e:print(f"加載緩存失敗: {e},將從文件重新加載")# 從目錄加載并生成緩存self._load_faces_from_directory()self._save_face_encodings()def _load_faces_from_directory(self):"""從目錄加載人臉數據"""print(f"正在從 {self.data_dir} 加載人臉數據...")if not os.path.exists(self.data_dir):os.makedirs(self.data_dir)returnfor person_name in os.listdir(self.data_dir):person_dir = os.path.join(self.data_dir, person_name)if not os.path.isdir(person_dir):continue# 遍歷每個人的照片for filename in os.listdir(person_dir):image_path = os.path.join(person_dir, filename)if not filename.lower().endswith(('.png', '.jpg', '.jpeg')):continuetry:# 加載圖像并提取人臉編碼image = face_recognition.load_image_file(image_path)face_encodings = face_recognition.face_encodings(image)if len(face_encodings) == 0:print(f"警告: 在 {image_path} 中未檢測到人臉")continue# 通常一張照片只有一個人臉face_encoding = face_encodings[0]self.known_face_encodings.append(face_encoding)self.known_face_names.append(person_name)print(f"已加載 {person_name} 的人臉: {filename}")except Exception as e:print(f"處理 {image_path} 時出錯: {e}")print(f"共加載了 {len(self.known_face_names)} 個人臉")def _save_face_encodings(sel

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

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

相關文章

Cursor 工具項目構建指南:Java 21 環境下的 Spring Boot Prompt Rules 約束

簡簡單單 Online zuozuo: 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo :本心、輸入輸出、結果 簡簡單單 Online zuozuo : 文章目錄 Cursor 工具項目構建指南:Java 21 環境下的 Spring Boot Prompt Rules 約束前言項目簡…

大模型高效提示詞Prompt編寫指南

大模型高效Prompt編寫指南 一、引言二、核心原則1. 清晰性原則:明確指令與期望2. 具體性原則:提供詳細上下文3. 結構化原則:組織信息的邏輯與層次4. 迭代優化原則:通過反饋改進Prompt5. 簡潔性原則:避免冗余信息 三、文…

gitLab 切換中文模式

點擊【頭像】--選擇settings 選擇【language】,選擇中文,點擊【保存】即可。

vue實現點擊按鈕input保持聚焦狀態

主要功能&#xff1a; 點擊"停頓"按鈕切換對話框顯示狀態輸入框聚焦時保持狀態點擊對話框外的區域自動關閉 以下是代碼版本&#xff1a; <template><div class"input-container"><el-inputv-model"input"style"width: 2…

[春秋云鏡] CVE-2023-23752 writeup

首先奉上大佬的wp表示尊敬&#xff1a;&#xff08;很詳細&#xff09;[ 漏洞復現篇 ] Joomla未授權訪問Rest API漏洞(CVE-2023-23752)_joomla未授權訪問漏洞(cve-2023-23752)-CSDN博客 知識點 Joomla版本為4.0.0 到 4.2.7 存在未授權訪問漏洞 Joomla是一套全球知名的內容管理…

OpenCV CUDA模塊霍夫變換------在 GPU 上執行概率霍夫變換檢測圖像中的線段端點類cv::cuda::HoughSegmentDetector

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::cuda::HoughSegmentDetector 是 OpenCV 的 CUDA 模塊中一個非常重要的類&#xff0c;它用于在 GPU 上執行 概率霍夫變換&#xff08;Probabi…

李飛飛World Labs開源革命性Web端3D渲染器Forge!3D高斯濺射技術首次實現全平臺流暢運行

在AI與3D技術深度融合的今天&#xff0c;李飛飛領銜的World Labs團隊再次成為行業焦點。今日&#xff0c;他們正式開源了Forge——一款專為Web端設計的3D高斯濺射&#xff08;3D Gaussian Splatting&#xff09;渲染器&#xff0c;不僅支持THREE.js生態&#xff0c;更能在手機、…

Java 中 ArrayList、Vector、LinkedList 的核心區別與應用場景

Java 中 ArrayList、Vector、LinkedList 的核心區別與應用場景 引言 在 Java 集合框架體系中&#xff0c;ArrayList、Vector和LinkedList作為List接口的三大經典實現類&#xff0c;共同承載著列表數據的存儲與操作功能。然而&#xff0c;由于底層數據結構設計、線程安全機制以…

Paraformer分角色語音識別-中文-通用 FunASR

https://github.com/modelscope/FunASR/blob/main/README_zh.md https://github.com/modelscope/FunASR/blob/main/model_zoo/readme_zh.md PyTorch / 2.3.0 / 3.12(ubuntu22.04) / 12.1 1 Paraformer分角色語音識別-中文-通用 https://www.modelscope.cn/models/iic/speech…

k8s熱更新-subPath 不支持熱更新

文章目錄 k8s熱更新-subPath 不支持熱更新背景subPath 不支持熱更新1. 為什么 subPath 不支持熱更新&#xff1f;2. 掛載整個目錄為何支持熱更新&#xff1f;使用demo舉例&#xff1a;掛載整個目錄&#xff08;不使用 subPath&#xff09; k8s熱更新-subPath 不支持熱更新 背景…

分班 - 華為OD統一考試(JavaScript 題解)

華為OD機試題庫《C》限時優惠 9.9 華為OD機試題庫《Python》限時優惠 9.9 華為OD機試題庫《JavaScript》限時優惠 9.9 針對刷題難&#xff0c;效率慢&#xff0c;我們提供一對一算法輔導&#xff0c; 針對個人情況定制化的提高計劃&#xff08;全稱1V1效率更高&#xff09;。 看…

【TCP/IP和OSI模型以及區別——理論匯總】

參考小林code和卡爾哥&#xff0c;感恩&#xff01; 網絡基礎篇 面試官您好&#xff01;OSI和TCP/IP是網絡通信中兩個關鍵模型&#xff0c;本質都是分層處理數據傳輸&#xff0c;但設計理念和應用場景差異很大。 OSI模型是理論上的七層架構&#xff0c;從下到上依次是物理層…

極客大挑戰 2019 EasySQL 1(萬能賬號密碼,SQL注入,HackBar)

題目 做法 啟動靶機&#xff0c;打開給出的網址 隨便輸點東西進去&#xff0c;測試一下 輸入1、1’、1"判斷SQL語句閉合方式 輸入以上兩個都是以下結果 但是&#xff0c;輸入1’時&#xff0c;出現的是另外結果 輸入1&#xff0c;1"時&#xff0c;SQL語句沒有…

Tauri(2.5.1)+Leptos(0.7.8)開發桌面應用--簡單的工作進度管理

在前期工作&#xff08;Tauri(2.5.1)Leptos(0.7.8)開發桌面應用--程序啟動界面_tauri 程序啟動畫面-CSDN博客&#xff09;的基礎上繼續進行自用桌面小程序的開發。為了方便管理工作進度&#xff0c;決定自己造輪子。效果如下&#xff1a; 工作進度管理系統 在編寫程序過程中&am…

java面試 網絡編程與 Java I/O:技術要點解析

java面試 網絡編程與 Java I/O&#xff1a;技術要點解析 網絡編程與 Java I/O&#xff1a;技術要點解析一、TCP 和 UDP 的區別TCP&#xff08;Transfer Control Protocol&#xff09;UDP&#xff08;User Datagram Protocol&#xff09;TCP 的三次握手與四次揮手 二、Java 的幾…

PhpStorm設置中文

環境信息 系統版本&#xff1a;Windows11 22H2 PhpStorm版本&#xff1a;2025.1.1【Build #PS-251.25410.148】 設置中文 PhpStorm并不需要安裝插件或下載相應的漢化包進行漢化 依次點擊點擊&#xff1a; file或右上角設置按鈕→ 進入Settings→ 找到Appearance & Behav…

【監控】Spring Boot 應用監控

這段配置是 Spring Boot 應用中對 Actuator 和 Micrometer 監控系統的配置&#xff0c;用于將應用的指標暴露給 Prometheus 進行收集。下面我將詳細介紹這種配置方式及其提供的指標。 配置說明 這個配置主要涉及 Spring Boot Actuator 和 Micrometer 兩個核心組件&#xff1a…

學習筆記(23): 機器學習之數據預處理Pandas和轉換成張量格式[1]

學習筆記(23): 機器學習之數據預處理Pandas和轉換成張量格式[1] 學習機器學習&#xff0c;需要學習如何預處理原始數據&#xff0c;這里用到pandas&#xff0c;將原始數據轉換為張量格式的數據。 1、安裝pandas pip install pandas 2、寫入和讀取數據 >>創建一個人工…

一臺電腦聯網如何共享另一臺電腦?網線方式

前言 公司內網一個人只能申請一個賬號和一個主機設備&#xff1b;會檢測MAC地址&#xff1b;如果有兩臺設備&#xff0c;另一臺就沒有網&#xff1b;因為是聯想老電腦&#xff0c;共享熱點用不了&#xff0c;但是有一根網線&#xff0c;現在解決網線方式共享網絡&#xff1b; …