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

人脸追踪案例及机器学习认识

1.人脸追踪机器人初制

用程序控制舵机运动的方法与机械臂项目完全相同。
由于摄像头的安装方式为上下倒转安装,我们在编写程序读取图像时需使用 flip 函数将
图像上下翻转。
现在,只需要使用哈尔特征检测得到人脸在图像中的位置,再指示舵机运动,进行
追踪即可。由于一次只能追踪一张人脸,我们可以在 detectMultiScale 函数中使用 cv2.
CASCADE_FIND_BIGGEST_OBJECT(寻找最大的人脸位置)作为 flags 参数的值。
该程序段中,faces 虽然仍是一个元组,但由于只有一张人脸,其长度始终为 1,因
for 循环至多只会遍历一次。循环中,通过左上角坐标和宽、高,即可以计算出人脸所在
位置的中心坐标。当摄像头正对人脸时,人脸位置的中心坐标应该在整个图像的正中,即
(320, 240) 位置。要实现对人脸的实时追踪,只需要让图像中的人脸始终趋于图像正中心即可,即始终让 人脸中心坐标(x0, y0)向 (320, 240) 靠近。 当图像中人脸中心 x 坐标大于 320 时,说明人脸在图像中的右侧,云台应向左转;反 之云台应向右转(注意,我们的摄像头是倒置安装的,flip 函数只将图像的上下翻转了过来, 左右还是反的)。当图像中人脸中心 y 坐标大于 240 时,说明人在图像中的下方,云台应 向下转;反之云台应向上转。控制舵机转向的方式和控制机械臂找物体位置的方式类似,需根据人脸的实时坐标对两个舵机的 PWM 值进行增减。若用 pwm1 和 pwm2 分别表示两个舵机的 PWM 值,则可以这样编写程序:
但每次都调整一个固定值,效果并不理想:若调整值取值太大,容易在中心附近发生剧
烈的晃动;若调整值取值太小,当人脸远离中心时,调整速度又太慢。
为了解决这一问题,一个较简单的方法是让每次的调整值与实际坐标偏离中心的幅度成
正比。
这里,我们让调整值与偏离幅度相关且比值为 6。该值仅供参考,应该根据实际情况进
行调整,最终使云台能较快速地追踪目标,并且尽量减少在中心附近的晃动。为了避免云台
的小幅晃动现象,我们可以划定 (320, 240) 附近的一个小范围均为“中心”,只要目标处
于这一区间,云台就不响应。例如:
至此,我们已经将哈尔特征检测人脸坐标与舵机运动的控制关联起来了,在完整的程序
中,应在图像处理的循环中加入调整舵机位置的语句。
人脸追踪机器人是一个典型的控制系统,系统通过计算摄像头中人脸的测量位置
(输入值)与中心点坐标(目标值)的误差值调整不同的 PWM 值(输出值),控制舵
机运动,进而使得图像中的人脸向目标位置趋近并反复循环这一过程。这种输入值跟随
输出值变化并可以重新调整输出的控制系统被称为闭环控制系统。优秀
的闭环控制系统是自动控制的关键。

2. 什么是机器学习

计算机如何识别一只猫

首先我们要知道,对人工智能系统而言,其核心的工作过程可以被简化为给定一个输入,
经过人工智能的判断,得到一个输出。例如,常见的指纹解锁中,我们将输入的指纹信息交
给人工智能系统,人工智能系统经过比对判断给出一个通过或不通过的输出结果。
  
那么人工智能是依据什么进行判断的呢?
在简单的情形下,我们可以通过程序给定一套规则(算法),人工智能系统只需要依据
这个规则进行判定就行了。例如在避障小车中,我们设定当探测到障碍物距离小于特定值时
转向 90°,否则保持直行。这就是一个极其简单的人工智能判定规则。
由于计算机具有高速运算能力,人工智能可以快速完成很多对于人类来说很麻烦的事情。
但是人类可以轻而易举完成的一些事情,对于计算机来说却有着巨大的障碍,例如从一张图
片中识别一只猫
那么机器该怎么分辨一只图片中的猫呢?
在现在的人工智能系统中,人们常常会通过一定的方式令机器来“学习”从而自行获得
一套进行判断的规则。这种方法被称为“机器学习”,是人工智能的一个重要分支领域。
例如在识别猫的例子,人们会给计算机提供大量的图片告诉它这是猫
或者不是猫,给它一个模型让它自己去学习、分析,自主形成“猫”的概念。经过一定量的
训练后,再给它一张图,它就可以判断图中到底是不是猫了。

机器学习的分类

在机器学习领域,有几种主要的学习方式:监督学习 (supervised learning)、无监
督学习 (unsupervised learing)、半监督学习(semi-supervised learning)、强化学习
(reinforcement learning) 等。
     监督学习是指给定有对应关系的输入、输出数据,让人工智能算法找出两组数据之间的
对应关系。例如在猫狗分类问题中,我们给出多张猫、狗的图片,并完全告诉人工智能系统
这些图片中是猫还是狗,再令系统学习它们的分类模式,这是一种典型的监督学习。在哈尔
特征检测中,我们曾提到,可以依靠计算机训练的方式找到人脸与非人脸图像的哈尔特征差
异,从而实现对人脸的检测。这种训练便是机器学习中的监督学习,它需要我们提供大量事
先标注好的人脸或非人脸的照片。
     无监督学习 是指只提供输入数据而没有对应的输出数据,让人工智能系统自行寻找数据
的关系。例如我们只给出猫、狗的图片却不告诉系统它们的分类,便是无监督学习。
通常来说,无监督学习的难度远高于监督学习,但监督学习却需要付出更多的成本(需
要人工标注大量的数据)。在实际的人工智能项目中,可以根据实际情况选择采用两种方法
中的一个或是混合使用,而这种混合使用又称为“半监督学习”。例如我们既提供已知分类
的猫、狗图片,又提供没有分类的图片,便是半监督学习。
        但是在某些情况下,人们以人工智能为核心系统操控机器人解决实际的复杂问题时,往
往只知道需要完成的目标,并不能直接提供输入 / 输出值。此时,我们可以令机器人随机地
自行控制动作得到相对应的目标反馈结果。人工智能系统将判断其控制的动作与反馈结果间
的关联,进而做出合理的调整,最终不断优化其动作,得到更好的结果。
       例如训练让机器人投篮入筐或是射门入网,先让它随机做动作,然后根据一定的反馈得
知投篮是否进筐或射门是否入网,然后不断调整、优化动作,最终达到百发百中。
       这种机器自主学习的方式被称为“强化学习”,它可以在自主行动的基础上,根据正负
反馈的情况不断强化自身

3.认识人工神经网络

     借助机器学习的方法,我们可以经过训练得到人脸的哈尔特征。这些特征虽然足以区分
人脸与非人脸,却难以区分不同人的人脸——它们的相似性远高于人脸和其他图像的相似性。
要识别特定的人脸,使用预先设定的数学方法配合机器学习已经难以完成。为解决这一问题,
一个典型的方法是使用人工神经网络工具
人工智能机器学习机制的本质是根据多组已知的输入值(例如不同人脸的照片)和输
出值(例如它们对应的人的名字)来自行找出它们之间的对应关系,从而通过其他输入值
预测出新的对应输出值。多数情况下,影响输出值的输入值都有多个,只要我们找到所有
的输入值以及它们各自的权重系数,理论上我们就可以预测任意一次输入情况下对应的输
出值。例如:

   输出值 = 权重 1 × 输入值 1+ 权重 2 × 输入值 2+……+ 权重n × 输入值n

这里,每一个输入值都按照一定的比值影响输出值,它们的影响程度表现为各自对应的
权重。采用这种方式归纳的输入 / 输出关系被称为多元线性回归。之所以称
为线性,是因为在这里输入值都被直接乘以一个常数而没有采用平方、立方或是正弦、对数
等数学变换
多元线性回归的数学计算比较简单,但它往往不能用于描述绝大多数真实的问题。基于
多元线性回归,计算机科学家们在 20 世纪中叶基于生物神经细胞提出了一种名为感知器的
模型,它是人工神经网络的雏形。
在介绍人工神经网络之前,我们先来简单了解一下人类的神经元(神经细胞)的结构。
神经元可以简单分为细胞体、树突、轴突几部分。经过细胞体处理的神经信号经由轴突传递
到突触结构,再通过大量的突触传递给其他神经细胞的树突
神经信号在传递过程中被突触以不同强度处理后传递给树突,大量树突接收的信号结合
起来就构成了细胞体接收到的神经信号。细胞体最终决定以怎样的强度输出该信号。
而模拟生物神经细胞结构的感知器的结构如图
输入值相当于神经信号,这些神经信号经过突触依照不同的权重处理后被这个神经元的
树突接收。大量树突接收到的信号被细胞体获得后,它将根据一个“激活函数”来决定最终
输出的强度。激活函数通常是一个非线性的函数,它将可以使得我们用多元线性回归得到的
取值非线性化。因此,感知器模型可以处理一些简单的非线性问题,比普通的多元线性回归
适用性更广。
但单一的感知器仍不能处理许多复杂的问题,计算机科学家们于是将多个感知器(神经
元)结合到一起,构成一个简单的人工神经网络,在计算机科学领域也可简称为神经网络。
在最简单的人工神经网络系统中,每个神经元在接收信号后,根据不同的权重生成一系
列“输出值”,这些值又作为输入值生成最终的输出值。这些处于原始输入值和最终输出值
之间的值通常也被称为中间值。
我们常用“层”的概念来描述人工神经网络中的数据,原始输入数据构成输入层,最终
的输出数据构成输出层,而中间所有起到中介作用的数据构成隐藏层,它们
一般是由计算机通过机器学习机制自主训练得到的,我们可以将其视为一个隐藏起来的“黑
箱”。
从输入层到隐藏层的每一个中间值节点或是从隐藏层到输出层的转换事实上都构成了一
感知器(神经元),这便是人工神经网络名称的由来。由于每一个感知器中均包含了一个
非线性的激活函数,最终的输出值受到了多个激活函数的影响,这使得人工神经网络模型从
理论上来说可以完成任何情形下的现实模拟。
需要注意的是,基本的人工神经网络虽然在结构上非常类似于生物神经网络,但其中信
号传递的过程事实上与生物神经网络差异巨大。因此,人工神经网络并不是生物神经网络在
计算机中的再现,二者只存在结构上的相似性。
如果一个系统中包含多个层次的中间值,每层中间值之间都由不同权重序列和激活函数
串联,就构成了一个深度神经网络
深度神经网络在解决部分复杂问题时被证明很有效果。包括人脸识别在内的大量图像识
别技术、语音识别技术、机器翻译及大家熟知的 AlphaGo 都是应用深度神经网络进行训练
的典范。运用深度神经网络进行机器学习也被称为深度学习。
回到识别人脸的问题上,若将大量不同人脸的图像信息视为输入值,将区分不同人脸的
结果作为输出值,只要可供学习的图像足够多,人工神经网络就可以准确地区分不同人脸。
为了实际使用方便,我们可以从人工神经网络的训练过程中得到它用于区分不同人脸的特征
信息以及它们的计算方法,再在实时检测中直接计算出图像的特征信息进行比较即可
需要注意的是,人工智能得到的特征信息并不是我们用来区分人脸的眼睛大小、鼻子高
低等特征,而往往是一些数学信息。利用人工神经网络工具识别人脸并不需要知道这些计算
出来的特征信息所代表的现实意义。
人工神经网络,尤其是深度神经网络存在着一个巨大的缺点:运算量极大,因此运算极
慢。这也是这项提出超过大半个世纪的技术直到近年来随着计算机运算能力的不断提升才逐
渐发展起来的根本原因。
为了减少运算量、提升运行的效率,人们发展出了一些有效的辅助方法。诸如卷积神经
网络、递归神经网络等方法被证明在图像识别领域、机器翻译领域等方面有着出色表现。
此外,人工神经网络还有另一个缺点——效果极大程度上依赖于输入数据的数量和质量,
也导致了没有巨量数据的个人很难得到有效的结果。但从另一个角度来说,恰恰因为这个原
因,人工神经网络近年来的快速发展推动了大数据概念的火爆,数据量成为了科技巨头公司
争抢的关键

4.识别特定的人脸

人脸识别的问题也是人工智能领域的热门问题,Python 第三方包 Face
Recognition 便利用了开源的训练成果,可以直接将人脸图像转换为 128 个特征信息并用
于区分不同人脸。
在编写程序之前,首先需要导入一张包含已知人物面部的图片以供检测对比,导入的图

片最好只包含一张人脸。如果没有照片,可以先用 OpenCV 拍一张自己的正脸照片。

imwrite 函数可以将图像保存到指定地址,参数分别为存储地址和图像信息。存储地址
应包含文件的名称和格式,通常选择 jpg 或 png 格式即可。上面的程序可以实现按下键盘
s 键则将当前摄像头帧存储到指定地址。
接下来,我们先提取这张图片的人脸特征。使用下面的语句可以非常轻松地对一张图像
的信息进行面部检索与编码

OpenCV 中内置的 imread 函数可以读取出一张图片中的图像信息,其参数为图片的
存储位置。 face_recognition 包中的 face_encodings 函数可以对图像信息中的人脸进行检索并 转化为前面提到的 128 个特征信息数据,这个转化过程可以被称为编码。
face_encodings 函数接受的图像信息需要按照 RGB 的顺序排列,这与 OpenCV 默
认的 BGR 顺序不同,因此可以先用 cvtColor 函数进行转换(参数设定为 cv2.COLOR_
BGR2RBG)。face_encodings 函数的返回值是一个列表,其包括从图像上找到的所有
人脸对应的特征信息序列。
在载入已知人脸图像的特征信息后,我们就可以将实时摄像头中捕获到的人脸信息与之
对比。在实时检测中,如果对每一帧都使用 face_encodings 函数进行编码,这个进程将
非常缓慢,完全失去实时性。为了提高检测速度,我们仍可以先用 HAAR 特征检测找到人
脸的位置,再直接对这个区域进行编码
这里,为方便起见,我们假定需要比对的人脸只有一个,因此 detectMultiScale 函数
使用了 cv2.CASCADE_FIND_BIGGEST_OBJECT(寻找最大目标)参数,并返回其
位置信息,依序由左上角 x 坐标、左上角 y 坐标、宽度、高度构成。
face_encodings 函数可以接受第二个参数:人脸的位置。设定这个参数后,face_
encodings 函数将不再检测人脸位置而是直接计算出这个位置人脸的特征信息。需要注意
的是,face_encodings 函数接受的位置信息需要按照左上角 y 坐标、右下角 x 坐标、右下
y 坐标、左上角 x 坐标的顺序排列。这些信息可以是一组或多组(即可以指定多个人脸
的位置信息)。因此我们需要先把 HAAR 特征人脸检测得到的人脸位置信息转换成 face_
encodings 函数能接受的位置信息
注意,这里传入 face_encodings 函数的位置序列处于一个长度为 1 的列表 face_
locations 中,我们对它使用 append 函数将需要的位置序列加入其中。此外,传入的位置
信息必须为整数型,需先用 int 函数强制转换。
现在,我们已经完成了人工智能识别人脸的第三个步骤:特征提取,接下来只需要将特
征与已知信息比较,完成特征的匹配与识别即可
face_recognition 包中预置了一个 compare_faces 函数,可以非常方便地进行比较
判断,例如:
函数可接收 3 个参数:预置的已知人脸特征信息(可以是一组或多组信息)、待比较
的人脸特征信息(只能是一组)、容忍率。
已知人脸信息就是我们此前保存的照片编码后得到的信息,待比较的人脸信息则是摄像
头实时检测并编码的人脸信息。不过,在我们前面的程序中,face_encodings 函数的返回
值是一个长度为 1 的列表,将它传入 compare_faces 函数之前还需要用 for 循环取出其中
的元素。容忍率则表示判断的标准,值越大,判断越宽松,但也越可能错判;值越小,判断
越严苛,但也越可能漏判。0.5 是针对东亚人脸的参考值,但也可根据实际情况调整。
函数的返回值是一个列表,它依序将待比较人脸与所有设定的已知人脸相比较并得到
True 或 False 的结果,表示判断是或不是同一个人。本例中,由于已知人脸只有一张,该
返回值的长度为 1,若要判断是否是同一人,只需要判断返回之中是否存在 True 即可。在
Python 中,“某值 in 某列表或元组”将返回这个列表或元组中是否包含某值的逻辑判断结果。
这里,我们对实时图像中的人脸与已知人脸进行比较,如果成功,则用 face_
locations[0] 直接取出该人脸的坐标并绘制矩形框。识别特定人脸的完整的程序如下。
import cv2
import face_recognition
# 载入包含你面部的图片并对它编码
my_image = cv2.imread("/home/pi/photos/1.jpg")
my_image = cv2.cvtColor(my_image, cv2.COLOR_BGR2RGB)
my_face_encoding = face_recognition.face_encodings(my_image)
# 载入人脸分类器
face_cascade = cv2.CascadeClassifier('/home/pi/cascade/haarcascade_
frontalface_default.xml')
cap = cv2.VideoCapture(0) # 开始读取摄像头信号
while cap.isOpened():(ret, frame) = cap.read() # 读取每一帧视频图像为 frameframe = cv2.flip(frame, 0) # 将图像上下镜像翻转gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将图像转换为灰度图faces = face_cascade.detectMultiScale(gray, minSize=(100, 100), 
flags=cv2.CASCADE_FIND_BIGGEST_OBJECT) # 检测人脸的位置face_locations = [] # 定义一个列表存储人脸的位置信息for (left, top, width, height) in faces: # 遍历找到的人脸的位置信息# 计算出右下角的坐标right = left + widthbottom = top + height# 为 face_locations 添加一个人脸的位置信息,注意需要强制转换为 int 类型face_locations.append((int(top), int(right), int(bottom), 
int(left)))rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 得到每一帧的 RGB
图像信息face_encodings = face_recognition.face_encodings(rgb_frame, face_
locations) # 计算特定位置的人脸特征信息for face_encoding in face_encodings: # 遍历得到的所有人脸特征信息matches = face_recognition.compare_faces(my_face_encoding, 
face_encoding, tolerance=0.5) # 将它与已知的人脸进行比较if True in matches: # 如果检测成功(top, right, bottom, left) = face_locations[0] # 获得该人脸的
位置信息cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 
255), 2) # 绘制矩形框cv2.imshow("Recognition", frame) # 预览图像cv2.waitKey(5) # 每帧等待 5 毫秒
cap.release()
cv2.destroyAllWindows()

相关文章:

人脸追踪案例及机器学习认识

1.人脸追踪机器人初制 用程序控制舵机运动的方法与机械臂项目完全相同。 由于摄像头的安装方式为上下倒转安装,我们在编写程序读取图像时需使用 flip 函数将 图像上下翻转。 现在,只需要使用哈尔特征检测得到人脸在图像中的位置,再指示舵机运…...

鸿蒙开发理论之页面和自定义组件生命周期

1、自定义组件和页面的关系 页面:即应用的UI页面。可以由一个或者多个自定义组件组成,Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个Entry。只有被Entry装饰的组件才可以调用页面的生命周期。自…...

docker-compose部署gitlab和jenkins

通过docker-compose部署gitlab和jenkins,方便后续工作 注意: gitlab占用资源较多,最好系统内存在8G以上,CPU4核心以上,否则gitlab有可能报错无法启动。docker版本用最新版本,低版本的docker可能会导致doc…...

Pytorch 复习总结 1

Pytorch 复习总结,仅供笔者使用,参考教材: 《动手学深度学习》 本文主要内容为:Pytorch 张量的常见运算、线性代数、高等数学、概率论。 Pytorch 张量的常见运算、线性代数、高等数学、概率论 部分 见 Pytorch 复习总结 1&…...

谷歌免费开放模糊测试框架OSS-Fuzz(物联网、车联网、供应链安全、C/C++)

目录 模糊测试的智能化和自动化 模糊测试不能代替安全设计原则 AI驱动的漏洞修补...

华为配置内部人员接入WLAN网络示例(802.1X认证)

配置内部人员接入WLAN网络示例(802.1X认证) 组网图形 图1 配置802.1X认证组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 用户接入WLAN网络,使用802.1X客户端进行认证,输入正确的用户名和密…...

EXCEL中如何调出“数据分析”的菜单

今天发现,原来WPS还是和EXCEL比,还是少了“数据分析”这个日常基本做统计的菜单,只好用EXCEL了,但奇怪发现我的EXCEL中没发现这个菜单,然后查了下,才发现,要用如下的方法打开: 1&…...

基于Qt的人脸识别项目(功能:颜值检测,口罩检测,表情检测,性别检测,年龄预测等)

完整代码链接在文章末尾 效果展示 代码讲解(待更新) qt图片文件上传 #include <QtWidgets> #include <QFileDialog>...

书生谱语-大语言模型测试demo

课程内容简介 通用环境配置 开发机 InterStudio 配置公钥 在本地机器上打开 Power Shell 终端。在终端中&#xff0c;运行以下命令来生成 SSH 密钥对&#xff1a; ssh-keygen -t rsa您将被提示选择密钥文件的保存位置&#xff0c;默认情况下是在 ~/.ssh/ 目录中。按 Enter …...

2024-02-12 Unity 编辑器开发之编辑器拓展3 —— EditorGUI

文章目录 1 GUILayout2 EditorGUI 介绍3 文本、层级、标签、颜色拾取3.1 LabelField3.2 LayerField3.3 TagField3.4 ColorField3.5 代码示例 4 枚举选择、整数选择、按下按钮4.1 EnumPopup / EnumFlagsField4.2 IntPopup4.3 DropdownButton4.4 代码示例 5 对象关联、各类型输入…...

shell脚本编译与解析

文章目录 shell变量全局变量&#xff08;环境变量&#xff09;局部变量设置PATH 环境变量修改变量属性 启动文件环境变量持久化 ./和. 的区别脚本编写判断 和循环命令行参数传入参数循环读取命令行参数获取用户输入 处理选项处理简单选项处理带值选项 重定向显示并且同时输出到…...

第64讲个人中心用户操作菜单实现

静态页面 <!-- 用户操作菜单开始 --><view class"user_menu"><!-- 订单管理开始 --><view class"order_wrap"><view class"order_title">我的订单</view><view class"order_content"><n…...

线性代数的本质——1 向量

向量是线性代数中最为基础的概念。 何为向量&#xff1f; 从物理上看&#xff0c; 向量就是既有大小又有方向的量&#xff0c;只要这两者一定&#xff0c;就可以在空间中随便移动。 从计算机应用的角度看&#xff0c;向量和列表很接近&#xff0c;可以用来描述某对象的几个不同…...

工业以太网交换机引领现代工厂自动化新潮流

随着科技的飞速发展&#xff0c;现代工厂正迎来一场前所未有的自动化变革&#xff0c;而工业以太网交换机的崭新角色正是这场变革的关键组成部分。本文将深入探讨工业以太网交换机与现代工厂自动化的紧密集成&#xff0c;探讨这一集成如何推动工业生产的智能化、效率提升以及未…...

Linux第46步_通过“添加自定义菜单”来学习menuconfig图形化配置原理

通过“添加自定义菜单”来学习menuconfig图形化配置原理&#xff0c;将来移植linux要用到。 自定义菜单要求如下: ①、在主界面中添加一个名为“My test menu”&#xff0c;此菜单内部有一个配置项。 ②、配置项为“MY TESTCONFIG”&#xff0c;此配置项处于菜单“My test m…...

推荐高端资源素材图库下载平台整站源码

推荐高端图库素材下载站的响应式模板和完整的整站源码&#xff0c;适用于娱乐网资源网。该模板支持移动端&#xff0c;并集成了支付宝接口。 演示地 址 &#xff1a; runruncode.com/tupiao/19692.html 页面设计精美&#xff0c;不亚于大型网站的美工水准&#xff0c;并且用户…...

Redis实现:每个进程每30秒执行一次任务

前言 项目中要实现每一进程每30秒执行一次 代码实现: public class DistributedScheduler {private final RRedisClient redisson;private final String processKeyPrefix; // 例如 "process_"public DistributedScheduler(RRedisClient redisson) {this.redisson…...

【AI之路】使用RWKV-Runner启动大模型,彻底实现大模型自由

文章目录 前言一、RWKV-Runner是什么&#xff1f;RWKV-Runner是一个大语言模型的启动平台RWKV-Runner官方功能介绍 二、使用步骤1. 下载文件 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; ChatGPT的横空出世&#xff0c;打开了AI的大门&#xff…...

Dockerfile和.gitlab-ci.yml文件模板

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

Linux--基础开发工具篇(2)(vim)(配置白名单sudo)

目录 前言 1. vim 1.1vim的基本概念 1.2vim的基本操作 1.3vim命令模式命令集 1.4vim底行命令 1.5 异常问题 1.6 批量注释和批量去注释 1.7解决普通用户无法sudo的问题 1.8简单vim配置 前言 在前面我们学习了yum&#xff0c;也就是Linux系统的应用商店 Linux--基础开…...

Learn LaTeX 017 - LaTex Multicolumn 分栏

在科学排版中进行分栏操作&#xff0c;能够有效的利用页面中的空间&#xff0c;避免空白位置的浪费。 好的分栏设计能对你的排版增色不少&#xff01; https://www.ixigua.com/7298100920137548288?id7307237715659981346&logTag949adb699806392430bb...

Android 9.0 禁用adb install 安装app功能

1.前言 在9.0的系统产品定制化开发中,在进行一些定制开发中,对于一些app需要通过属性来控制禁止安装,比如adb install也不允许安装,所以就需要 熟悉adb install的安装流程,然后来禁用adb install安装功能,接下来分析下adb 下的安装流程 2.禁用adb install 安装app功能的…...

华为第二批难题五:AI技术提升六面体网格生成自动化问题

有CAE开发商问及OCCT几何内核的网格方面的技术问题。其实&#xff0c;OCCT几何内核的现有网格生成能力比较弱。 HybridOctree_Hex的源代码&#xff0c;还没有仔细去学习。 “HybridOctree_Hex”的开发者说&#xff1a;六面体网格主要是用在数值模拟领域的&#xff0c;比如汽车…...

【FFmpeg】ffplay 命令行参数 ⑤ ( 设置音频滤镜 -af 参数 | 设置统计信息 -stats 参数 | 设置同步时钟类型 -sync 参数 )

文章目录 一、ffplay 命令行参数 - 音频滤镜1、设置音频滤镜 -af 参数2、常用的 音频滤镜 参数3、音频滤镜链 示例 二、ffplay 命令行参数 - 统计信息1、设置统计信息 -stats 参数2、关闭统计信息 -nostats 参数 三、ffplay 命令行参数 - 同步时钟类型1、设置同步时钟类型 -syn…...

vscode开发FPGA(0)--windows平台搭建

一、从官网下载安装VScode Download Visual Studio Code - Mac, Linux, Windows 二、安装配置插件 1. 安装Chinese&#xff08;simplified&#xff09;中文汉化包 2.安装Verilog-HDL/systemVerilog插件(支持verilog语法) 3.配置CTags Support插件(支持代码跳转) 1)在github下…...

Java String源码剖析+面试题整理

由于字符串操作是计算机程序中最常见的操作之一&#xff0c;在面试中也是经常出现。本文从基本用法出发逐步深入剖析String的结构和性质&#xff0c;并结合面试题来帮助理解。 String基本用法 在Java中String的创建可以直接像基本类型一样定义&#xff0c;也可以new一个 Str…...

探索未来:集成存储器计算(IMC)与深度神经网络(DNN)的机遇与挑战

开篇部分&#xff1a;人工智能、深度神经网络与内存计算的交汇 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为科技领域的一股强大力量&#xff0c;而深度神经网络&#xff08;DNN&#xff09;则是AI的核心引擎之一。DNN是一种模仿人类神经系统运作…...

[C/C++] -- CMake使用

CMake&#xff08;Cross-platform Make&#xff09;是一个开源的跨平台构建工具&#xff0c;用于自动生成用于不同操作系统和编译器的构建脚本。它可以简化项目的构建过程&#xff0c;使得开发人员能够更方便地管理代码、依赖项和构建设置。 CMake 使用一个名为 CMakeLists.tx…...

笔记本选购配置参数详解

笔记本电脑的选购是一个技术活&#xff0c;涉及到众多的配置参数。本文将为您详细解析笔记本电脑的主要配置参数&#xff0c;帮助您在选购时做出明智的决策。 1. 处理器&#xff08;CPU&#xff09; 处理器是笔记本电脑的核心组件&#xff0c;负责执行计算任务…...

临睡之际的生死思索与生命哲学的启示

在人类生存体验中&#xff0c;有一种独特而深邃的感受——当人们准备进入梦乡时&#xff0c;会担忧第二天醒来是否还能感知到生命的律动。这种“入睡即未知”的心理状态&#xff0c;既是生命无常的深刻体现&#xff0c;也是对个体生命价值、生活态度及人生哲学的一种深度拷问。…...

QT学习(五)C++函数重载

一、 函数重载 在同一个作用域内&#xff0c;可以声明几个功能类似的同名函数&#xff0c; 这些同名函数的形式参数&#xff08;指参数的个数、类型或者顺序&#xff09;必须不同。您不能仅通过返回类型的不同来 重载函数。 下面的实例中&#xff0c;同名函数 print() 被用…...

微服务OAuth 2.1扩展额外信息到JWT并解析(Spring Security 6)

文章目录 一、简介二、重写UserDetailsService三、Controller解析JWT获取用户信息四、后记 一、简介 VersionJava17SpringCloud2023.0.0SpringBoot3.2.1Spring Authorization Server1.2.1Spring Security6.2.1mysql8.2.0 Spring Authorization Server 使用JWT时&#xff0c;前…...

Python@setter用法介绍

Pythonsetter是Python编程语言中的一个关键属性&#xff0c;它简化了Python开发者的编程过程&#xff0c;提高了编程效率。 一、Pythonsetter是什么 Pythonsetter是Python语言中的一个属性&#xff0c;它允许程序员设置Python中的类成员变量。在Python中&#xff0c;属性&…...

格子表单GRID-FORM | 文档网站搭建(VitePress)与部署(Github Pages)

格子表单/GRID-FORM已在Github 开源&#xff0c;如能帮到您麻烦给个星&#x1f91d; GRID-FORM 系列文章 基于 VUE3 可视化低代码表单设计器嵌套表单与自定义脚本交互文档网站搭建&#xff08;VitePress&#xff09;与部署&#xff08;Github Pages&#xff09; 效果预览 格…...

mac无法往硬盘里存东西 Mac硬盘读不出来怎么办 Mac硬盘格式 硬盘检测工具

mac有时候会出现一些问题&#xff0c;比如无法往硬盘里存东西&#xff0c;或者无法往硬盘上拷贝文件。这些问题会给用户带来很大的困扰&#xff0c;影响正常的工作和学习。那么&#xff0c;mac无法往硬盘里存东西&#xff0c;mac无法往硬盘上拷贝怎么办呢&#xff1f;软妹子将为…...

DataX源码分析 reader

系列文章目录 一、DataX详解和架构介绍 二、DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 文章目录 系列文章目录前言Reader组件如何处理…...

openssl3.2 - exp - RAND_bytes_ex

文章目录 openssl3.2 - exp - RAND_bytes_ex概述笔记END openssl3.2 - exp - RAND_bytes_ex 概述 生成随机数时, 要检查返回值是否成功, 不能认为一定是成功的(官方文档上有说明). 生成随机数的API, 和库上下文有关系, 使用RAND_bytes_ex()比RAND_bytes()好些. 笔记 /*! * …...

Oracle中怎么设置时区和系统时间

在Oracle数据库中&#xff0c;设置时区和系统时间可以通过多种方法实现。下面是一些常见的方法&#xff1a; 1. 设置数据库的时区 Oracle数据库允许你为每个会话或整个数据库设置时区。 a. 为整个数据库设置时区 你可以使用ALTER DATABASE语句为整个数据库设置时区。例如&a…...

常见的物联网操作系统介绍

物联网&#xff08;Internet of Things&#xff0c;IoT&#xff09;是指将各种物理设备、车辆、家用电器、工业设备等通过网络连接起来&#xff0c;实现数据交换和通信的技术。物联网操作系统是管理这些设备并使其能够相互通信的软件平台。以下是一些常见的物联网操作系统&…...

二级C语言笔试10

(总分101,考试时间90分钟) 一、选择题 1. 设有如下关系表&#xff1a; A) TR∩S B) TR∪S C) TRS D) TR/S 2. 在一棵二叉树中&#xff0c;叶子结点共有30个&#xff0c;度为1的结点共有40个&#xff0c;则该二叉树中的总结点数共有( )个。 A) 89 …...

【WebSocket】微信小程序原生组件使用SocketTask 调用星火认知大模型

直接上代码 微信开发者工具-调试器-终端-新建终端 进行依赖安装 npm install base-64 npm install crypto-js 然后顶部工具栏依次点击 工具-构建npm // index.js const defaultAvatarUrl https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQ…...

[1-docker-01]centos环境安装docker

官方参考文档 可以在官方docker桌面版本指导文档里找到适合自己的电脑平台进行参考&#xff0c;或者你是老司机的话直接自己上车。 如果不需要桌面版&#xff0c;也可以在官方docker engine版本指导文档里找到适合自己的平台进行参考&#xff0c;同样&#xff0c;老司机可以自…...

深度学习基础之《深度学习介绍》

一、深度学习与机器学习的区别 1、特征提取方面 机器学习&#xff1a;人工特征提取 分类算法 深度学习&#xff1a;没有人工特征提取&#xff0c;直接将特征值传进去 &#xff08;1&#xff09;机器学习的特征工程步骤是要靠手工完成的&#xff0c;而且需要大量领域专业知识…...

4核8g服务器能支持多少人访问?2024新版测评

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线&#xff1f;通用型-4核8G-180G-2000G&#xff0c;2000GB月流量&#xff0c;系统盘为180GB SSD盘&#xff0c;12M公网带宽&#xff0c;下载速度峰值为1536KB/s&#xff0c;即1.5M/秒&#xff0c;假设网站内页平均大小为60KB…...

Linux中pipe管道操作

管道的读写操作&#xff1a; 读操作&#xff1a; ​​​有数据&#xff1a;read正常读&#xff0c;返回读出的字节数无数据&#xff1a;1 写段全部关闭&#xff1a;read解除阻塞&#xff0c;返回0&#xff0c;相当于文件读到了尾部 2 写段没有全部关闭&#xf…...

中年中产程序员从西安出发到海南三亚低成本吃喝万里行:西安-南宁-湛江-雷州-徐闻-博鳌-陵水-三亚-重庆-西安(2.游玩过程)

文章大纲 出发时间&#xff1a;Day1-1月25日星期四&#xff0c;西安飞南宁路途中&#xff1a;Day2-1月26日星期五&#xff0c;南宁-湛江-住雷州&#xff08;曾经支教过的地方&#xff09;【晚上买徐闻到海安新港】路途中&#xff1a;Day3-1月27日星期六&#xff0c;雷州-徐闻渡…...

day38 面向对象编程、构造函数等(纯概念)

目录 深入对象构造函数实例成员静态成员内置构造函数ObjectArray包装类型StringNumber 深入对象 了解面向对象的基础概念&#xff0c;能够利用构造函数创建对象。 构造函数 构造函数是专门用于创建对象的函数&#xff0c;如果一个函数使用 new 关键字调用&#xff0c;那么这…...

nginx用域名http://xx.com/aaa/代理一个网页http://ff.com但是请求资源时发生404

哎&#xff0c;还得是chatgpt&#xff0c;难道就没有人有这种使用场景吗&#xff1f;没查到一个配置是有效的。 我&#xff1a; 我配置了nginx反向代理&#xff0c;用域名http://xx.com/aaa/代理一个网页http://ff.com&#xff0c; 但是请求资源时发生404&#xff0c;如何解决&…...

NLP_词的向量表示Word2Vec 和 Embedding

文章目录 词向量Word2Vec&#xff1a;CBOW模型和Skip-Gram模型通过nn.Embedding来实现词嵌入Word2Vec小结 词向量 下面这张图就形象地呈现了词向量的内涵:把词转化为向量&#xff0c;从而捕捉词与词之间的语义和句法关系&#xff0c;使得具有相似含义或相关性的词语在向量空间…...

python:xml.etree 生成思维导图 Freemind文件

请参阅&#xff1a;java : pdfbox 读取 PDF文件内书签 或者 python&#xff1a;从PDF中提取目录 请注意&#xff1a;书的目录.txt 编码&#xff1a;UTF-8&#xff0c;推荐用 Notepad 转换编码。 xml 是 python 标准库&#xff0c;在 D:\Python39\Lib\xml\etree python 用 xm…...