【手把手教学】基于OPenCV与深度学习实现人物年龄检测【附完整源码】

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。
👍感谢小伙伴们点赞、关注!

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发2.【车牌识别与自动收费管理系统开发
3.【手势识别系统开发4.【人脸面部活体检测系统开发
5.【图片风格快速迁移软件开发6.【人脸表表情识别系统
7.【YOLOv8多目标识别与自动标注软件开发8.【基于YOLOv8深度学习的行人跌倒检测系统
9.【基于YOLOv8深度学习的PCB板缺陷检测系统10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统
11.【基于YOLOv8深度学习的安全帽目标检测系统12.【基于YOLOv8深度学习的120种犬类检测与识别系统
13.【基于YOLOv8深度学习的路面坑洞检测系统14.【基于YOLOv8深度学习的火焰烟雾检测系统
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统16.【基于YOLOv8深度学习的舰船目标分类检测系统
17.【基于YOLOv8深度学习的西红柿成熟度检测系统18.【基于YOLOv8深度学习的血细胞检测与计数系统
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统20.【基于YOLOv8深度学习的水稻害虫检测与识别系统
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统22.【基于YOLOv8深度学习的路面标志线检测与识别系统
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统
27.【基于YOLOv8深度学习的人脸面部表情识别系统28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统
29.【基于YOLOv8深度学习的智能肺炎诊断系统30.【基于YOLOv8深度学习的葡萄簇目标检测系统
31.【基于YOLOv8深度学习的100种中草药智能识别系统32.【基于YOLOv8深度学习的102种花卉智能识别系统
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统42.【基于YOLOv8深度学习的无人机视角地面物体检测系统
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统44.【基于YOLOv8深度学习的野外火焰烟雾检测系统
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统48.【车辆检测追踪与流量计数系统
49.【行人检测追踪与双向流量计数系统50.【基于YOLOv8深度学习的反光衣检测与预警系统
51.【危险区域人员闯入检测与报警系统52.【高密度人脸智能检测与统计系统
53.【CT扫描图像肾结石智能检测系统54.【水果智能检测系统
55.【水果质量好坏智能检测系统56.【蔬菜目标检测与识别系统
57.【非机动车驾驶员头盔检测系统58.【太阳能电池板检测与分析系统
59.【工业螺栓螺母检测60.【金属焊缝缺陷检测系统
61.【链条缺陷检测与识别系统62.【交通信号灯检测识别

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

引言

在当今社会,人工智能技术在各个领域都发挥着越来越重要的作用。其中,人脸识别技术作为计算机视觉领域的热点,已经广泛应用于安全监控、智能交互等多个场景。本文将带领大家深入了解如何使用OpenCV库进行人物的年龄预测。通过这个项目,我们将学习如何将先进的人工智能技术应用于实际生活中,实现对人物年龄的智能识别。

在本教程中,我们将看到使用OpenCV创建年龄预测器项目的整个过程。实现效果如下:

img

年龄检测

我们的目标是创建一个程序,使用图像预测人的年龄。但是预测年龄可能不像你想象的那么简单,为什么?你可能认为年龄预测是一个回归问题,对吗?你这么想是对的。然而,当研究人员将其视为回归问题时,他们面临着许多不确定性,如相机质量,亮度,气候条件,背景等。

解决办法是什么?

这个问题的解决方案很简单,我们可以不是预测一个精确的年龄数值,而是将年龄分类到一个特定的范围,如0- 6,18 -25等,这就是研究人员所做的,发现结果是惊人的,准确性在现实世界的场景中上升了很多。

现在我们已经清楚了我们的问题,让我们继续并开始创建我们的程序。

工作流程

在这里插入图片描述

下载所需文件

我们将使用预先训练的模型进行年龄预测,因为我们的主要重点是如何使用OpenCV实现年龄预测器。

您可以在这里下载所需的所有文件,下载地址:https://drive.google.com/file/d/1yy_poZSFAPKi0y2e2yj9XDe1N8xXYuKB/view
【注:我已经将需要的文件都下载打包好了,需要的小伙伴也可以在文末获取。】

构建主程序

我把主程序分解成5个步骤,使其更容易理解,然后在最后我写了整个程序的代码,你可以尝试和运行自己。

步骤1:创建镜像实例

在这里,我们将使用OpenCV包来实例化输入图像的对象,如果你不明白这一点,那么你应该首先阅读如何在OpenCV中读取/捕获视频。

现在我们有了输入图像,下一步是实例化我们的模型。

import cv2 
import dlib 
import numpy as np 

img = cv2.imread('assets/kid1.jpg') 
img = cv2.resize(img, (720, 640)) 
frame = img.copy() 
步骤2:使用模型创建DNN

在OpenCV中,我们创建一个DNN深度神经网络来加载预训练的模型并将其传递到模型文件。

我们首先创建变量来存储模型文件的文件路径,然后定义模型变量-这些变量因模型而异,我已经为我们使用的Caffe模型取了这些值。

# ------------ Model for Age detection --------# 
age_weights = "Models/age_deploy.prototxt"
age_config = "Models/age_net.caffemodel"
age_Net = cv2.dnn.readNet(age_config, age_weights) 

# Model requirements for image 
ageList = ['(0-2)', '(4-6)', '(8-12)', '(15-20)', 
		'(25-32)', '(38-43)', '(48-53)', '(60-100)'] 
model_mean = (78.4263377603, 87.7689143744, 114.895847746) 

注意:这是使用OpenCV将预训练模型用于计算机视觉所需遵循的过程/步骤。

现在我们有了模型,让我们尝试在图像/视频中检测人脸。

步骤3:人脸检测

在这个程序中,为了简单起见,我使用了***dlib.get_frontal_face_detector()***方法进行人脸检测,但你绝对可以尝试使用自定义模型或预训练模型。

有很多注释,使您更容易理解代码的每一行。

# ------------- Model for face detection---------# 
face_detector = dlib.get_frontal_face_detector() 
# converting to grayscale 
img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

# -------------detecting the faces--------------# 
faces = face_detector(img_gray) 

# If no faces our detected 
if not faces: 
	mssg = 'No face detected'
	cv2.putText(img, f'{mssg}', (40, 40), 
				cv2.FONT_HERSHEY_SIMPLEX, 2, (200), 2) 
	cv2.imshow('Age detected', img) 
	cv2.waitKey(0) 
步骤4.年龄检测

在我们传递图像作为输入之前,我们必须根据模型的输入层将其更改为所需的尺寸,对吗?这是通过OpenCV中***的blobFromImage()***函数完成的。

然后,将此blob作为输入传递到年龄检测器模型。

for box in Boxes: 
		face = frame[box[1]:box[3], box[0]:box[2]] 

		# ----- Image preprocessing --------# 
		blob = cv2.dnn.blobFromImage( 
			face, 1.0, (227, 227), model_mean, swapRB=False) 

		# -------Age Prediction---------# 
		age_Net.setInput(blob) 
		age_preds = age_Net.forward() 
		age = ageList[age_preds[0].argmax()] 
步骤5:显示检测结果图像

现在我们有了预测,我们将把它们作为文本,并在最终的输出图像中显示它们。

cv2.putText(frame, f'{mssg}:{age}', (box[0], 
											box[1] - 10), 
					cv2.FONT_HERSHEY_SIMPLEX, 0.8, 
					(0, 255, 255), 2, cv2.LINE_AA) 

		cv2.imshow("Detecting Age", frame) 
		cv2.waitKey(0) 

完整源码

这是最终的程序代码,结合了所有5个步骤,您可以直接在计算机上运行。

import cv2 
import dlib 
import numpy as np 

img = cv2.imread('assets/kid1.jpg') 
img = cv2.resize(img, (720, 640)) 
frame = img.copy() 

# ------------ Model for Age detection --------# 
age_weights = "Models/age_deploy.prototxt"
age_config = "Models/age_net.caffemodel"
age_Net = cv2.dnn.readNet(age_config, age_weights) 

# Model requirements for image 
ageList = ['(0-2)', '(4-6)', '(8-12)', '(15-20)', 
		'(25-32)', '(38-43)', '(48-53)', '(60-100)'] 
model_mean = (78.4263377603, 87.7689143744, 114.895847746) 

# storing the image dimensions 
fH = img.shape[0] 
fW = img.shape[1] 

Boxes = [] # to store the face co-ordinates 
mssg = 'Face Detected' # to display on image 

# ------------- Model for face detection---------# 
face_detector = dlib.get_frontal_face_detector() 
# converting to grayscale 
img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

# -------------detecting the faces--------------# 
faces = face_detector(img_gray) 

# If no faces our detected 
if not faces: 
	mssg = 'No face detected'
	cv2.putText(img, f'{mssg}', (40, 40), 
				cv2.FONT_HERSHEY_SIMPLEX, 2, (200), 2) 
	cv2.imshow('Age detected', img) 
	cv2.waitKey(0) 

else: 
	# --------- Bounding Face ---------# 
	for face in faces: 
		x = face.left() # extracting the face coordinates 
		y = face.top() 
		x2 = face.right() 
		y2 = face.bottom() 

		# rescaling those coordinates for our image 
		box = [x, y, x2, y2] 
		Boxes.append(box) 
		cv2.rectangle(frame, (x, y), (x2, y2), 
					(00, 200, 200), 2) 

	for box in Boxes: 
		face = frame[box[1]:box[3], box[0]:box[2]] 

		# ----- Image preprocessing --------# 
		blob = cv2.dnn.blobFromImage( 
			face, 1.0, (227, 227), model_mean, swapRB=False) 

		# -------Age Prediction---------# 
		age_Net.setInput(blob) 
		age_preds = age_Net.forward() 
		age = ageList[age_preds[0].argmax()] 

		cv2.putText(frame, f'{mssg}:{age}', (box[0], 
											box[1] - 10), 
					cv2.FONT_HERSHEY_SIMPLEX, 0.8, 
					(0, 255, 255), 2, cv2.LINE_AA) 

		cv2.imshow("Detecting Age", frame) 
		cv2.waitKey(0) 

输出:

img

可自行尝试内容:

  1. 尝试摄像头实时检测的代码
  2. 尝试使用另一个预先训练的模型,如YOLO或创建自己的模型
  3. 您还可以添加另一个模型来检测人的活力/情绪。

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值