基于OpenCV的实时年龄与性别识别(支持CPU和GPU)

news2024/11/18 23:26:25

关于深度实战社区

我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万+粉丝,拥有2篇国家级人工智能发明专利。

社区特色:深度实战算法创新

获取全部完整项目数据集、代码、视频教程,请进入官网:zzgcz.com。竞赛/论文/毕设项目辅导答疑,v:zzgcz_com

1. 项目简介

本项目旨在实现一个基于OpenCV的实时年龄与性别识别系统,使用深度学习模型进行人脸检测和特征提取,并结合预训练的性别与年龄分类模型进行推断。随着计算机视觉和深度学习技术的快速发展,自动化的人脸识别和属性分类技术得到了广泛应用,包括安防监控、智能零售、人机交互等领域。本项目的目标是通过摄像头实时捕获用户的面部图像,并预测其年龄和性别,提升交互体验或为其他应用提供数据支持。项目中使用了深度学习网络进行人脸检测,并通过OpenCV DNN模块加载预训练的Caffe模型来实现年龄与性别分类。这些模型在大型数据集上训练,能够准确预测多种年龄段(例如0-2岁、4-6岁、25-32岁等)以及性别(男性、女性)。此外,项目支持在CPU和GPU上进行推理,以满足不同的计算资源需求。在CPU设备上,系统利用OpenCV的高效DNN加速推理;在GPU设备上,则通过CUDA优化模型计算,以加速性能。本项目的实现能够广泛应用于需要快速识别用户属性的场景,具有较强的实用性和扩展性。

在这里插入图片描述

2.技术创新点摘要

  1. 集成多个预训练模型的高效应用:项目采用了预训练的深度学习模型(Caffe模型)来实现性别与年龄的识别,结合了人脸检测、性别分类和年龄预测三个任务。使用OpenCV的DNN模块对预训练的性别和年龄模型进行推理,能够有效降低开发难度并加快实现速度。此外,这些模型在大规模数据集上训练,具备较高的准确率和鲁棒性,尤其适合实时应用场景。
  2. CPU与GPU设备的自适应支持:代码中针对CPU和GPU设备进行了不同的优化处理,使得模型能够灵活地在不同计算资源下运行。对于CPU设备,OpenCV的DNN模块能够在非GPU硬件上高效推理。而对于GPU设备,代码通过CUDA支持,利用GPU加速推理过程,大幅提升了处理速度。这种对硬件的自适应支持,显著提高了系统的可移植性和运行效率,尤其适用于需要高性能推理的应用场景。
  3. 基于OpenCV的高效人脸检测:项目中使用了基于OpenCV的深度神经网络模块进行人脸检测,采用了高置信度的检测机制来确保检测到的人脸位置准确无误。代码通过对检测结果的置信度进行过滤,避免了低置信度的人脸检测误报,从而提升了识别的准确性。此外,在检测到人脸后,程序为每个检测到的人脸进行精细化裁剪,为后续的性别与年龄分类提供了高质量的输入数据。
  4. 实时视频处理与多任务并行:代码不仅能够处理静态图像,还能通过摄像头流的方式实时捕捉帧并进行连续的识别处理。每一帧视频都经过人脸检测、裁剪、年龄和性别分类等多重步骤,确保系统在实时场景中的流畅性和准确性。这种多任务并行处理的架构为后续的扩展提供了良好的基础。

3. 数据集与预处理

本项目的核心使用了预训练的Caffe模型进行年龄和性别识别,模型的训练数据集来源于广泛的人脸识别数据集,如IMDB-WIKI数据集和Adience数据集。这些数据集包含了大量标注好的人脸图像,涵盖了不同性别、年龄段、种族以及多样的拍摄角度和光照条件。IMDB-WIKI数据集是目前最大的公开人脸年龄数据集,包含超过50万张图像及其对应的年龄标签。Adience数据集则专注于年龄分段(Age Group)和性别预测,具备较高的分类精度,是学术界和工业界常用的测试集。

在预处理阶段,项目首先对输入图像或视频流进行人脸检测。检测后的人脸图像会被裁剪到指定的尺寸(227x227),确保模型输入图像的标准化。之后,代码采用了OpenCV的blobFromImage函数进行预处理操作,包括将图像从RGB转换为BGR格式,进行像素值的均值减法(使用预定义的均值值:78.4、87.8、114.9)以及尺寸调整,生成适合深度学习模型输入的blob数据。模型预期输入的图像通道顺序与原始图像格式不同,因此进行了通道变换,确保在推理时不会因通道错乱而导致识别精度下降。

此外,该项目对输入图像未使用复杂的数据增强(如旋转、平移、镜像等),主要是因为模型在大规模数据集上已具备较强的泛化能力。然而,项目中的每一帧图像都会进行逐帧裁剪和检测,确保在不同姿势和光照条件下的人脸都能被准确识别。

4. 模型架构

1. 模型结构逻辑

本项目使用了基于Caffe框架预训练的深度学习模型进行年龄和性别识别,模型主要包括三部分:人脸检测模型、年龄分类模型和性别分类模型。以下是每个模型的架构和功能:

(1) 人脸检测模型

该模型使用了OpenCV提供的基于深度学习的ResNet架构进行人脸检测,网络结构包含多层卷积、池化和全连接层,核心是用来识别图像中存在的人脸区域。输入图像首先经过卷积层(Convolutional Layer),计算公式为:

Z = W ⋅ X + b Z = W \cdot X + b Z=WX+b

其中,W 表示卷积核权重矩阵,X 表示输入图像,b 是偏置项,Z 是经过卷积层后的特征图。之后,通过多层卷积和池化(Pooling)层逐步提取图像特征,并通过全连接层将特征映射到二维坐标空间(Bounding Box的坐标)。该模型输出的格式为:每个人脸的置信度分数以及对应的矩形框(x1, y1, x2, y2)。

(2) 年龄识别模型

年龄识别模型是基于Caffe框架的轻量级卷积神经网络(CNN),网络输入为经过归一化的面部图像,输出为8个类别的概率分布(对应不同的年龄区间)。该模型的主要结构为:

  • 输入层:接收大小为227x227的面部图像。
  • 卷积层1:提取低层次特征(如边缘和纹理),卷积操作公式同上。
  • 池化层(Pooling Layer) :进行降维,减少计算复杂度。
  • 全连接层(Fully Connected Layer) :将特征向量映射到年龄分布概率空间。输出的概率分布计算公式为:

P ( y = j ∣ x ) = exp ⁡ ( W j ⋅ x + b j ) ∑ k = 1 K exp ⁡ ( W k ⋅ x + b k ) P(y=j|x) = \frac{\exp(W_j \cdot x + b_j)}{\sum_{k=1}^{K} \exp(W_k \cdot x + b_k)} P(y=jx)=k=1Kexp(Wkx+bk)exp(Wjx+bj)

其中,Wj和 bj是第j类别的权重和偏置项,P(y=j∣x) 表示输入图像 x 属于第 j 个年龄区间的概率。

(3) 性别识别模型

性别识别模型结构与年龄识别模型类似,但输出为两个类别(男性和女性)。输入的面部图像经过卷积和池化层后,映射到两个输出类别。性别分类采用Softmax层进行概率估计:

P ( y = male ∣ x ) = exp ⁡ ( W male ⋅ x + b male ) exp ⁡ ( W male ⋅ x + b male ) + exp ⁡ ( W female ⋅ x + b female ) P(y=\text{male}|x) = \frac{\exp(W_{\text{male}} \cdot x + b_{\text{male}})}{\exp(W_{\text{male}} \cdot x + b_{\text{male}}) + \exp(W_{\text{female}} \cdot x + b_{\text{female}})} P(y=malex)=exp(Wmalex+bmale)+exp(Wfemalex+bfemale)exp(Wmalex+bmale)

同样,P(y=male∣x)表示输入图像被识别为男性的概率,输出最大概率的类别即为模型的性别预测结果。

2. 模型整体训练流程

虽然项目中使用了预训练模型,但在训练这些模型时通常经历了以下几个步骤:

  1. 数据准备与预处理:从IMDB-WIKI或Adience数据集获取人脸图像,进行裁剪、尺寸缩放、颜色归一化处理。将图像标签进行One-Hot编码(性别二分类,年龄为多类别分类)。

  2. 模型架构设计与初始化:采用轻量级CNN模型,初始化权重参数(使用Xavier或He初始化方法)。

  3. 损失函数选择

    1. 年龄识别:使用交叉熵损失函数(Cross-Entropy Loss),计算类别概率分布与真实标签之间的误差。
  4. L age = − ∑ i = 1 N ∑ j = 1 K y i j ⋅ log ⁡ ( P i j ) L_{\text{age}} = -\sum_{i=1}^{N} \sum_{j=1}^{K} y_{ij} \cdot \log(P_{ij}) Lage=i=1Nj=1Kyijlog(Pij)其中,yij 表示第 i 张图像属于第 j 类别的标签值(0或1),Pij 为模型预测的概率。

    1. 性别识别:采用二分类交叉熵损失,计算性别的分类误差。
  5. 优化器选择:采用Adam或SGD优化器进行反向传播,调整网络权重。学习率初始设定为0.001,并在训练过程中动态衰减。

  6. 训练过程:通过前向传播计算损失值,再进行反向传播更新权重。每次迭代时计算训练集的准确率,并记录验证集的性能,防止过拟合。

  7. 模型评估指标

    1. 准确率(Accuracy) :用于衡量模型对性别和年龄预测的整体性能。
    2. 混淆矩阵(Confusion Matrix) :衡量每个类别的分类效果。
    3. 平均绝对误差(Mean Absolute Error, MAE) :用于评估年龄预测的连续误差。

通过这些流程,模型能够逐步提升在性别和年龄分类任务中的性能,确保在不同应用场景下均能保持较高的准确性。

5. 核心代码详细讲解

1. 数据预处理与人脸检测
def getFaceBox(net, frame, conf_threshold=0.7):
    frameOpencvDnn = frame.copy()
    frameHeight = frameOpencvDnn.shape[0]
    frameWidth = frameOpencvDnn.shape[1]
    blob = cv.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 117, 123], True, False)
  • def getFaceBox(net, frame, conf_threshold=0.7): 定义了一个名为 getFaceBox 的函数,用于通过预训练的人脸检测网络 (net) 从输入帧图像 (frame) 中检测人脸。conf_threshold 参数指定了用于过滤低置信度检测框的阈值(默认为0.7)。

  • frameOpencvDnn = frame.copy(): 复制输入的帧图像,确保不会在原始图像上进行操作。

  • frameHeight = frameOpencvDnn.shape[0] & frameWidth = frameOpencvDnn.shape[1]: 分别获取输入图像的高度和宽度,用于后续计算边界框坐标。

  • blob = cv.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 117, 123], True, False):

    • 使用 cv.dnn.blobFromImage 函数将输入图像转换为OpenCV DNN(深度神经网络)模块可以处理的格式。这个函数的作用是进行图像的预处理操作,将图像归一化,并调整输入数据格式。
    • 1.0 是缩放比例(scale factor),表示不缩放。
    • (300, 300) 是目标输入图像的尺寸,即将图像调整到 300x300 大小。
    • [104, 117, 123] 是各个通道(BGR)所需减去的均值,用来标准化输入数据。
    • True 参数表示是否将颜色通道从 RGB 转换为 BGR 格式(OpenCV 的标准格式)。
    • False 表示不进行图像裁剪(crop)。
2. 模型输入与检测结果的处理

net.setInput(blob) ``detections = net.forward()

  • net.setInput(blob): 将预处理后的输入图像 blob 送入深度神经网络 net 中,以便进行前向传播(forward pass)计算。
  • detections = net.forward(): 调用网络的 forward 方法,获取网络的检测结果。detections 是一个包含检测到的所有边界框、类别置信度等信息的矩阵。
3. 边界框坐标解析与过滤
bboxes = []
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)
        bboxes.append([x1, y1, x2, y2])
  • bboxes = []: 初始化一个空列表,用于存储所有检测到的边界框。
  • for i in range(detections.shape[2]): 遍历检测结果中的每个检测项。detections.shape[2] 表示检测到的目标数量。
  • confidence = detections[0, 0, i, 2]: 获取当前检测框的置信度分数(confidence score)。detections[0, 0, i, 2] 表示第 i 个检测结果的置信度。
  • if confidence > conf_threshold: 仅保留置信度分数大于阈值的检测结果(过滤掉置信度较低的检测框)。
  • x1 = int(detections[0, 0, i, 3] * frameWidth)y1 = int(detections[0, 0, i, 4] * frameHeight): 计算左上角坐标 (x1, y1) 的像素位置,原始检测结果是比例值,需要乘以图像的宽度和高度来获得实际坐标。
  • x2 = int(detections[0, 0, i, 5] * frameWidth)y2 = int(detections[0, 0, i, 6] * frameHeight): 计算右下角坐标 (x2, y2)。
  • bboxes.append([x1, y1, x2, y2]): 将边界框的坐标信息(x1, y1, x2, y2)加入 bboxes 列表中,供后续绘制与处理。
4. 性别和年龄的预测
face = frame[max(0,bbox[1]-padding):min(bbox[3]+padding,frame.shape[0]-1), max(0,bbox[0]-padding):min(bbox[2]+padding, frame.shape[1]-1)]
blob = cv.dnn.blobFromImage(face, 1.0, (227, 227), MODEL_MEAN_VALUES, swapRB=False)
genderNet.setInput(blob)
genderPreds = genderNet.forward()
gender = genderList[genderPreds[0].argmax()]
  • face = frame[...: 裁剪出人脸区域。使用 bbox 中保存的边界框坐标,对原始图像 frame 进行裁剪。maxmin 函数用于防止越界。
  • blob = cv.dnn.blobFromImage(face, 1.0, (227, 227), MODEL_MEAN_VALUES, swapRB=False): 对裁剪后的人脸图像进行预处理,生成大小为 227x227 的 blob 输入数据。MODEL_MEAN_VALUES 是(78.4263377603, 87.7689143744, 114.895847746),即模型的预设均值,用于标准化输入数据。
  • genderNet.setInput(blob): 将人脸数据 blob 输入到性别分类网络 genderNet 中。
  • genderPreds = genderNet.forward(): 执行前向传播,输出性别的预测结果。genderPreds 是一个大小为 [1, 2] 的向量,表示预测为男性或女性的概率。
  • gender = genderList[genderPreds[0].argmax()]: 使用 argmax() 方法获取预测概率最大的类别索引,并转换为性别字符串(“Male” 或 “Female”)。
5. 结果显示
cv.putText(frameFace, label, (bbox[0], bbox[1]-10), cv.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 255), 2, cv.LINE_AA)
cv.imshow("Age Gender Demo", frameFace)
  • cv.putText(frameFace, label, (bbox[0], bbox[1]-10), ...): 在检测到的人脸上方显示性别与年龄标签(label)。(bbox[0], bbox[1]-10) 表示文本显示的起始坐标。cv.FONT_HERSHEY_SIMPLEX 是字体类型,0.8 为字体大小,(0, 255, 255) 是黄色字体颜色,2 是文本粗细,cv.LINE_AA 是反锯齿线条类型。
  • cv.imshow("Age Gender Demo", frameFace): 在OpenCV窗口中显示处理后的视频帧。

6. 模型优缺点评价

模型优点

  1. 高效的多任务集成:项目通过结合人脸检测、性别分类和年龄预测模型,能够在一个流程中实现多种识别任务,节省了计算开销,并确保了任务的高效性。
  2. 实时性较好:该项目使用了OpenCV的DNN模块,能够在CPU和GPU上灵活切换。通过CUDA优化实现了GPU加速,使模型可以在实时场景中进行流畅的视频推理,提升了实际应用效果。
  3. 预训练模型泛化能力强:使用IMDB-WIKI和Adience等大规模数据集训练的模型,具有良好的泛化能力,能够在不同场景、不同光照条件下准确预测性别和年龄。

模型缺点

  1. 精度有限:模型使用了轻量级的深度学习网络,虽然适合实时性,但在复杂的年龄段(如中年和老年)分类上存在较大的误差。此外,性别分类可能受光照、遮挡和面部表情的影响而不稳定。
  2. 鲁棒性不足:该模型在处理非标准人脸(如侧脸、低分辨率、过度曝光)时可能存在较高的误检率和漏检率。
  3. 模型规模较小:模型的复杂度较低,可能无法充分提取深层次的图像特征,从而影响其在不同人种、特殊年龄段上的表现。

可能的模型改进方向

  1. 引入更深的神经网络架构:可以尝试使用ResNet、MobileNet等更深或更复杂的网络结构,以提升模型的特征提取能力,从而提升预测精度。
  2. 增加数据增强策略:在训练数据上引入更多的数据增强方法,如随机旋转、水平翻转、亮度调节等,增强模型对各种非理想条件的适应性。
  3. 超参数优化:可以通过调整学习率、权重初始化、优化器选择等方法来改善模型的收敛速度与最终精度。
    通过这些优化,可以提升模型的准确率和鲁棒性,使其更好地应对复杂的实际场景。

↓↓↓更多热门推荐:
LSTM预测未来30天销售额
基于小波变换与稀疏表示优化的RIE数据深度学习预测模型

全部项目数据集、代码、教程进入官网zzgcz.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2178370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

842真题上的各种简答题

线性表 1. 应选用链式存储结构,因为链式存储结构采取动态内存分配,可以在操作过程中增加或减少线性表的长度,且插入删除操作更方便 2应该选用顺序存储结构,因为顺序存储结构的访问和存取,都是按照元素序号的随机访问…

VisualGLM-6B——原理与部署

VisualGLM-6B技术原理介绍 VisualGLM-6B 是一种多模态预训练模型,它旨在将视觉和语言模型进行结合,使得语言模型能够理解图像信息并与文本对话无缝结合。为了更好地理解 VisualGLM-6B 的内容,我们可以从以下几个方面来解析它的原理、结构、训…

基于springboot+小程序的自习室选座与门禁管理系统(自习室1)(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 1、管理员实现了首页、基础数据管理、论坛管理、公告信息管理、用户管理、座位管理等 2、用户实现了在论坛模块通过发帖与评论帖子的方式进行信息讨论,也能对账户进行在线充值…

低代码可视化-uniapp蓝牙标签打印-代码生成器

蓝牙标签打印 蓝牙标签打印技术结合了蓝牙通信与标签打印的功能,为用户提供了一种便捷、高效的打印解决方案。以下是对蓝牙标签打印的详细解析: 蓝牙标签打印机的特点 无线连接:蓝牙标签打印机最大的亮点在于其无线连接方式。用户可以通过蓝…

【Redis基础篇】超详细♥Redis安装教程、5种常用数据结构和常见命令、Jedis和SpringDataRedis的使用

文章目录 一、Redis与客户端安装教程1、NoSQL介绍(1)结构化与非结构化(2)关联和非关联(3)查询方式(4)事务(5)总结 2、Redis介绍3、安装Redis(1&am…

毕业论文设计javaweb+VUE高校教师信息管理系统

目录 一、系统概述 二、功能详解 1. 教师管理 2. 部门管理 3. 奖惩管理 4. 业绩管理 5. 培训管理 6. 报表查询 三、总结 四、示例代码 1 前端VUE 2 后端SpringBootjava 3 数据库表 随着教育信息化的发展,传统的手工管理方式已经不能满足现代学校对教师…

Python安装流程(Windows + MAC)

目录 Windows 版 1.下载Python 2.开始安装 3.配置环境变量 4.测试python是否成功安装 MAC版 1.下载Python 2.开始安装 Windows 版 1.下载Python 进入Python官网下载:(Python更新频繁,下载最新版即可,安装流程一致&#x…

打印机共享错误11b解决方法介绍

共享打印机遇见各种错误,例如0x00000709,0x0000011b,浪费大量的时间去尝试各种方法去解决此问题,最终结果还是也连接共享失败?这个时候就说是不是系统有问题了,绝大多数的情况下是把电脑的系统重新安装了一遍&#xff…

前端工程规范-4:Git提交前代码规范检查(Husky + Lint-staged)

Git提交前代码规范检查 在前端项目开发中,规范git提交信息,也是经常使用的手段,如何确保团队成员都遵循ESint规则,且不会将不符合规范的代码推送到Git仓库? 答案是:使用带有git hooks功能的husky。git hoo…

文心一言 VS 讯飞星火 VS chatgpt (357)-- 算法导论24.2 3题

三、上面描述的 PERT 图的公式有一点不太自然。在一个更自然的结构下,图中的结点代表要执行的工作,边代表工作之间的次序限制,即边 (u,v) 表示工作 u 必须在工作 v 之前执行。在这种结构的图中,我们将权重赋给结点&…

SQL中基本SELECT语句及常见关键字的使用(内连接,左/右连接)

这里写目录标题 SQL中基本SELECT语句的使用SQL语法简介DDL、DML、DCLSEECT SELECT常用关键词group by分组having筛选limit限定条数UION和UION ALL合并SQL执行顺序 联表查询多表查询示例特殊用法:笛卡尔积(交叉连接)等值连接vs非等值连接自连接…

ResNet18果蔬图像识别分类

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色…

接口隔离原则(学习笔记)

客户端不应该被迫依赖于它不使用的方法:一个类对另一个类的依赖应该建立在最小的接口上。 上面的设计我们发现他存在的问题,黑马品牌的安全门具有防盗,防水,防火的功能。现在如果我们还需要再创建一盒传智品牌的安全门&#xff0c…

王道-计网

2 采用滑动窗口机制对两个相邻结点A(发送方)和B(接收方)的通信过程进行流量控制。假定帧的序号长度为3比特,发送窗口与接收窗口的大小均为7,当A发送了编号为0、1、2、3这4个帧后,而B接收了这4个帧,但仅应答了0、1两个帧,A继续发送4、5两个帧,且这两个帧已进入B的接收…

Oracle 表空间时间点恢复

已有一个数据库全备,在PDB中恢复被drop掉的表空间 1.新建表空间 create tablespace PITR_TBS datafile /u01/app/oracle/oradata/PRODCDB/PDBPROD2/PITR_TBS01.dbf size 10m; 2.使用RMAN备份. backup as compressed backupset database INCLUDE CURRENT CONTROLFI…

秘AI模型登顶评分网站:网友猜测是F.1新作诞生?

神秘的 AI 生成模型 就在近日,有一个“幽灵模型”直接登顶了模型评测网站,直接力压近期爆火的 Flux.1 等一众模型。但奇怪的是这个名为 Blueberry 的模型却没有任何一家公司或团队出来“认领”。这件事情也引发了众多人的讨论。 疑似 Flux 团队续作 幽灵…

ADRC线性跟踪微分器TD详细测试(Simulink 算法框图+CODESYS ST+博途SCL完整源代码)

1、ADRC线性跟踪微分器 ADRC线性跟踪微分器(ST+SCL语言)_adrc算法在博途编程中scl语言-CSDN博客文章浏览阅读784次。本文介绍了ADRC线性跟踪微分器的算法和源代码,包括在SMART PLC和H5U平台上的实现。文章提供了ST和SCL语言的详细代码,并讨论了跟踪微分器在自动控制中的作用…

【车载开发系列】ParaSoft单元测试环境配置(四)

【车载开发系列】ParaSoft单元测试环境配置(四) 【车载开发系列】ParaSoft单元测试环境配置(四) 【车载开发系列】ParaSoft单元测试环境配置(四)一. 如何设置过滤二. 如何设置静态扫描的规则三. 如何设置单个测试用例的超时时间四. 如何获取测试用例的数量五. 如何设置Gc…

数字图像处理:边缘检测

数字图像处理:边缘检测 笔记来源: 1.Gradient and Laplacian Filter, Difference of Gaussians (DOG) 1.1 图像一阶梯度 水平方向的一阶导数 一阶导数滤波器在实际应用中难实现的原因 图像梯度中,一阶梯度中找局部极大值就是边缘所在处&a…

2、Stable Diffusion

2、Stable Diffusion Stable Diffusion 是一种高效的文本到图像生成模型,它利用扩散模型(Diffusion Model)技术将自然语言描述转换为高质量的图像。其工作原理是通过反向扩散过程,逐渐将噪声引导到符合输入文本描述的图像上。相比…