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

人脸识别系统之动态人脸识别

二.动态人脸识别

1.摄像头人脸识别

1.1.导入资源包

import dlib
import cv2
import face_recognition
from PIL import Image, ImageTk
import tkinter as tk
import os

:这些导入语句允许您在代码中使用这些库和模块提供的功能,例如创建图形用户界面、处理文件、进行图像处理和人脸识别等。
Dlib:是一个开源的机器学习库,包含了许多常用的机器学习算法。它还包含了一个名为shape_predictor的模块,用于检测人脸的关键点。

1.2.初始化摄像头

# 初始化摄像头
cap = cv2.VideoCapture(0)
#参数0指定要使用的摄像头设备。在大多数情况下,0表示默认摄像头。

:这行代码初始化了摄像头,并将其作为cap对象返回。cv2.VideoCapture(0)中的0参数通常表示默认摄像头。这行代码是用于从摄像头上捕获实时视频流。

1.3.创建主窗口

root = tk.Tk()
root.title("人脸识别程序")
root.geometry('600x600')

:这段代码通常用于创建一个Tkinter窗口,并为其设置一个标题和一个初始大小。在后续的代码中,您可以添加更多的组件,如按钮、标签、图像等,来构建图形用户界面。

1.4.创建画布

# 创建画布
canvas = tk.Canvas(root, width=600, height=600)
canvas.pack()

:这段代码首先导入了 Tkinter 模块,并创建了一个名为 root 的窗口。然后,它创建了一个画布(canvas),并设置了其宽度和高度。最后,它将画布添加到窗口中,并启动了 Tkinter 的主循环,这样窗口才会显示出来。

1.5.显示摄像头部分

# 摄像头画面显示部分
camera_frame = tk.Label(root)
camera_frame.place(x=50, y=50, width=400, height=400)

:这段代码创建了一个 Label 对象,并将其放置在窗口(root)的坐标 (50, 50) 处,大小为 400x400。然而,由于 Label 控件本身不支持显示动态内容,如摄像头捕获的帧,您需要使用其他方法(如前面提到的 Canvas 控件和 PIL/Pillow 库)来显示摄像头画面。

1.6.显示文本

# 文本显示部分
text_label = tk.Label(root, text="", font=('Helvetica', 12))
text_label.place(x=50, y=460, width=500, height=100)

:这段代码创建了一个 Label 对象,并将其放置在窗口(root)的坐标 (50, 460) 处,大小为 500x100。标签的初始文本内容为空,字体为 Helvetica 字体,字号为 12。

1.7.按钮的点击事件处理函数

# 按钮部分
def capture_face():ret, frame = cap.read()if ret:# 将人脸图像转换为RGBrgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 检测人脸位置face_locations = face_recognition.face_locations(rgb_frame)# 如果检测到人脸if face_locations:# 对检测到的人脸进行编码face_encoding = face_recognition.face_encodings(rgb_frame, face_locations)[0]# 加载已保存的人脸编码known_face_encodings = []known_face_names = []for file in os.listdir("facecomparison"):image = face_recognition.load_image_file(f"facecomparison/{file}")encoding = face_recognition.face_encodings(image)[0]known_face_encodings.append(encoding)known_face_names.append(file)# 比较当前人脸与已知人脸matches = face_recognition.compare_faces(known_face_encodings, face_encoding)if True in matches:text_label.config(text="该人脸已存在,请勿重复录入")else:# 裁剪人脸图像top, right, bottom, left = face_locations[0]face_image = frame[top:bottom, left:right]# 生成唯一的文件名unique_filename = f"facecomparison/face_{len(os.listdir('facecomparison')) + 1}.jpg"# 保存人脸到指定文件夹cv2.imwrite(unique_filename, face_image)text_label.config(text="人脸已录入")else:text_label.config(text="未检测到人脸")else:text_label.config(text="无法从摄像头读取帧")

:这段代码的作用是实现一个面部识别系统,该系统能够从摄像头捕获实时帧,检测帧中的人脸,并将新检测到的人脸与已保存的人脸编码进行比较。如果新检测到的人脸与已保存的人脸匹配,它会显示一个消息,告知用户该人脸已存在,不应该重复录入。如果新检测到的人脸与已保存的人脸不匹配,它会将新的人脸图像保存到指定的文件夹中,并显示一个消息,告知用户人脸已录入。如果无法从摄像头读取帧,或者没有检测到人脸,它会显示相应的错误消息。

1.8.识别摄像头捕获的人脸

def recognize_face():# 识别摄像头捕获的人脸ret, frame = cap.read()if ret:frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)rgb_frame = frame.copy()face_locations = face_recognition.face_locations(rgb_frame)face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)# 加载已保存的人脸编码和文件名known_face_encodings = []known_face_names = []for file in os.listdir("facecomparison"):image = face_recognition.load_image_file(f"facecomparison/{file}")encoding = face_recognition.face_encodings(image)[0]known_face_encodings.append(encoding)known_face_names.append(file)# 标记人脸并显示信息for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):matches = face_recognition.compare_faces(known_face_encodings, face_encoding)if True in matches:first_match_index = matches.index(True)text_label.config(text=f"识别到人脸,人脸属于:{known_face_names[first_match_index]}")else:cv2.rectangle(frame, (left, top), (right, bottom), (255, 0, 0), 2)  # 使用蓝色线条画框cv2.putText(frame, "新的人脸", (left + 10, top + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 1)text_label.config(text="人脸不存在,请先录入人脸")# 更新画布image = Image.fromarray(frame)image = ImageTk.PhotoImage(image)camera_frame.configure(image=image)camera_frame.image = imageelse:text_label.config(text="无法从摄像头读取帧")

:这段代码是一个函数,当按钮被点击时,它会执行这个函数。这个函数的作用是识别摄像头捕获的实时帧中的人脸,并与已保存的人脸编码进行比较,以确定是否已存在。如果人脸存在,它会标记并显示该人脸的名称;如果人脸不存在,它会标记新的人脸并提示用户先录入人脸。

1.9.点击关闭程序的按钮

def close_program():
#关闭 Tkinter 应用程序root.quit()
#释放摄像头(cap)资源cap.release()

:当用户点击关闭程序的按钮时,这两个操作会确保 Tkinter 应用程序和摄像头资源都能被正确地关闭和释放,从而避免资源泄漏和潜在的系统问题。

1.10.创建按钮

button1 = tk.Button(root, text="录入人脸", command=capture_face, width=10, height=2)
button1.place(x=460, y=50, width=100, height=100)button2 = tk.Button(root, text="识别人脸", command=recognize_face, width=10, height=2)
button2.place(x=460, y=200, width=100, height=100)button3 = tk.Button(root, text="结束程序", command=close_program, width=10, height=2)
button3.place(x=460, y=350, width=100, height=100)

:这三行代码分别创建了三个按钮,并设置了它们的位置、大小和功能,当用户点击这些按钮时,会触发相应的函数执行。

1.11.更新摄像头的画面

# 更新摄像头画面的函数
def update_image():ret, frame = cap.read()if ret:frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)face_locations = face_recognition.face_locations(frame)for (top, right, bottom, left) in face_locations:cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)  # 使用绿色线条画框image = Image.fromarray(frame)image = ImageTk.PhotoImage(image)camera_frame.configure(image=image)camera_frame.image = imageroot.after(10, update_image)# 开始更新画面
update_image()# 主循环
root.mainloop()# 释放摄像头
cap.release()

:这段代码的作用是在 Tkinter 窗口(root)中创建一个循环,用于从摄像头捕获实时帧,并在窗口中显示这些帧。这个循环会在每次捕获新帧后立即更新显示的图像。
运行结果
在这里插入图片描述

2.视频流人脸识别

2.1.导入资源包

import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
import cv2
import os
import subprocess
from pathlib import Path

:导入了所需的模块,这些模块将用于创建一个图形用户界面 (GUI) 应用程序,该应用程序可以处理图像文件、使用摄像头、执行命令行操作等。
cv2:这是 OpenCV 模块,用于处理图像和视频,包括摄像头捕捉、图像处理、特征检测等。os:这是 Python 的标准库,用于操作文件和目录,例如创建目录、删除文件、获取文件路径等。
pathlib:这是 Python 的标准库,用于处理文件和目录路径,提供了一个面向对象的接口,可以更方便地处理路径。

2.2.创建界面窗口

# 初始化窗口
win = tk.Tk()
win.title('视频流人脸识别')
win.geometry('600x600')
#创建了一个字体对象 title_font,用于设置标题的字体、大小和样式。title_font = ("Verdana", 20, 'italic')

:这段代码创建了一个名为 “视频流人脸识别” 的窗口,窗口的初始大小为 600x600 像素,并准备了一个斜体字体的对象,用于后续设置窗口标题的字体。

2.3.创建视频播放框架

# 视频播放框架
video_frame = tk.Frame(win, width=300, height=300, bg='black')
video_frame.pack()
#将 video_frame 框架放置在窗口中

:这段代码创建了一个视频播放框架,并将其放置在窗口中,设置其大小为 300x300 像素,背景颜色为黑色。这个框架可以用来显示摄像头捕捉的实时帧或视频文件。

在视频播放框架 video_frame 中创建一个画布

# 视频播放的Canvas
canvas = tk.Canvas(video_frame, width=900, height=900)
canvas.pack(side=tk.TOP, anchor=tk.CENTER)

:这段代码创建了一个画布,并将其放置在视频播放框架中,设置其大小为 900x900 像素。这个画布可以用来显示摄像头捕捉的实时帧或视频文件。

2.5. 加载人脸识别预训练的模型

# 加载人脸识别的预训练模型
face_cascade=cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')

:这段代码创建了一个名为 face_cascade 的级联分类器对象,用于检测图像或视频帧中的人脸。OpenCV 提供了许多预训练的级联分类器,包括正面人脸检测、眼睛检测等,这些分类器可以提高检测的准确性和效率。

2.6.人脸检测

# 人脸检测函数
def detect_faces(frame):gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.3, 5)for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)return frame, faces

:这个函数通过级联分类器在输入图像中检测人脸,并在图像上标记出这些人脸,以便进一步的处理或显示。
1.3:是尺度缩放因子,用于调整检测窗口大小。
5:是邻域内像素的最低匹配数,用于确定检测到的候选框是否真正是人脸。

2.7.在循环外部创建全局的PhotoImage对象

# 在循环外部创建全局的PhotoImage对象
imgtk = None

:在 Tkinter 中,PhotoImage 是一个用于在 Tkinter 控件中显示图像的类。当您创建一个 PhotoImage 对象时,它会占用一些内存来存储图像数据。如果您在循环中创建多个 PhotoImage 对象,并且循环会多次迭代,那么每次迭代都会创建一个新的对象,这将导致内存占用逐渐增加。为了避免这种情况,您可以创建一个全局的 PhotoImage 对象,并在循环中使用它。这样做的好处是,无论循环迭代多少次,都只会有一个 PhotoImage 对象在内存中。

2.8.定义播放视频的函数

# 播放视频的函数
def play_video():global imgtkvideo_path = filedialog.askopenfilename(title='选择视频', filetypes=[('视频文件', '*.mp4')])if video_path:cap = cv2.VideoCapture(video_path)while cap.isOpened():ret, frame = cap.read()if ret:frame, faces = detect_faces(frame)display_frame(frame)else:breakcap.release()
#在循环后释放视频文件资源

:这个函数允许用户选择一个视频文件,并播放该视频。在播放过程中,它将视频帧显示在窗口中,并使用人脸检测算法检测帧中的人脸。

2.9.在 Tkinter 窗口的画布上显示图像帧。

#定义了一个函数 display_frame,它接受一个名为 frame 的参数,该参数是一个表示图像的 NumPy 数组。
def display_frame(frame):global imgtkif imgtk:canvas.delete(imgtk)imgtk = Noneframe = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)img = Image.fromarray(frame)imgtk = ImageTk.PhotoImage(image=img)
#在画布上创建图像canvas.create_image(0, 0, anchor=tk.NW, image=imgtk)
#更新image属性canvas.image = imgtk
#更新窗口状态win.update_idletasks()win.update()

:这个函数负责将处理后的图像帧转换为 Tkinter 可以显示的格式,并在画布上显示这些帧。

2.10.让用户选择要查看的人脸图片,并在图像上显示这些图片

def view_faces():directory = 'C:/Users/HUAWEI/Desktop/机器学习的人脸识别/机器学习的人脸识别/动态人脸识别/视频流人脸识别/保存图片'[os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.jpg')]face_paths = filedialog.askopenfilenames(title='查看人脸', initialdir=directory, filetypes=[('图片文件', '*.jpg')])if face_paths:for face_path in face_paths:img = cv2.imread(face_path)if img is not None:cv2.imshow('Face', img)cv2.waitKey(0)cv2.destroyAllWindows()else:print(f"无法加载图片: {face_path}")

:这行代码检查用户是否选择了图片文件。如果选择了,它将遍历用户选择的图片文件,并使用 cv2.imread() 函数尝试读取每个图片文件。如果成功读取,它将使用 cv2.imshow() 函数在窗口中显示图片,并使用 cv2.waitKey(0) 函数等待用户按键,然后使用 cv2.destroyAllWindows() 函数关闭所有打开的 OpenCV 窗口。如果无法加载图片,它会打印一个错误消息。

2.11.返回到主界面

def return_to_system():subprocess.Popen(["python", "rlsb.py"])win.destroy()
#调用 win.destroy() 方法来关闭当前的 Tkinter 窗口。

:这个函数的作用是在当前 Tkinter 窗口中执行 rlsb.py 脚本,并在脚本执行完毕后关闭窗口。这通常用于将控制权返回到操作系统或另一个应用程序。
subprocess.Popen([“python”, “rlsb.py”]):这行代码使用 subprocess.Popen() 函数启动一个新的进程,该进程将执行 rlsb.py 脚本。subprocess.Popen() 函数用于执行外部命令和程序,参数 [“python”, “rlsb.py”] 指定使用 Python 解释器执行 rlsb.py 脚本。

2.12.创建按钮

# 创建播放视频按钮,并放置在窗口的右侧
button1 = tk.Button(win, text="选择视频", command=play_video, width=10, height=2)
button1.place(x=150, y=500, width=100, height=50)# 创建返回程序按钮,并放置在窗口的右侧
button2 = tk.Button(win, text="返回程序", command=return_to_system, width=10, height=2)
button2.place(x=400, y=500, width=100, height=50)

:这两行代码分别创建了两个按钮,并设置了它们的位置、大小和功能。当用户点击这些按钮时,会触发相应的函数执行。

2.13.更新窗口以确保按钮大小被计算

# 更新窗口以确保按钮大小被计算
win.update_idletasks()

:这行代码的作用是更新 Tkinter 窗口,以确保按钮的大小被正确计算。在 Tkinter 中,按钮的大小是通过其 place 或 pack 方法设置的,但这些方法并不会立即更新按钮的实际大小。update_idletasks() 方法用于在布局管理器(如 pack 或 grid)计算所有控件的最终位置和大小后更新窗口。

2.14.事件循环

# 进入Tkinter事件循环
win.mainloop()

:这行代码确保了 Tkinter 窗口和所有绑定的事件处理函数能够正常工作,并且用户可以与应用程序进行交互。它是 Tkinter 应用程序中不可或缺的一部分。
运行结果
在这里插入图片描述
在这里插入图片描述

相关文章:

人脸识别系统之动态人脸识别

二.动态人脸识别 1.摄像头人脸识别 1.1.导入资源包 import dlib import cv2 import face_recognition from PIL import Image, ImageTk import tkinter as tk import os注:这些导入语句允许您在代码中使用这些库和模块提供的功能,例如创建…...

Opencv实用笔记(一): 获取并绘制JSON标注文件目标区域(可单独保存目标小图)

文章目录 背景代码 背景 如果我们想要根据json标注文件,获取里面的指定目标的裁剪区域,那么我们可以根据以下代码来实现(也可以校验标注情况)。 代码 from tqdm import tqdm import os, json, cv2, copy import numpy as npdef…...

LabVIEW在高校电力电子实验中的应用

概述:本文介绍了如何利用LabVIEW优化高校电力电子实验,通过图形化编程实现参数调节、实时数据监控与存储,并与Simulink联动,提高实验效率和数据处理能力。 需求背景高校实验室在进行电机拖动和电力电子实验时,通常使用…...

rtsp python实现

1. rtsp rtp rtcp https://hope-wisdom.blog.csdn.net/article/details/138259027 2.rtsp加速 https://mp.weixin.qq.com/s/0C1b-8pFw0HaE1xpNbrxxw 3. 实现了一部分获取数据 import socket import base64 import threading import struct# 定义 RTSP 请求 def send_rtsp_…...

RHCE (Linux进阶) Ubuntu 操作系统安装教程

一、在官网下载iso镜像文件 下载地址: https://cn.ubuntu.com/download/server/step1#downloads(下载最新的Ubuntu 20.04 LTS服务器版本) 二、VMware安装配置过程 基本安装过程 1、新建虚拟机 2、选择典型即可 3、设置下载好的Ubuntu对应路…...

vue-router 源码分析——1. 路由匹配

这是对vue-router 3 版本的源码分析。 本次分析会按以下方法进行: 按官网的使用文档顺序,围绕着某一功能点进行分析。这样不仅能学习优秀的项目源码,更能加深对项目的某个功能是如何实现的理解。这个对自己的技能提升,甚至面试时…...

百度云下载不限速方式集合

使用解析网站配合Motrix工具软件 下载Motrix工具:Motrix下载链接打开解析网址:解析网站获取,将百度网盘链接粘贴到解析网站,获取下载链接。在Motrix中配置Aria2 RPC地址:ws://localhost:16800/jsonrpc开始下载&#x…...

2024年6月1日 (周六) 叶子游戏新闻

Embracer探讨单机游戏大作涨价超过70美元的可能性在Embracer集团等待公布新公司名称的同时,他们对游戏大作的价格上涨做出了评论。几年来,游戏大作的价格已经达到了70美元的门槛。Embracer集团的CEO Lars Wingefors在采访中表示,电子游戏行业…...

MathorCup挑战赛获奖名单公示,第九届研讨会及颁奖典礼即将举行

近日,备受瞩目的2024年第十四届MathorCup高校数学建模挑战赛圆满落幕,竞赛组委会于近日公示了获奖名单初稿。本届竞赛自2024年4月12日至16日举行,吸引了来自全国740所高校的9119支队伍踊跃参与,其中包括本科生、研究生、专科生及教…...

vulnhub靶机xptosystem

下载地址:https://download.vulnhub.com/xpto/xptosystem.ova 主机发现 端口扫描 服务扫描 漏洞扫描 看一下web 目录爆破 那不用说肯定看看robots.txt 要检查readme去看看 看不懂 这个是靶场吧很像 在最后看着挺像url路径的 还真是,我直接base64 坏了还…...

Spring Boot详解:深入了解与实践

文章目录 1. Spring Boot简介1.1 什么是Spring Boot?1.2 Spring Boot的历史背景1.3 Spring Boot的核心特点 2. Spring Boot的核心概念2.1 自动配置2.1.1 自动配置原理2.1.2 自定义配置 2.2 Spring Boot Starter2.3 Spring Boot CLI 3. Spring Boot的主要功能模块3.1…...

FreeRtos进阶——中断的内部逻辑

中断与非中断API的区别 BaseType_t xQueueSendToBack(QueueHandle_t xQueue,const void *pvItemToQueue,TickType_t xTicksToWait); BaseType_t xQueueSendToBackFromISR(QueueHandle_t xQueue,const void *pvItemToQueue,BaseType_t *pxHigherPriorityTaskWok…...

Centos7对比Ubuntu一些常用操作差异点

Centos7对比Ubuntu一些常用操作差异点 CentOS 7将于2024年6月30日停止维护,CentOS8已经转为Rhel的上游项目。同时Centos7的软件仓库中,部分软件版本较老。后续使用过程中可以考虑切换到Ubuntu。 下面总结了一些两个系统的常见差异点,包括软…...

24、matlab二维和三维网格(meshgrid函数)以及散点数据插值 griddata()函数

1、二维和三维网格(meshgrid函数) 语法 语法1:[X,Y] = meshgrid(x,y) 基于向量 x 和 y 中包含的坐标返回二维网格坐标。 语法2:[X,Y] = meshgrid(x) 与 [X,Y] = meshgrid(x,x) 相同,并返回网格大小为 length(x)length(x) 的方形网格坐标。 语法3:[X,Y,Z] = meshgrid(x,y,…...

Codeforces Round 950 (Div. 3)

好久没写题解了&#xff0c;今天来写个题解。 A - 问题 Generator #include "bits/stdc.h" using namespace std;#define int long long #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0); #define all(x) x.begin(),x.end() #define pi pair<in…...

弘君资本炒股开户:如何看待股价波动?

在股票商场上股价的动摇无疑是投资者最为关心的话题之一&#xff0c;面临股价的起伏不定投资者往往会感到迷茫和焦虑。关于怎么看待股价动摇&#xff0c;弘君资本下面就为大家详细介绍一下。 股价动摇是股市运行的常态&#xff0c;股市是国民经济的晴雨表&#xff0c;股票价格…...

操作系统实验六 文件系统验证实验

前言 当时由于假期的原因&#xff0c;我们不需要做实验五&#xff0c;所以实验六是我们做的最后一个实验&#xff0c;因此实验五就需要靠大家自己完成了。 1.实验目的 初步掌握Linux系统文件权限和IO操作。 2.实验内容 熟悉Linux系统文件权限和使用相关IO函数进行文件创建和…...

python中的循环控制语句break与continue

学习这两个语句之前&#xff0c;我们要先了解这两个语句是什么意思&#xff1a; break&#xff1a;中断、打破的意思。所以它的跳出循环的意思 continue&#xff1a;继续的意思&#xff0c;意思是跳过当前条件&#xff0c;继续循环 新需求来了&#xff01;我们不仅要告诉 Py…...

C语言笔记23 •文件操作•

1.为什么要使用文件&#xff1f; 文件&#xff0c;顾名思义就是存储我们所写在电脑上的文本内容。如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失 了&#xff0c;等再次运⾏程序&#x…...

新项目来了,JDK 17和JDK 21 该如何选择?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...