当前位置: 首页 > news >正文

《计算机视觉》—— 基于 dlib 库的方法将两张人脸图片进行换脸

声明:此篇文章所用的明星照片只为用于演示代码的效果,无诋毁她人肖像之意

一、案例实现的思想

  • 此案例的核心是基于人脸68个关键点检测模型来实现的,人脸68个关键带点检测后的效果如下:
    在这里插入图片描述

  • 通过对上图中红色区域的转换,来实现换脸的操作

  • 参照以下链接文章,可以帮助对此片案例内容的理解

    • 基于 dlib 库的人脸68个关键点定位
      • https://blog.csdn.net/weixin_73504499/article/details/142990867?spm=1001.2014.3001.5501
    • 基于 dlib 库的人脸关键部位的轮廓轮廓检测
      • https://blog.csdn.net/weixin_73504499/article/details/143027371?spm=1001.2014.3001.5501
  • 实现步骤与结果如下图:
    在这里插入图片描述

二、编辑代码

步骤解析:

  • 第一步:对人脸的关键部位在68个关键点中的点集确定下来,并将红框内的各部位的点击存储在一个列表中

    """ 根据人脸68个关键点检测模型,将脸部各部位对应的点集以列表形式存储 """
    JAW_POINTS = list(range(0, 17))
    RIGHT_BROW_POINTS = list(range(17, 22))
    LEFT_BROW_POINTS = list(range(22, 27))
    NOSE_POINTS = list(range(27, 35))
    RIGHT_EYE_POINTS = list(range(36, 42))
    LEFT_EYE_POINTS = list(range(42, 48))
    MOUTH_POINTS = list(range(48, 61))
    FACE_POINTS = list(range(17, 68))# 换脸的关键点集
    POINTS = [LEFT_BROW_POINTS + RIGHT_EYE_POINTS +LEFT_EYE_POINTS + RIGHT_BROW_POINTS + NOSE_POINTS + MOUTH_POINTS]# 处理为元组,后续使用方便
    POINTStuple = tuple(POINTS)
    
  • 第二步:读取两张人脸图片,并获取两张人脸图片的68个关键点

    def getKeyPoints(im):  # 获取关键点rects = detector(im, 1)  # 获取人脸方框位置shape = predictor(im, rects[0])  # 获取关键点s = np.matrix([[p.x, p.y] for p in shape.parts()])  # 将关键点转换为坐标(x,y)的形式return sa = cv2.imread("dlrb_3.jpg")  # 换脸A图片
    b = cv2.imread("zly.jpg")  # 换脸B图片detector = dlib.get_frontal_face_detector()  # 构造脸部位置检测器
    predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")  # 获取人脸关键点定位模型aKeyPoints = getKeyPoints(a)  # 获取A图片的68关键点
    bKeyPoints = getKeyPoints(b)  # 获取B图片的68关键点
    
  • 第三步:分别获取两张人脸红色区域(上图中红色)的掩膜

    def getFaceMask(im, keyPoints):  # 根据关键点获取脸部掩膜im = np.zeros(im.shape[:2], dtype=np.float64)for p in POINTS:points = cv2.convexHull(keyPoints[p])  # 获取凸包cv2.fillConvexPoly(im, points, color=1)  # 填充凸包,数字在0~1之间# 单通道im构成3通道im(3,行,列),改变形状(行、列、3)适应0penCVim = np.array([im, im, im]).transpose((1, 2, 0))im = cv2.GaussianBlur(im, (25, 25), 0)  # 需要根据具体调整return imaMask = getFaceMask(a, aKeyPoints)  # 获取图片A的人脸掩膜
    cv2.imshow('aMask', aMask)
    cv2.waitKey()bMask = getFaceMask(b, bKeyPoints)  # 获取图片B的人脸掩膜
    cv2.imshow('bMask', bMask)
    cv2.waitKey()
    
    • 效果如下:
      在这里插入图片描述
  • 第四步:求出b脸仿射变换到a脸的变换矩阵M

    • 图像的几何变换主要包括:平移、旋转、缩放、剪切、仿射、透视等。

    • 图像的几何变换主要分为:刚性变换、相似变换、仿射变换和透视变换(投影变换)

    • 刚性变换:平移+旋转

    • 相似变换:缩放+剪切

    • 仿射变换:从一个二维坐标系变换到另一个二维坐标系,属于线性变换。通过已知3对坐标点可以求得变换矩阵

    • 透视变换:从一个二维坐标系变换到一个三维坐标系,属于非线性变换。通过已知4对坐标点可以求得变换矩阵。
      在这里插入图片描述

    • 下图中内容是对仿射变换的简单概述
      在这里插入图片描述

    """ 求出b脸仿射变换到a脸的变换矩阵M,此处用到的算法难以理解,大家可直接跳过 """def getM(points1, points2):points1 = points1.astype(np.float64)  # int8转换为浮点数类型points2 = points2.astype(np.float64)  # 转换为浮点数类型c1 = np.mean(points1, axis=0)  # 归一化:(数值-均值)/标准差c2 = np.mean(points2, axis=0)  # 归一化:(数值-均值)/标准差,均值不同,主要是脸五官位置大小不同points1 -= c1  # 减去均值points2 -= c2  # 减去均值s1 = np.std(points1)  # 方差计算标准差s2 = np.std(points2)  # 方差计算标准差points1 /= s1  # 除标准差,计算出归一化的结果points2 /= s2  # 除标准差,计算出归一化的结果# 奇异值分解,Singular Value DecompositionU, S, Vt = np.linalg.svd(points1.T * points2)R = (U * Vt).T  # 通过U和Vt找到Rreturn np.hstack(((s2 / s1) * R, c2.T - (s2 / s1) * R * c1.T))M = getM(aKeyPoints[POINTStuple], bKeyPoints[POINTStuple])
    
  • 第五步:将b的脸部(bmask)根据M仿射变换到a上

    dsize = a.shape[:2][::-1]
    # 目标输出与图像a大小一致
    # 需要注意,shape是(行、列),warpAffine参数dsize是(列、行)
    # 使用a.shape[:2][::-1],获取a的(列、行)# 函数warpAffine(src,M,dsize,dst=None, flags=None, borderMode=None, borderValue=None)
    # src:输入图像
    # M:运算矩阵,2行3列的,
    # dsize:运算后矩阵的大小,也就是输出图片的尺寸
    # dst:输出图像
    # flags:插值方法的组合,与resize函数中的插值一样,可以查看cv2.resize
    # borderMode:边界模式,BORDER_TRANSPARENT表示边界透明
    # borderValue:在恒定边框的情况下使用的borderValue值;默认情况下,它是 0
    bMaskWarp = cv2.warpAffine(bMask, M, dsize, borderMode=cv2.BORDER_TRANSPARENT, flags=cv2.WARP_INVERSE_MAP)
    cv2.imshow("bMaskWarp", bMaskWarp)
    cv2.waitKey()
    
    • 结果如下:
      在这里插入图片描述
  • 第六步:获取脸部最大值(两个脸模板相加)

    mask = np.max([aMask, bMaskWarp], axis=0)
    cv2.imshow("mask", mask)
    cv2.waitKey()
    
    • 结果如下:
      在这里插入图片描述
  • 第七步:使用仿射矩阵M,将b映射到a

    bWrap = cv2.warpAffine(b, M, dsize, borderMode=cv2.BORDER_TRANSPARENT, flags=cv2.WARP_INVERSE_MAP)
    cv2.imshow("bWrap", bWrap)
    cv2.waitKey()
    
    • 结果如下:
      在这里插入图片描述
  • 第八步:求b图片的仿射到图片a的颜色值,b的颜色值改为a的颜色

    def normalColor(a, b):ksize = (111, 111)  # 非常大的核,去噪等运算时为11就比较大了aGauss = cv2.GaussianBlur(a, ksize, 0)  # 对a进行高斯滤波bGauss = cv2.GaussianBlur(b, ksize, 0)  # 对b进行高斯滤波weight = aGauss / bGauss  # 计算目标图像调整颜色的权重值,存在除0警告,可忽略。where_are_inf = np.isinf(weight)weight[where_are_inf] = 0return b * weightbcolor = normalColor(a, bWrap)
    cv2.imshow("bcolor", bcolor)
    cv2.waitKey()
    
    • 结果如下:
      在这里插入图片描述
  • 第九步:换脸(mask区域用bcolor,非mask区城用a)

    # 换脸
    out = a * (1.0 - mask) + bcolor * mask# =========输出原始人脸、换脸结果===============
    cv2.imshow("a", a)
    cv2.imshow("b", bOriginal)
    cv2.imshow("out", out / 255)
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    • 最终结果如下:
      在这里插入图片描述
  • 完整代码如下:

    import cv2
    import dlib
    import numpy as np""" 根据人脸68个关键点检测模型,将脸部各部位对应的点集以列表形式存储 """
    JAW_POINTS = list(range(0, 17))
    RIGHT_BROW_POINTS = list(range(17, 22))
    LEFT_BROW_POINTS = list(range(22, 27))
    NOSE_POINTS = list(range(27, 35))
    RIGHT_EYE_POINTS = list(range(36, 42))
    LEFT_EYE_POINTS = list(range(42, 48))
    MOUTH_POINTS = list(range(48, 61))
    FACE_POINTS = list(range(17, 68))# 换脸的关键点集
    POINTS = [LEFT_BROW_POINTS + RIGHT_EYE_POINTS +LEFT_EYE_POINTS + RIGHT_BROW_POINTS + NOSE_POINTS + MOUTH_POINTS]# 处理为元组,后续使用方便
    POINTStuple = tuple(POINTS)def getFaceMask(im, keyPoints):  # 根据关键点获取脸部掩膜im = np.zeros(im.shape[:2], dtype=np.float64)for p in POINTS:points = cv2.convexHull(keyPoints[p])  # 获取凸包cv2.fillConvexPoly(im, points, color=1)  # 填充凸包,数字在0~1之间# 单通道im构成3通道im(3,行,列),改变形状(行、列、3)适应0penCVim = np.array([im, im, im]).transpose((1, 2, 0))im = cv2.GaussianBlur(im, (25, 25), 0)  # 需要根据具体调整return im""" 求出b脸仿射变换到a脸的变换矩阵M,此处用到的算法难以理解,大家可直接跳过 """def getM(points1, points2):points1 = points1.astype(np.float64)  # int8转换为浮点数类型points2 = points2.astype(np.float64)  # 转换为浮点数类型c1 = np.mean(points1, axis=0)  # 归一化:(数值-均值)/标准差c2 = np.mean(points2, axis=0)  # 归一化:(数值-均值)/标准差,均值不同,主要是脸五官位置大小不同points1 -= c1  # 减去均值points2 -= c2  # 减去均值s1 = np.std(points1)  # 方差计算标准差s2 = np.std(points2)  # 方差计算标准差points1 /= s1  # 除标准差,计算出归一化的结果points2 /= s2  # 除标准差,计算出归一化的结果# 奇异值分解,Singular Value DecompositionU, S, Vt = np.linalg.svd(points1.T * points2)R = (U * Vt).T  # 通过U和Vt找到Rreturn np.hstack(((s2 / s1) * R, c2.T - (s2 / s1) * R * c1.T))def getKeyPoints(im):  # 获取关键点rects = detector(im, 1)  # 获取人脸方框位置shape = predictor(im, rects[0])  # 获取关键点s = np.matrix([[p.x, p.y] for p in shape.parts()])  # 将关键点转换为坐标(x,y)的形式return s""" 修改b图的颜色值,与a图相同 """def normalColor(a, b):ksize = (111, 111)  # 非常大的核,去噪等运算时为11就比较大了aGauss = cv2.GaussianBlur(a, ksize, 0)  # 对a进行高斯滤波bGauss = cv2.GaussianBlur(b, ksize, 0)  # 对b进行高斯滤波weight = aGauss / bGauss  # 计算目标图像调整颜色的权重值,存在除0警告,可忽略。where_are_inf = np.isinf(weight)weight[where_are_inf] = 0return b * weight""" 读取两张人脸图片,并获取两张人脸图片的68个关键点 """
    a = cv2.imread("dlrb_3.jpg")  # 换脸A图片
    b = cv2.imread("zly.jpg")  # 换脸B图片detector = dlib.get_frontal_face_detector()  # 构造脸部位置检测器
    predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")  # 获取人脸关键点定位模型aKeyPoints = getKeyPoints(a)  # 获取A图片的68关键点
    bKeyPoints = getKeyPoints(b)  # 获取B图片的68关键点bOriginal = b.copy()  # 不对原来的图片b进行破坏和修改""" 分别获取两张人脸的掩膜 """
    aMask = getFaceMask(a, aKeyPoints)  # 获取图片A的人脸掩膜
    cv2.imshow('aMask', aMask)
    cv2.waitKey()bMask = getFaceMask(b, bKeyPoints)  # 获取图片B的人脸掩膜
    cv2.imshow('bMask', bMask)
    cv2.waitKey()"""求出b脸仿射变换到a脸的变换矩阵M"""
    M = getM(aKeyPoints[POINTStuple], bKeyPoints[POINTStuple])"""将b的脸部(bmask)根据M仿射变换到a上"""
    dsize = a.shape[:2][::-1]
    # 目标输出与图像a大小一致
    # 需要注意,shape是(行、列),warpAffine参数dsize是(列、行)
    # 使用a.shape[:2][::-1],获取a的(列、行)# 函数warpAffine(src,M,dsize,dst=None, flags=None, borderMode=None, borderValue=None)
    # src:输入图像
    # M:运算矩阵,2行3列的,
    # dsize:运算后矩阵的大小,也就是输出图片的尺寸
    # dst:输出图像
    # flags:插值方法的组合,与resize函数中的插值一样,可以查看cv2.resize
    # borderMode:边界模式,BORDER_TRANSPARENT表示边界透明
    # borderValue:在恒定边框的情况下使用的borderValue值;默认情况下,它是 0
    bMaskWarp = cv2.warpAffine(bMask, M, dsize, borderMode=cv2.BORDER_TRANSPARENT, flags=cv2.WARP_INVERSE_MAP)
    cv2.imshow("bMaskWarp", bMaskWarp)
    cv2.waitKey()"""获取脸部最大值(两个脸模板相加)"""
    mask = np.max([aMask, bMaskWarp], axis=0)
    cv2.imshow("mask", mask)
    cv2.waitKey()""" 使用仿射矩阵M,将b映射到a """
    bWrap = cv2.warpAffine(b, M, dsize, borderMode=cv2.BORDER_TRANSPARENT, flags=cv2.WARP_INVERSE_MAP)
    cv2.imshow("bWrap", bWrap)
    cv2.waitKey()""" 求b图片的仿射到图片a的颜色值,b的颜色值改为a的颜色 """
    bcolor = normalColor(a, bWrap)
    cv2.imshow("bcolor", bcolor)
    cv2.waitKey()""" ===========换脸(mask区域用bcolor,非mask区城用a)============= """
    out = a * (1.0 - mask) + bcolor * mask# =========输出原始人脸、换脸结果===============
    cv2.imshow("a", a)
    cv2.imshow("b", bOriginal)
    cv2.imshow("out", out / 255)
    cv2.waitKey()
    cv2.destroyAllWindows()

相关文章:

《计算机视觉》—— 基于 dlib 库的方法将两张人脸图片进行换脸

声明:此篇文章所用的明星照片只为用于演示代码的效果,无诋毁她人肖像之意 一、案例实现的思想 此案例的核心是基于人脸68个关键点检测模型来实现的,人脸68个关键带点检测后的效果如下: 通过对上图中红色区域的转换,…...

查找与排序-交换排序

交换排序是基于“比较”和“交换”两种操作来实现的排序方法 。 由于选择“比较”的基准元素不同,可将交换排序分为以下两种: 冒泡排序快速排序 一、冒泡排序 1.冒泡排序基本思想 因为其实现与气泡从水中往上冒的过程类似而得名。 每一趟的…...

数据结构与算法:高级数据结构与实际应用

目录 14.1 跳表 14.2 Trie树 14.3 B树与 B树 14.4 其他高级数据结构 总结 数据结构与算法:高级数据结构与实际应用 本章将探讨一些高级数据结构,这些数据结构在提高数据存取效率和解决复杂问题上起到重要作用。这些高级数据结构包括跳表&#xff0…...

【win11】终端/命令提示符/powershell美化

文章目录 1.设置字体1.1. 打开win11的终端/命令提示符/powershell其中之一1.2. 打开终端设置,修改所有终端默认字体为新宋体 2. 修改powershell背景色为蓝色 win11的默认终端/命令提示符/powershell主题风格让人感觉与win10撕裂太大,尤其是字体、背景色&…...

三元损失(Triplet Loss)详解

文章目录 前言一、三元损失的核心思想二、数学公式三、损失函数的解释四、三元损失的优势五、应用场景前言 三元损失(Triplet Loss)是一种广泛应用于度量学习(Metric Learning)中的损失函数,尤其在人脸识别、图像检索等任务中表现优异。三元损失的基本思想是通过定义一个…...

1. 解读DLT698.45-2017通信规约--预连接响应

国家电网有限公司企业标准,面向对象的用电信息数据交换协议DLT698.45-2017 为提高用电信息采集系统的业务适应性、采集效率、安全性和数据溯源性,规范用电信息数据交换协议的通信架构、数据链路层、应用层、接口类与对象标识,制定本标准。 …...

基于小波图像去噪的MATLAB实现

论文背景 数字图像处理(Digital Image Processing,DIP)是指用计算机辅助技术对图像信号进行处理的过程。数字图像处理最早出现于 20世纪50年代,随着过去几十年来计算机、网络技术和通信的快速发展,为信号处理这个学科领域的发展奠定了基础&a…...

[数据结构]栈的实现与应用

文章目录 一、引言二、栈的基本概念1、栈是什么2、栈的实现方式对比3、函数栈帧 三、栈的实现1、结构体定义2、初始化3、销毁4、显示5、数据操作 四、分析栈1、优点2、缺点 五、总结1、练习题2、源代码 一、引言 栈,作为一种基础且重要的数据结构,在计算…...

ESP32-C3 入门笔记04:gpio_key 按键 (ESP-IDF + VSCode)

1.GPIO简介 ESP32-C3是QFN32封装,GPIO引脚一共有22个,从GPIO0到GPIO21。 理论上,所有的IO都可以复用为任何外设功能,但有些引脚用作连接芯片内部FLASH或者外部FLASH功能时,官方不建议用作其它用途。 通过开发板的原…...

C语言(函数)—函数栈帧的创建和销毁

目录 前言 补充知识 一、函数线帧是什么? 二、函数线帧的实现(举例说明) 两数之和代码 ​编辑两数之和 汇编代码分析 执行第一条语句 执行第二条语句 执行第三条语句 执行第四、五、六条语句 执行第七条语句 执行第八、九、十条语句 执行第十…...

点餐小程序实战教程20广告管理

目录 1 创建数据源2 添加轮播容器3 创建变量4 绑定变量5 预览应用总结 一般餐厅需要有一些宣传,在我们的点餐页面可以在顶部加载广告位。广告主要是用轮播图的形式进行展示,本节我们介绍一下如果显示广告。 1 创建数据源 打开控制台,点击应用…...

市场上几个跨平台开发框架?

跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上,开发者需要为每个操作系统编写不同的代码,使用不同的开发工具和语言。而跨平台桌面应用开发框架通过…...

同步和异步、引用、变量声明、全局变量

同步和异步 如果计算机足够快,任何资源的访问速度都像Cache一样,没有异步的必要。 编程语言的同步和异步 越早期的编程语言,支持语言级别的异步越欠缺。 JS提供某些操作的同步和异步函数,例如文件读取,fs.readFile和fs…...

2024年10月份实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先,来看下效果图 在线体验地址:https://geojson.hxkj.vip,并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…...

@RequestMapping对不同参数的接收方式

1、简单参数 1、参数名与形参变量名相同,定义形参即可接收参数,且会自动进行类型转换。 RequestMapping("/simple")public String simpleParam(String name,int age){String username name;int userAge age;System.out.println(username&…...

机器学习_KNN(K近邻)算法_FaceBook_Location案例(附数据集下载链接)

Facebook_location_KNN 流程分析: 1.数据集获取(大型数据怎么获取? 放在电脑哪里? 算力怎么搞?) 2.基本数据处理(数据选取-确定特征值和目标值-分割数据集) 缩小数据范围 选择时间特征 去掉签到较少的地方 确定特征值和目标值 分割数据集 3.特征工程(特征预处理:标…...

【str_replace替换导致的绕过】

双写绕过 随便输入一个 usernameadmin&passwords 没有回显测试注入点 usernameadmin or 11%23&passwords 回显hello admin测试列数 usernameadmin order by 3%23&passwords测试回显位 usernameadmi union select 1,2,3%23&passwords 没有显示数据,推…...

如何用AI大模型提升挖洞速度

工具背景 越权漏洞在黑盒测试、SRC挖掘中几乎是必测的一项,但手工逐个测试越权漏洞往往会耗费大量时间,而自动化工具又存在大量误报, 基于此产生了AutorizePro, 那它是怎么提升效率一起来看看 AutorizePro 是一款专注于越权检测的 Burp 插件…...

两个数列问题

# 问题描述 给定长度分别为 n 和 m 的两个数列a[n]、b[m],和一个整数k。求|(a[i] - b[j])^2 - k^2|的最小值。 ## 输入格式 第一行有 2 个整数 n、m、k,分别表示数列 a、b 的长度,以及公式中的整数 k。 第二行有 n 个整数,表示…...

python中堆的用法

Python 堆(Headp) Python中堆是一种基于二叉树存储的数据结构。 主要应用场景: 对一个序列数据的操作基于排序的操作场景,例如序列数据基于最大值最小值进行的操作。 堆的数据结构: Python 中堆是一颗平衡二叉树&am…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...