性別和年齡的視頻實時監測項目

注意:本文引用自專業人工智能社區Venus AI
更多AI知識請參考原站 ([www.aideeplearning.cn])

性別和年齡檢測 Python 項目

首先介紹性別和年齡檢測的高級Python項目中使用的專業術語

什么是計算機視覺?

計算機視覺是使計算機能夠像人類一樣查看和識別數字圖像和視頻的研究領域。它面臨的挑戰很大程度上源于對生物視覺的有限理解。計算機視覺涉及獲取、處理、分析和理解數字圖像,以從現實世界中提取高維數據,從而生成可用于做出決策的符號或數字信息。該過程通常包括對象識別、視頻跟蹤、運動估計和圖像恢復等實踐。

什么是 OpenCV?

OpenCV是開源計算機視覺的縮寫。顧名思義,它是一個開源計算機視覺和機器學習庫。該庫能夠處理實時圖像和視頻,同時還具有分析功能。它支持深度學習框架Tensorflow、Caffe 和 PyTorch。

什么是CNN?

CNN即卷積神經網絡,是一種廣泛用于圖像識別和處理的深度神經網絡 (DNN) 。它具有輸入層和輸出層以及多個隱藏層,其中許多是卷積層。在某種程度上,CNN 是正則化的多層感知器。

性別和年齡檢測——目標

構建一個性別和年齡檢測器,可以在 Adience 數據集上使用深度學習模型來大致猜測圖片中人(臉部)的性別和年齡。

性別和年齡檢測——關于該項目

在這個 Python 項目中,我們將使用深度學習從單張臉部圖像中準確識別一個人的性別和年齡。我們將使用Tal Hassner 和 Gil Levi訓練的模型。預測的性別可以是“男性”和“女性”之一,預測的年齡可以是以下范圍之一 – (0 – 2)、(4 – 6)、(8 – 12)、(15 – 20) 、(25 – 32)、(38 – 43)、(48 – 53)、(60 – 100)(最終 softmax 層中的 8 個節點)。由于化妝、燈光、障礙物和面部表情等因素,很難從單張圖像中準確猜測出確切的年齡。因此,我們將其視為分類問題,而不是回歸問題。項目的結果展示動態圖如下所示,請點擊觀看:

ev_20240225_131028

CNN 架構

這個 python 項目的卷積神經網絡很簡單,有 3 個卷積層:

  • 卷積層:96 個節點,卷積核大小 7
  • 卷積層:256 個節點,卷積核大小 5
  • 卷積層:384 個節點,卷積核大小 3

它有 2 個全連接層,每個層有 512 個節點,以及一個 softmax 類型的最終輸出層。

要開始 python 項目,我們將:

  • 檢測人臉
  • 分為男/女
  • 分為 8 個年齡范圍之一
  • 將結果放在圖像上并顯示
數據集

對于這個 python 項目,我們將使用 Adience 數據集;該數據集可在公共領域使用,您可以在此處找到它。該數據集作為人臉照片的基準,包含各種現實世界的成像條件,如噪聲、照明、姿勢和外觀。這些圖像是從 Flickr 相冊中收集的,并根據知識共享 (CC) 許可進行分發。它共有 26,580 張照片,涉及 8 個年齡段(如上所述)的 2,284 名拍攝對象,大小約為 1GB。我們將使用的模型已經在此數據集上進行了訓練。

先決條件

您需要安裝 OpenCV (cv2) 才能運行該項目。可以用 pip- 來做到這一點

??????pip install opencv-python

您需要的其他包是 math 和 argparse,它們是標準 Python 庫的一部分。

項目的目錄結構

項目的目錄結構如下:

  • opencv_face_ detector.pbtxt
  • opencv_face_ detector_uint8.pb
  • Age_deploy.prototxt
  • Age_net.caffemodel
  • gander_deploy.prototxt
  • gander_net.caffemodel
  • main.py
  • 一示例的圖片

關于上述文件類型的解釋:

  • .pb文件:這是一個TensorFlow用于保存模型的文件格式。它包含了模型的結構(也就是神經網絡的架構)和模型訓練后的權重(即模型在訓練過程中學到的信息)。使用這個文件,我們可以運行一個已經訓練好的模型來進行面部檢測。
  • .pbtxt文件:與.pb文件類似,但它以文本格式存儲protobuf數據,而不是二進制格式。這使得文件內容可以直接閱讀和編輯,但通常大小會更大。
  • TensorFlow文件:TensorFlow是一個流行的機器學習框架,用于創建和訓練神經網絡。.pb和.pbtxt文件都是TensorFlow用來保存模型的文件格式。
  • .prototxt文件:這些文件用于描述神經網絡的結構,即網絡中每一層應該如何構建。這對于構建用于年齡和性別識別的模型特別重要。
  • .caffemodel文件:這種文件格式是Caffe框架的一部分,另一個流行的機器學習框架。.caffemodel文件保存了訓練后的模型參數,即網絡每一層的權重和偏置。這對于運行已經訓練好的年齡和性別識別模型至關重要。

注意:上述這些文件是博主將項目編譯之后得到的結果,而不是原始項目代碼。這些文件類型通常用于存儲訓練好的模型和它們的配置,而不是用于存儲原始的源代碼。原代碼詳見Github:https://github.com/eranid/adience_align/tree/master

main.py腳本詳解:

導入庫

  • import cv2: 導入 OpenCV 庫,用于計算機視覺相關任務。
  • import math: 導入數學庫,提供數學運算支持。
  • import argparse: 導入參數解析庫,用于解析命令行參數。
import cv2
import math
import argparse

highlightFace 函數

  • 這個函數用于在圖像中突出顯示人臉。
  • frame: 要處理的圖像。
  • conf_threshold: 用于確定檢測是否有效的置信度閾值。
  • 函數首先創建圖像的副本,然后根據圖像的尺寸生成一個 blob(神經網絡輸入)。
  • 使用提供的神經網絡 (net) 對 blob 進行前向傳播,以檢測圖像中的人臉。
  • 檢測到的每個人臉都被添加到?faceBoxes?列表中,并在圖像上繪制矩形框以突出顯示人臉。
  • 返回處理后的圖像和檢測到的人臉框列表。?
def highlightFace(net, frame, conf_threshold=0.7):frameOpencvDnn=frame.copy()frameHeight=frameOpencvDnn.shape[0]frameWidth=frameOpencvDnn.shape[1]blob=cv2.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 117, 123], True, False)net.setInput(blob)detections=net.forward()faceBoxes=[]for i in range(detections.shape[2]):confidence=detections[0,0,i,2]if confidence>conf_threshold:x1=int(detections[0,0,i,3]*frameWidth)y1=int(detections[0,0,i,4]*frameHeight)x2=int(detections[0,0,i,5]*frameWidth)y2=int(detections[0,0,i,6]*frameHeight)faceBoxes.append([x1,y1,x2,y2])cv2.rectangle(frameOpencvDnn, (x1,y1), (x2,y2), (0,255,0), int(round(frameHeight/150)), 8)return frameOpencvDnn,faceBoxes

解析命令行參數:?

  • 使用?argparse?庫來解析命令行輸入的參數。這里解析了?--image?參數,允許用戶指定一個圖像文件的路徑。
  • 若不指定,默認使用攝像頭采集當前畫面進行實時檢測。
parser=argparse.ArgumentParser()
parser.add_argument('--image')args=parser.parse_args()

加載模型
  • 指定了用于人臉檢測、年齡和性別預測的模型文件的路徑。
  • 使用?cv2.dnn.readNet?從這些路徑加載對應的模型。
  • MODEL_MEAN_VALUES: 在預處理圖像時用于歸一化的均值。
  • ageList?和?genderList: 分別包含年齡范圍和性別類別的列表。
faceProto="opencv_face_detector.pbtxt"
faceModel="opencv_face_detector_uint8.pb"
ageProto="age_deploy.prototxt"
ageModel="age_net.caffemodel"
genderProto="gender_deploy.prototxt"
genderModel="gender_net.caffemodel"MODEL_MEAN_VALUES=(78.4263377603, 87.7689143744, 114.895847746)
ageList=['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)']
genderList=['Male','Female']faceNet=cv2.dnn.readNet(faceModel,faceProto)
ageNet=cv2.dnn.readNet(ageModel,ageProto)
genderNet=cv2.dnn.readNet(genderModel,genderProto)

處理視頻流

  • 使用?cv2.VideoCapture?打開視頻源(從文件或攝像頭)。
  • 在一個循環中讀取每一幀圖像,并使用?highlightFace?函數檢測人臉。
video=cv2.VideoCapture(args.image if args.image else 0)

性別和年齡預測
  • 對于檢測到的每個人臉,截取人臉區域并為性別和年齡預測網絡準備輸入 blob。
  • 運行性別和年齡預測網絡,并從?genderList?和?ageList?中獲取預測結果。
  • 將預測結果(性別和年齡)打印出來,并在圖像上繪制包含這些信息的文本。
  • 使用?cv2.imshow?顯示帶有預測結果的圖像。
  • 循環持續進行,直到用戶按鍵中斷。
padding=20
while cv2.waitKey(1)<0:hasFrame,frame=video.read()if not hasFrame:cv2.waitKey()breakresultImg,faceBoxes=highlightFace(faceNet,frame)if not faceBoxes:print("No face detected")for faceBox in faceBoxes:face=frame[max(0,faceBox[1]-padding):min(faceBox[3]+padding,frame.shape[0]-1),max(0,faceBox[0]-padding):min(faceBox[2]+padding, frame.shape[1]-1)]blob=cv2.dnn.blobFromImage(face, 1.0, (227,227), MODEL_MEAN_VALUES, swapRB=False)genderNet.setInput(blob)genderPreds=genderNet.forward()gender=genderList[genderPreds[0].argmax()]print(f'Gender: {gender}')ageNet.setInput(blob)agePreds=ageNet.forward()age=ageList[agePreds[0].argmax()]print(f'Age: {age[1:-1]} years')cv2.putText(resultImg, f'{gender}, {age}', (faceBox[0], faceBox[1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,255,255), 2, cv2.LINE_AA)cv2.imshow("Detecting age and gender", resultImg)

性別和年齡檢測的 Python 項目示例?

除了捕獲攝像頭畫面進行檢測外,腳本也支持在我們自己的一些圖像上嘗試這個性別和年齡分類器。

我們將進入命令提示符,使用圖像選項運行腳本并指定要分類的圖像:

輸入:
pthon main.py --image girl2.jpg
輸出:

?

資源:

在這個 python 項目中,我們實現了一個 CNN 來從單張臉部圖片或視頻流中檢測性別和年齡。

項目代碼壓縮包和項目的數據集,請原站 ([www.aideeplearning.cn])

如果需要項目的原代碼,請訪問github:

GilLevi/AgeGenderDeepLearning on GitHub.

??版權聲明

文章版權歸作者所有,未經允許,請勿轉載,私自轉載將嚴厲追究法律責任。

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

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

相關文章

基于Camunda實現bpmn 2.0各種類型的任務

基于Camunda實現bpmn中各種類型任務 ? Camunda Modeler -為流程設置器&#xff08;建模工具&#xff09;&#xff0c;用來構建我們的流程模型。Camunda Modeler流程繪圖工具&#xff0c;支持三種協議類型流程文件分別為&#xff1a;BPMN、DMN、Form。 ? Camunda Modeler下載…

笨辦法:基于后端Matplotlib生成圖片, 前端繪制報表

很久很久以前, 做過一個項目, 因為前端基礎差, echarts搗鼓不來, 然后就折騰出來一套比較奇葩的技術方案, 就是前端需要什么圖表, 后端先繪制好, 然后前端需要什么圖表, 再從后端拉取后端之前響應的圖片路徑, 再去做渲染。 其實基于后端使用 Matplotlib 繪制圖表,前端…

DangZero:通過直接頁表訪問的高效UAF檢測(摘要及介紹及背景翻譯)

先通過翻譯過一遍文章&#xff0c;然后再對每個章節進行總結 摘要 Use-after-free vulnerabilities remain difficult to detect and mitigate, making them a popular source of exploitation. Existing solutions in- cur impractical performance/memory overhead, requir…

powershell界面中,dir命令的效果

常用參數 -path D:\111\111_2。讀取指定路徑。 -Name。只輸出文件名 -Include *.txt。指定后綴的文件 -Recurse。搜索目錄及其子目錄。 -Force。顯示具有 h 模式的隱藏文件。 >1dir.txt。將結果入指定文件 各參數使用效果 dir PS D:\111\111_2> dir 目錄: D:\111…

初中孩子最近不愿意上學怎么辦?有什么好方法可以解決?

這個年齡段屬于叛逆期&#xff0c;這個時候孩子出現厭學問題很正常&#xff0c;家長應該多些耐心和時間&#xff0c;不要一味地責罵&#xff0c;會更加排斥和反感&#xff0c;叛逆的。可以跟孩子好好談談聊聊&#xff0c;學會傾聽他的心聲&#xff0c;愿意聽你說話在教育和引導…

配置MySQL與登錄模塊

使用技術 MySQL&#xff0c;Mybatis-plus&#xff0c;spring-security&#xff0c;jwt驗證&#xff0c;vue 1. 配置Mysql 1.1 下載 MySQL :: Download MySQL Installer 1.2 安裝 其他頁面全選默認即可 1.3 配置環境變量 將C:\Program Files\MySQL\MySQL Server 8.0\bin…

10個常見的Java面試問題及其答案

問題&#xff1a; Java的主要特性是什么&#xff1f; 答案&#xff1a; Java的主要特性包括面向對象、平臺無關、自動內存管理、安全性、多線程支持、豐富的API和強大的社區支持。 問題&#xff1a; 什么是Java的垃圾回收機制&#xff1f; 答案&#xff1a; Java的垃圾回收機…

【Spring Boot 源碼學習】BootstrapRegistry 初始化器實現

《Spring Boot 源碼學習系列》 BootstrapRegistry 初始化器實現 一、引言二、往期內容三、主要內容3.1 BootstrapRegistry3.2 BootstrapRegistryInitializer3.3 BootstrapRegistry 初始化器實現3.3.1 定義 DemoBootstrapper3.3.2 添加 DemoBootstrapper 四、總結 一、引言 前面…

Avalonia學習(二十八)-OpenGL

Avalonia已經繼承了opengl&#xff0c;詳細的大家可以自己查閱。Avalonia里面啟用opengl繼承OpenGlControlBase類就可以了。有三個方法。分別是初始化、繪制、釋放。 這里把官方源碼的例子扒出來給大家看一下。源碼在我以前發布的單組件里面。地址在前面的界面總結博文里面。 …

圖數據庫 之 Neo4j - 應用場景4 - 反洗錢(9)

原理 Neo4j圖數據庫可以用于構建和分析數據之間的關系。它使用節點和關系來表示數據,并提供實時查詢能力。通過使用Neo4j,可以將大量的交易數據導入圖數據庫,并通過查詢和分析圖結構來發現洗錢行為中的模式和關聯。 案例分析 假設有一家轉賬服務公司,有以下交易數據,每個…

YOLOv9有效改進|使用空間和通道重建卷積SCConv改進RepNCSPELAN4

專欄介紹&#xff1a;YOLOv9改進系列 | 包含深度學習最新創新&#xff0c;主力高效漲點&#xff01;&#xff01;&#xff01; 一、改進點介紹 SCConv是一種即插即用的空間和通道重建卷積。 RepNCSPELAN4是YOLOv9中的特征提取模塊&#xff0c;類似YOLOv5和v8中的C2f與C3模塊。 …

突破編程_C++_設計模式(建造者模式)

1 建造者模式的概念 建造者模式&#xff08;Builder Pattern&#xff09;是一種創建型設計模式&#xff0c;也被稱為生成器模式。它的核心思想是將一個復雜對象的構建與它的表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。 在建造者模式中&#xff0c;通常包括以…

MySQL進階:MySQL事務、并發事務問題及隔離級別

&#x1f468;?&#x1f393;作者簡介&#xff1a;一位大四、研0學生&#xff0c;正在努力準備大四暑假的實習、 &#x1f30c;上期文章&#xff1a;MySQL進階&#xff1a;視圖&&存儲過程&&存儲函數&&觸發器 &#x1f4da;訂閱專欄&#xff1a;MySQL進…

Docker Machine windows系統下 安裝

如果你是 Windows 平臺&#xff0c;可以使用 Git BASH&#xff0c;并輸入以下命令&#xff1a; basehttps://github.com/docker/machine/releases/download/v0.16.0 &&mkdir -p "$HOME/bin" &&curl -L $base/docker-machine-Windows-x86_64.exe >…

點燃技能火花:探索PyTorch學習網站,開啟AI編程之旅!

介紹&#xff1a;PyTorch是一個開源的Python機器學習庫&#xff0c;它基于Torch&#xff0c;專為深度學習和科學計算而設計&#xff0c;特別適合于自然語言處理等應用程序。以下是對PyTorch的詳細介紹&#xff1a; 歷史背景&#xff1a;PyTorch起源于Torch&#xff0c;一個用于…

【真機Bug】異步加載資源未完成訪問單例導致資源創建失敗

1.錯誤表現描述 抽卡時&#xff0c;10抽展示界面為A。抽取內容可能是整卡或者碎片&#xff0c;抽到整卡&#xff0c;會有立繪展示和點擊詳情的按鈕。點擊詳情后出現詳情頁B。【此時界面A預制體被銷毀&#xff0c;卡片數據進入數據緩存池】點擊頁面B的返回按鈕&#xff0c;單例…

C++——模版

前言&#xff1a;哈嘍小伙伴們好久不見&#xff0c;這是2024年的第一篇博文&#xff0c;我們將繼續C的學習&#xff0c;今天這篇文章&#xff0c;我們來習一下——模版。 目錄 一.什么是模版 二.模版分類 1.函數模版 2.類模板 總結 一.什么是模版 說起模版&#xff0c;我們…

線索二叉樹

線索二叉樹即從前、中、后序三種遍歷中其中一種來看&#xff0c;樹中的左右孩子都不會是空著的&#xff0c;都會指向對應的前驅和后驅。 以中序遍歷為例&#xff0c;二叉樹線索化過程如下&#xff1a; 先是樹的結構 typedef struct ThreadNode{Elemetype data;struct ThreadNo…

微服務面試題之套路一

面試題 一、你的項目是從SpringBoot演進到微服務架構的&#xff0c;你在此過程中有調研過哪些技術&#xff0c;怎么調研落地的? 微服務通信框架&#xff1a; 需要選擇適合項目的微服務通信框架&#xff0c;如Dubbo、Spring Cloud或gRPC Feign RestTemplate 等。調研方式可以是…

高性能通信之Netty

一, 同步IO(BIO)模型的架構 一般針對性能不高的情況下可以使用. 二,異步IO(NIO)模型的架構 多路復用(epoll模型):