使用OpenCV 和Dlib 实现表情识别
文章目录
- 引言
- 1.代码主要概述
- 2.代码解析
- 2.1 面部特征计算函数
- (1) 嘴部宽高比(MAR)
- (2) 嘴宽与脸颊宽比值(MJR)
- (3) 眼睛纵横比(EAR)
- (4) 眉毛弯曲比(EBR)
- 2.2 自定义函数显示中文
- 2.3 表情分类逻辑
- 2.4 实时视频处理
- 3.系统特点
- 4.总结
引言
面部表情是人类情感交流的重要方式,计算机视觉技术的发展使得机器能够自动识别和理解人类表情。本文将介绍一个基于dlib库和OpenCV实现的实时表情识别系统,该系统通过分析面部关键点来计算嘴部、眼睛和眉毛的特征,进而判断当前的表情状态(如大笑、微笑、愤怒、哭泣等)。
1.代码主要概述
该系统主要包含以下几个功能模块:
- 面部关键点检测
- 四种面部特征计算
- 表情分类逻辑
- 实时视频处理与结果显示
2.代码解析
2.1 面部特征计算函数
系统定义了四个核心函数来计算不同的面部特征:
(1) 嘴部宽高比(MAR)
def MAR(shape): # 计算嘴的宽高比A = euclidean_distances(shape[50].reshape(1,2),shape[58].reshape(1,2))B = euclidean_distances(shape[51].reshape(1,2),shape[57].reshape(1,2))C = euclidean_distances(shape[52].reshape(1,2),shape[56].reshape(1,2))D = euclidean_distances(shape[48].reshape(1,2),shape[54].reshape(1,2))return ((A+B+C)/3)/D
这段代码定义了一个名为 MAR 的函数,用于计算嘴部的宽高比(Mouth Aspect Ratio)。这个比例通常用于面部特征分析,比如检测嘴巴是否张开等。下面是对代码的逐步解释:
假设 shape 是一个包含68个面部关键点的数组(这是dlib等面部检测库的常见输出),那么:
- 点48到54是嘴巴的外轮廓点。
- 点50、51、52是上嘴唇的点。
- 点56、57、58是下嘴唇的点。
-
计算高度(A、B、C):
- A :点50和点58之间的欧氏距离(上嘴唇中点到下嘴唇中点)。
- B :点51和点57之间的欧氏距离(上嘴唇左侧点到下嘴唇左侧点)。
- C :点52和点56之间的欧氏距离(上嘴唇右侧点到下嘴唇右侧点)。
- (A+B+C)/3 :计算这三个高度的平均值。
-
计算宽度(D):
- D :点48和点54之间的欧氏距离(嘴巴左角到右角)。
-
宽高比:
- 最终的 MAR 是高度的平均值除以宽度:((A+B+C)/3)/D 。
细节部分
- euclidean_distances 是计算两点之间欧氏距离的函数。
- reshape(1,2) 是为了确保输入的坐标是二维的(将数据转换为 [[x, y]] ,以满足 euclidean_distances 的输入要求)。
返回值 :
- 返回的是嘴的宽高比。这个值越小,表示嘴巴越闭合;越大,表示嘴巴越张开。
(2) 嘴宽与脸颊宽比值(MJR)
def MJR(shape): # 计算嘴宽度、脸颊宽度的比值M = euclidean_distances(shape[48].reshape(1,2),shape[54].reshape(1,2)) # 嘴宽度J = euclidean_distances(shape[3].reshape(1,2),shape[13].reshape(1,2)) # 下颌的宽度return M/J
这段代码定义了一个名为 MJR(Mouth-to-Jaw Ratio)的函数,用于计算嘴部宽度与下颌宽度的比值,这是面部表情分析中常用的一个特征指标。以下是对代码的详细解析:
函数功能
- 输入:shape(一个包含68个面部关键点坐标的数组,通常来自dlib库的检测结果)。
- 输出:嘴部宽度与下颌宽度的比值(浮点数),用于量化嘴部相对于面部宽度的张开程度。
关键点定位
代码使用了68点面部关键点模型中的特定点:
-
嘴宽(M):
- shape[48]:嘴巴左外角
- shape[54]:嘴巴右外角
- 计算这两点之间的直线距离(欧氏距离),得到嘴的物理宽度。
-
下颌宽(J):
- shape[3]:左下颌角(靠近耳朵下方)
- shape[13]:右下颌角
- 计算这两点距离,代表脸颊的大致宽度。
数学表达
- 比值意义:
- ≈0.3~0.4:自然闭合状态
- >0.45:微笑(嘴角横向拉伸)
- 接近0.5~0.6:大笑或惊讶(嘴部明显张开)
- >1:检测异常或极端表情(罕见)
代码细节
- euclidean_distances:计算两点之间的欧式距离(直线距离)。
- reshape(1,2):将坐标从**[x,y]转换为[[x,y]]**格式,满足函数输入要求。
实际应用
- 微笑检测(如原代码中的判断逻辑):
if mjr > 0.45: # 阈值可调result = "微笑"
- 与其他指标配合:
结合MAR(嘴高比)、EAR(眼睛纵横比)等,可更准确识别复杂表情(如大笑、愤怒)。
示例计算
假设检测到:
-
嘴宽 M = 50像素
-
下颌宽 J = 120像素
则:
-
若阈值为0.45,判定为自然状态;
-
若微笑时嘴宽增至60像素,则MJR=0.5,触发微笑判断。
(3) 眼睛纵横比(EAR)
def EAR(shape):# 左眼A = euclidean_distances(shape[37].reshape(1, 2), shape[41].reshape(1, 2))B = euclidean_distances(shape[38].reshape(1, 2), shape[40].reshape(1, 2))C = euclidean_distances(shape[36].reshape(1, 2), shape[39].reshape(1, 2))ear_left = (A + B) / (2.0 * C)# 右眼A = euclidean_distances(shape[43].reshape(1, 2), shape[47].reshape(1, 2))B = euclidean_distances(shape[44].reshape(1, 2), shape[46].reshape(1, 2))C = euclidean_distances(shape[42].reshape(1, 2), shape[45].reshape(1, 2))ear_right = (A + B) / (2.0 * C)return (ear_left + ear_right) / 2.0
这段代码定义了一个名为 EAR的函数,用于计算眼睛纵横比(Eye Aspect Ratio, EAR),这是一种常用于检测眼睛是否闭合或疲劳的方法。下面是对代码的逐步解析:
- shape 是一个包含68个面部关键点的数组(通常由 dlib 等面部检测库生成),其中:
- 左眼的点索引是 36-41。
- 右眼的点索引是 42-47。
左眼 EAR 计算
A = euclidean_distances(shape[37].reshape(1, 2), shape[41].reshape(1, 2)) # 37-41 的垂直距离
B = euclidean_distances(shape[38].reshape(1, 2), shape[40].reshape(1, 2)) # 38-40 的垂直距离
C = euclidean_distances(shape[36].reshape(1, 2), shape[39].reshape(1, 2)) # 36-39 的水平距离
ear_left = (A + B) / (2.0 * C)
- A:计算左眼上眼皮(点37)和下眼皮(点41)之间的垂直距离。
- B:计算左眼上眼皮(点38)和下眼皮(点40)之间的垂直距离。
- C:计算左眼外眼角(点36)和内眼角(点39)之间的水平距离。
- ear_left:计算左眼的纵横比,公式为:
右眼 EAR 计算
A = euclidean_distances(shape[43].reshape(1, 2), shape[47].reshape(1, 2)) # 43-47 的垂直距离
B = euclidean_distances(shape[44].reshape(1, 2), shape[46].reshape(1, 2)) # 44-46 的垂直距离
C = euclidean_distances(shape[42].reshape(1, 2), shape[45].reshape(1, 2)) # 42-45 的水平距离
ear_right = (A + B) / (2.0 * C)
- 同理,计算右眼的纵横比:
最终 EAR
return (ear_left + ear_right) / 2.0
- 返回左右眼 EAR 的平均值,使结果更稳定。
EAR 的意义
- EAR ≈ 0.3(或更高):眼睛睁开。
- EAR ≈ 0.2 或更低:眼睛闭合(或半闭)。
- 连续几帧 EAR < 阈值:可能表示疲劳、眨眼或打瞌睡。
关键点图示
左眼关键点(36-41):
36 —— 37 —— 38
| | |
39 —— 40 —— 41右眼关键点(42-47):
42 —— 43 —— 44
| | |
45 —— 46 —— 47
- 垂直距离(A、B):37-41、38-40(左眼);43-47、44-46(右眼)。
- 水平距离(C):36-39(左眼);42-45(右眼)。
总结
这段代码通过计算眼睛关键点的垂直和水平距离比,量化眼睛的睁开程度,适用于实时面部行为分析。
(4) 眉毛弯曲比(EBR)
def EBR(shape): # 计算眉毛的弯曲程度# 左眉弯曲度left_eyebrow = shape[17:22]left_eyebrow_hull = cv2.convexHull(left_eyebrow)left_eyebrow_length = euclidean_distances(left_eyebrow[0].reshape(1, 2), left_eyebrow[-1].reshape(1, 2))left_eyebrow_height = cv2.contourArea(left_eyebrow_hull) / left_eyebrow_length# 右眉弯曲度right_eyebrow = shape[22:27]right_eyebrow_hull = cv2.convexHull(right_eyebrow)right_eyebrow_length = euclidean_distances(right_eyebrow[0].reshape(1, 2), right_eyebrow[-1].reshape(1, 2))right_eyebrow_height = cv2.contourArea(right_eyebrow_hull) / right_eyebrow_lengthreturn (left_eyebrow_height + right_eyebrow_height) / 2.0
这段代码定义了一个名为 EBR(Eyebrow Bend Ratio,眉毛弯曲比)的函数,用于计算眉毛的弯曲程度,通常用于检测愤怒、皱眉或惊讶等面部表情。下面是对代码的逐步解析:
- shape 是一个包含68个面部关键点的数组(通常由 dlib 等面部检测库生成),其中:
- 左眉的点索引是 17-21(代码中 shape[17:22] 表示 17-21)
- 右眉的点索引是 22-26(代码中 shape[22:27] 表示 22-26)
左眉弯曲度计算
left_eyebrow = shape[17:22] # 提取左眉5个关键点
left_eyebrow_hull = cv2.convexHull(left_eyebrow) # 计算凸包(包围眉毛的最小凸多边形)
left_eyebrow_length = euclidean_distances(left_eyebrow[0].reshape(1, 2), left_eyebrow[-1].reshape(1, 2)) # 眉毛长度(首尾点距离)
left_eyebrow_height = cv2.contourArea(left_eyebrow_hull) / left_eyebrow_length # 弯曲高度 = 凸包面积 / 眉毛长度
- 提取左眉关键点:shape[17:22] 获取左眉的5个点(17-21)。
- 计算凸包:cv2.convexHull 返回包围眉毛的最小凸多边形(用于近似眉毛形状)。
- 眉毛长度:计算左眉起点(点17)和终点(点21)之间的欧氏距离。
- 弯曲高度:
- cv2.contourArea 计算凸包的面积(反映眉毛的“隆起程度”)。
- 公式:弯曲高度 = 凸包面积 / 眉毛长度
(值越大,眉毛越弯曲,可能表示愤怒或皱眉)。
右眉弯曲度计算
right_eyebrow = shape[22:27] # 提取右眉5个关键点
right_eyebrow_hull = cv2.convexHull(right_eyebrow) # 计算凸包
right_eyebrow_length = euclidean_distances(right_eyebrow[0].reshape(1, 2), right_eyebrow[-1].reshape(1, 2)) # 眉毛长度
right_eyebrow_height = cv2.contourArea(right_eyebrow_hull) / right_eyebrow_length # 弯曲高度
- 右眉的计算逻辑与左眉完全相同(点22-26)。
最终 EBR
return (left_eyebrow_height + right_eyebrow_height) / 2.0
- 返回左右眉弯曲高度的平均值,使结果更稳定。
EBR 的意义
- EBR 值高:眉毛弯曲明显(可能表示愤怒、惊讶或集中注意力)。
- EBR 值低:眉毛平直(自然状态)。
关键点图示
左眉关键点(17-21):
17 —— 18 —— 19 —— 20 —— 21右眉关键点(22-26):
22 —— 23 —— 24 —— 25 —— 26
- 眉毛长度:17到21(左眉)、22到26(右眉)的直线距离。
- 凸包面积:反映眉毛的弯曲程度(面积越大,弯曲越明显)。
2.2 自定义函数显示中文
def cv2AddChineseText(img,text,position,textColor=(0,255,0),textSize=30):"""向图片中添加中文"""if (isinstance(img,np.ndarray)): # 判断是否OpenCV图片类型img = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB)) # 实现array到image的转换draw = ImageDraw.Draw(img) # 在img图片上创建一个绘图的对象# 字体的格式fontStyle = ImageFont.truetype("simsun.ttc",textSize,encoding="utf-8")draw.text(position,text,textColor,font=fontStyle) # 绘制文本return cv2.cvtColor(np.asarray(img),cv2.COLOR_BGR2RGB) # 转换回OpenCV格式
2.3 表情分类逻辑
系统使用简单的阈值判断来分类表情:
result = "正常" # 默认表情# 大笑检测:嘴部高度比较高
if mar > 0.5:result = "大笑"
# 微笑检测:嘴部高度比较宽但高度不高
elif mjr > 0.45:result = "微笑"
# 愤怒检测: 眉毛弯曲度高且眼睛稍微闭合
elif ebr > 0.08 and ear < 0.25:result = "愤怒"
# 哭检测: 嘴部较宽但不高,眼睛闭合或半闭合
elif mar < 0.3 and mjr > 0.4 and ear < 0.2:result = "哭泣"
2.4 实时视频处理
系统通过OpenCV捕获摄像头视频流,并对每一帧进行处理:
cap = cv2.VideoCapture(0)
while True:ret, frame = cap.read()faces = detector(frame, 0) # 检测人脸for face in faces:shape = predictor(frame, face) # 获取关键点shape = np.array([[p.x, p.y] for p in shape.parts()]) # 转换为坐标# 计算各种特征mar = MAR(shape)mjr = MJR(shape)ebr = EBR(shape)ear = EAR(shape)result = "正常" # 默认是正常表情# 大笑检测:嘴部高度比较高if mar > 0.5: # 可更具项目要求调整阈值result = "大笑"# 微笑检测:嘴部高度比较宽但高度不高elif mjr > 0.45: #超过阈值为微笑result = "微笑"# 愤怒检测: 眉毛弯曲度高且眼睛稍微闭合elif ebr > 0.08 and ear < 0.25:result = "愤怒"# 哭检测: 嘴部较宽但不高(嘴角下拉), 眼睛闭合或半闭合elif mar < 0.3 and mjr > 0.4 and ear < 0.2:result = "哭泣"# 绘制嘴部轮廓mouthHull = cv2.convexHull(shape[48:61]) # 嘴型构造凸包# 绘制眉毛轮廓leftEyebrowHull = cv2.convexHull(shape[17:22])rightEyebrowHull = cv2.convexHull(shape[22:27])frame = cv2AddChineseText(frame,result,mouthHull[0,0]) #多人脸cv2.drawContours(frame,[mouthHull],-1,(0,255,0),1)cv2.drawContours(frame,[leftEyebrowHull],-1,(0,255,0),1)cv2.drawContours(frame,[rightEyebrowHull],-1,(0,255,0),1)cv2.imshow("表情识别",frame)if cv2.waitKey(1) == 27:break
cv2.destroyAllWindows()
cap.release() # 增加几项表情的检测能力,哭、愤怒
3.系统特点
- 实时性:能够实时处理摄像头视频流
- 多表情识别:可识别大笑、微笑、愤怒、哭泣等多种表情
- 可视化反馈:在视频画面上直观显示识别结果和面部轮廓
- 中文支持:使用自定义函数实现中文文本显示
4.总结
本文介绍了一个基于面部关键点的实时表情识别系统,该系统通过计算嘴部、眼睛和眉毛的特征参数,使用简单的阈值判断实现了基本表情分类。虽然相对简单,但展示了计算机视觉在情感识别领域的典型应用方法。读者可以在此基础上进一步扩展和完善,开发出更强大的表情识别应用。
完整代码已在上文给出,建议读者实际运行体验,并根据需要调整阈值参数以获得更好的识别效果。
因为有目标,所以一切皆有可能。竭尽全力,才能知道自己有多出色。加油各位! 🚀🚀🚀
相关文章:
使用OpenCV 和Dlib 实现表情识别
文章目录 引言1.代码主要概述2.代码解析2.1 面部特征计算函数(1) 嘴部宽高比(MAR)(2) 嘴宽与脸颊宽比值(MJR)(3) 眼睛纵横比(EAR)(4) 眉毛弯曲比(EBR) 2.2 自定义函数显示中文2.3 表情分类逻辑2.4 实时视频处理 3.系统特点4.总结 引言 面部表情是人类情感交流的重要方式&#…...
Matplotlib 饼图
pie():绘制饼图 Matplotlib 直方图 我们也可以结合 Pandas 来绘制直方图 除了数据框之外,我们还可以使用 Pandas 中的 Series 对象绘制直方图。只需将数据框中的列替换为 Series 对象 Matplotlib imshow() imshow() 可以显示灰度图像 imshow() 可以显示彩…...
区块链交易所开发:开启数字交易新时代
区块链交易所开发:开启数字交易新时代 ——2025年技术革新与万亿级市场的破局指南 一、区块链交易所的颠覆性价值 1️⃣ 去中心化革命终结数据霸权 区块链交易所通过分布式账本技术,将交易数据存储于全网节点,彻底消除中心化服务器宕机、跑路…...
ChatGPT对话导出工具-轻松提取聊天记录导出至本地[特殊字符]安装指南
1、edge浏览器安装tampermonkey插件 Edge浏览器安装:https://microsoftedge.microsoft.com/addons/detail/%E7%AF%A1%E6%94%B9%E7%8C%B4/iikmkjmpaadaobahmlepeloendndfphd 其他浏览器安装:https://www.tampermonkey.net/index.php?browserchrome 2、…...
k8s node soft lockup (内核软死锁) 优化方案
在 Kubernetes 环境中,Node 节点的内核软死锁(soft lockup)是一个严重的稳定性问题,可能导致节点无响应、Pod 调度失败甚至数据丢失。以下是针对该问题的优化策略和解决方案: 一、临时缓解措施 1. 调整内核 watchdog…...
【LDM】视觉自回归建模:通过Next-Scale预测生成可扩展图像(NeurIPS2024最佳论文阅读笔记与吃瓜)
【LDM】视觉自回归建模:通过Next-Scale预测生成可扩展图像(NeurIPS2024最佳论文阅读笔记与吃瓜) 《Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction》 视觉自回归建模:通过Next-Scale预测…...
计算机网络-传输层
一、概述 1、逻辑通信:对等层之间的通信好像是沿着水平方向传送的,但两个对等层之间并没有一条水平方向的物理连接。 2、复用与分用 2.1传输层 复用:发送方不同的应用进程可以使用同一传输层协议传送数据 分用:接收方的传输层…...
MacOS+VSCODE 安装esp-adf详细流程
安装python3,省略vscode安装ESP-IDF插件,选择v5.2.5 版本,电脑需要能够访问github,esp-idf安装后的默认目录是: /Users/***/esp/v5.2.5/esp-idf# 启动***为省略名称在/Users/***/esp/ 目录下使用git clone 下载 esp-adf # 国内用…...
2025年5月HCIP题库(带解析)
某个ACL规则如下:则下列哪些IP地址可以被permit规则匹配: rule 5 permit ip source 10.0.2.0 0.0.254.255 A、10.0.4.5 B、10.0.5.6 C、10.0.6.7 D、10.0.2.1 试题答案:A;C;D 试题解析: 10.0.2.000001010.00000000.00000010.0000000…...
【Linux系统】vim编辑器的使用
文章目录 一、vim编辑器的简单介绍二、vim的一键化配置方案(目前只支持 Centos7 x86_64)三、vim编辑器在各模式下的操作1.vim的使用 以及 各模式间的切换2.普通模式(Normal Mode,初始默认处于该模式)3.替换模式&#x…...
网站主机控制面板深度解析:cPanel、Plesk 及其他主流选择
网站主机控制面板深度解析:cPanel、Plesk 及其他主流选择 在网站管理和服务器维护的领域,一个强大且易用的控制面板至关重要。它们能够将复杂的技术命令转化为直观的图形界面,极大简化了网站管理员的工作。本文将为您详细介绍市面上几款主流…...
【程序员AI入门:应用】7.LangChain是什么?
LangChain作为当前最热门的AI应用开发框架,正在重塑大语言模型(LLM)的应用生态。其核心价值在于解耦LLM能力与工程实现,构建起连接智能模型与现实世界的"神经网络"。 一、核心定位:AI应用的"操作系统&q…...
jenkins访问端口调整成80端口
使用 Nginx 反向代理解决以上问题,这样可以: 1. 保持 Jenkins 在其他端口(博主使用8090端口) 稳定运行 2. 通过 Nginx 将 80 端口的请求转发到 Jenkins 3. 更安全,因为 Jenkins 不需要直接监听 80 端口 4. 后续如果…...
如何从服务器日志中分析是否被黑客攻击?
一、关键日志文件定位与攻击特征分析 1. 核心日志文件路径 Web 服务器日志: Nginx:/var/log/nginx/access.log(访问日志)、/var/log/nginx/error.log(错误日志) Apache:/var/log/apache2/…...
[250504] Moonshot AI 发布 Kimi-Audio:开源通用音频大模型,驱动多模态 AI 新浪潮
目录 Moonshot AI 发布 Kimi-Audio:开源音频基础模型,赋能音频理解、生成与对话新时代核心能力与特性技术基础开放资源与评估行业意义 Moonshot AI 发布 Kimi-Audio:开源音频基础模型,赋能音频理解、生成与对话新时代 Moonshot A…...
OpenCV 图形API(77)图像与通道拼接函数-----对图像进行几何变换函数remap()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对图像应用一个通用的几何变换。 函数 remap 使用指定的映射对源图像进行变换: dst ( x , y ) src ( m a p x ( x , y ) , m a p y…...
理清缓存穿透、缓存击穿、缓存雪崩、缓存不一致的本质与解决方案
在构建高性能系统中,缓存(如Redis) 是不可或缺的关键组件,它大幅减轻了数据库压力、加快了响应速度。然而,在高并发环境下,缓存也可能带来一系列棘手的问题,如:缓存穿透、缓存击穿、…...
Jetpack Compose 自定义 Slider 完全指南
自定义 Compose Slider 在 Jetpack Compose 中,你可以通过多种方式自定义 Slider 组件。以下是一些常见的自定义方法: 基本自定义 var sliderPosition by remember { mutableStateOf(0f) }Slider(value sliderPosition,onValueChange { sliderPosit…...
荣耀A8互动娱乐组件部署实录(终章:后台配置系统与整体架构总结)
作者:被配置文件的“开关参数”折磨过无数次的运维兼后端工 一、后台系统架构概述 荣耀A8组件后台采用 PHP 构建,配合 MySQL 数据库与 Redis 缓存系统,整体结构遵循简化版的 MVC 模式。后台主要实现以下核心功能: 系统参数调控与配置热更新 用户管理(封号、授权、角色) …...
本地文件批量切片处理与大模型精准交互系统开发指南
本地文件批量切片处理与大模型精准交互系统开发指南 一、系统架构设计 #mermaid-svg-yCbT2xBukW6iX98y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yCbT2xBukW6iX98y .error-icon{fill:#552222;}#mermaid-svg-y…...
homebrew安装配置Python(MAC版)
Mac系统自带python路径为: /System/Library/Frameworks/Python.framework/Versionbrew 安装 Python3 在终端输入以下命令: brew search python3 # 查看支持安装的版本 brew install python3就可以轻松easy安装python了,安装完成后提示 查看 pyth…...
STM32--RCC--时钟
教程 系统时钟 RCC RCC(Reset and Clock Control)是STM32微控制器中管理时钟和复位系统的关键外设模块,负责整个芯片的时钟树配置和复位控制。 RCC主要功能 时钟系统管理: 内部/外部时钟源选择 时钟分频/倍频配置 各外设时钟门…...
深度学习在油气地震资料反卷积中的应用
深度学习在油气地震资料反卷积中的应用 基本原理 在油气地震勘探中,反卷积(Deconvolution)是一种重要的信号处理技术,用于提高地震资料的分辨率。传统方法(如维纳滤波、预测反卷积等)存在对噪声敏感、假设条件严格等局限。深度学习方法通过数据驱动的方…...
实现滑动选择器从离散型的数组中选择
1.使用原生的input 详细代码如下: <template><div class"slider-container"><!-- 滑动条 --><inputtype"range"v-model.number"sliderIndex":min"0":max"customValues.length - 1"step&qu…...
基于 GO 语言的 Ebyte 勒索软件——简要分析
一种新的勒索软件变种,采用Go 语言编写,使用ChaCha20进行加密,并使用ECIES进行安全密钥传输,加密用户数据并修改系统壁纸。其开发者EvilByteCode曾开发过多种攻击性安全工具,现已在 GitHub 上公开 EByte 勒索软件。尽管该勒索软件声称仅用于教育目的,但滥用可能会导致严重…...
学习人工智能开发的详细指南
一、引言 人工智能(AI)开发是一个充满挑战与机遇的领域,它融合了数学、计算机科学、统计学、认知科学等多个学科的知识。随着大数据、云计算和深度学习技术的快速发展,AI已经成为推动社会进步和产业升级的关键力量。本文将为初学…...
使用图像生成式AI和主题社区网站助力运动和时尚品牌的新产品设计和市场推广的点子和实现
通过构建针对公司产品线的专有图像生成式AI模型,用户可以将自己对于产品的想法和偏好,变成设计发布到社区空间中与社区分享,也可以通过在产品经典款或使用社区空间中其它人的创作来重新设计。组织大型市场推广活动来宣传DIY设计理念ÿ…...
POI创建Excel文件
文章目录 1、背景2、创建表格2.1 定义表头对象2.2 Excel生成器2.3 创建模板2.4 处理Excel表头2.5 处理Excel内容单元格样式2.6 处理单个表头 3、追加sheet4、静态工具5、单元测试6、完整代码示例 1、背景 需求中有需要用户自定义Excel表格表头,然后生成Excel文件&a…...
CentOS虚拟机固定ip以及出现的问题
1.打开终端,进入网卡配置目录: cd etc/sysconfig/network-scripts 2.找到网卡配置文件,我这里是 ifcfg-ens32(替换成你自己的文件) 4.进入ifcfg-ens32,注释IPV6,修改别的参数如下图 TYPEEther…...
【Python】常用命令提示符
Python常用的命令提示符 一、Python环境基础命令【Windows】 于Windows环境下,针对Python,在CMD(命令提示符)常用的命令以及具体用法,怎么用; 主要包含:运行脚本、包管理、虚拟环境、调试与…...
Java引用RabbitMQ快速入门
这里写目录 Java发送消息给MQ消费者接收消息实现一个队列绑定多个消费者消息推送限制 Fanout交换机路由的作用Direct交换机使用案例 Java发送消息给MQ public void testSendMessage() throws IOException, TimeoutException {// 1.建立连接ConnectionFactory factory new Conn…...
USB接口的PCB设计
目录 USB接口简介 USB3.0接口 USB接口的电路设计 USB接口的PCB设计 USB接口简介 USB(通用串行总线)接口是一种广泛应用于电子设备的标准连接技术,自1996年由英特尔、微软等公司联合推出以来,逐步取代了传统串口、并口等复杂接…...
星纪魅族新品发布会定档5月13日,Note 16系列战神归来
5 月 13 日,星纪魅族将举办 Note 16 系列新品线上发布会。届时,国民严选魅族 Note 16 系列将战神归来,刷新用户对“高性价比科技”的想象,开启一场关乎「国民 AI 科技平权」的革新盛宴。 无创意不魅族,花式创意邀请即日…...
Jenkins+Newman实现接口自动化测试
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、是什么Newman Newman就是纽曼手机这个经典牌子,哈哈,开玩笑啦。。。别当真,简单地说Newman就是命令行版的Postman&…...
window 显示驱动开发-线程和同步级别为零级
在零级线程处理和同步中,WDDM 允许以可重入的方式对显示微型端口驱动程序进行零级 DxgkDdi*Xxx 调用。 也就是说,多个线程可以通过调用零级 DDI 同时进入驱动程序。 驱动程序应预期系统中的任何线程会传入,并应相应地保护该线程的数据。 尽…...
RabbitMQ ①-MQ | Linux安装RabbitMQ | 快速上手
MQ MQ(Message Queue)即消息队列,是一种应用间通信的一种方式。消息队列是一种异步通信方式,生产者(Producer)将消息放入队列,消费者(Consumer)从队列中取出消息进行消费…...
tinyrenderer笔记(Shadow Mapping)
tinyrenderer个人代码仓库:tinyrenderer个人练习代码 前言 阴影是光线被阻挡的结果;当光源的光线由于其他物体的阻挡而无法到达物体表面时,该物体就会产生阴影。阴影能使场景看起来更真实,并让观察者获得物体之间的空间位置关系。…...
【quantity】1 SI Prefixes 实现解析(prefix.rs)
一、源码 // prefix.rs //! SI Prefixes (国际单位制词头) //! //! 提供所有标准SI词头用于单位转换,仅处理10的幂次 //! //! Provides all standard SI prefixes for unit conversion, handling only powers of 10.use typenum::{Z0, P1, P2, P3, P6, P9, P12, …...
如何开发一个笑话管理小工具
前言 笔者曾经开发过一个可以对笑话浏览、收藏、分类、编辑上传的小工具(笔者开发后台,另外一个朋友负责小程序前台开发),如今所租用的服务器到期了,特此记录一下。 数据层 部署数据库 # 拉取Mysql镜像 docker pull…...
Transformer-LSTM混合模型在时序回归中的完整流程研究
Transformer-LSTM混合模型在时序回归中的完整流程研究 引言与背景 深度学习中的长期依赖建模一直是时序预测的核心问题。长短期记忆网络(LSTM)作为一种循环神经网络,因其特殊的门控结构能够有效捕捉序列的历史信息,并在时序预测…...
深入浅出iOS性能优化:打造极致用户体验的实战指南
前言 在当今移动应用竞争激烈的时代,性能优化已经成为iOS开发中不可或缺的重要环节。一个性能优秀的应用不仅能给用户带来流畅的使用体验,还能减少设备资源消耗,延长电池寿命,提高用户留存率。本文将深入探讨iOS性能优化的各个方…...
Spring AI 与大语言模型工具调用机制详细笔记
一、基本概念 大语言模型(LLM)工具调用机制是一种允许AI模型与外部系统交互的技术框架,它使模型能够在对话过程中请求调用预定义的函数或服务。这种机制极大地扩展了大模型的能力边界,使其不再局限于静态知识,而是能够…...
数据清洗-电商双11美妆数据分析
1.数据读取(前八行) 2.数据清洗 2.1 因为数据中存在重复跟空值,将数据进行重复值处理 (删除重复值) 2.2 缺失值处理 存在的缺失值很可能意味着售出的数量为0或者评论的数量为0,所以我们用0来填补缺失值 2…...
公司项目架构搭建者
公司项目架构搭建者分析 项目架构搭建的核心角色 #mermaid-svg-FzOOhBwW3tctx2AR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-FzOOhBwW3tctx2AR .error-icon{fill:#552222;}#mermaid-svg-FzOOhBwW3tctx2AR .err…...
广告场景下的检索平台技术
检索方向概述 数据检索领域技术选型大体分为SQL事务数据库、NoSQL数据库、分析型数据库三个类型。 SQL数据库的设计思路是采用关系模型组织数据,注重读写操作的一致性,注重数据的绝对安全。为了实现这一思路,SQL数据库往往会牺牲部分性能&…...
LintCode407-加一,LintCode第479题-数组第二大数
第407题: 描述 给定一个非负数,表示一个数字数组,在该数的基础上1,返回一个新的数组。 该数字按照数位高低进行排列,最高位的数在列表的最前面. 样例 1: 输入:[1,2,3] 输出:[1,2,4] 样例 …...
网络安全的范式革命:从被动防御到 AI 驱动的主动对抗
当黑客利用生成式 AI 在 30 秒内生成 10 万组钓鱼邮件,当恶意代码学会根据网络环境自主进化,传统网络安全防线正面临前所未有的挑战。2025 年,全球网络安全领域正在经历一场从 “被动挨打” 到 “主动出击” 的革命性转变,AI 与量…...
内网im软件,支持企业云盘的协同办公软件推荐
BeeWorks不仅是一个即时通讯工具,更是一个综合性的企业管理平台。其云盘功能支持大容量文件存储,便企业集中管理文件。并且具备在线协同编辑的能力,这使得企业在文件管理和团队协作方面更加高效和便捷。以下是BeeWorks在企业云盘和在线协同编…...
JAVA SE(9)——多态
1.多态的概念&作用 多态(Polymorphism)是面向对象编程的三大基本特性之一(封装和继承已经讲过了),它允许不同类的对象对同一消息做出不同的响应。具体来说,多态允许基类/父类的引用指向派生类/子类的对象(向上转型…...
单调栈算法精解(Java实现):从原理到高频面试题
在算法与数据结构的领域中,单调栈(Monotonic Stack)凭借其独特的设计和高效的求解能力,成为解决特定类型问题的神兵利器。它通过维护栈内元素的单调性,能将许多问题的时间复杂度从暴力解法的\(O(n)\)优化至\(O(n)\)&am…...