《博主简介》

小伙伴们好,我是阿旭。专注于人工智能、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. 您还可以添加另一个模型来检测人的活力/情绪。

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

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐