Python人脸识别库DeepFace使用教程及源码解析
目录
一、DeepFace介绍
1、人脸库设计
2、DeepFace.find
3、DeepFace.verify
4、DeepFace.analyze
5、DeepFace.extract_faces
6、DeepFace.represent
7、DeepFace.stream
二、DeepFace二次开发
1、开发活体检测API
2、模型权重持久化
三、总结
一、DeepFace介绍
DeepFace是一个用于人脸识别和面部属性分析的 Python 库。它是建立在深度学习模型之上,提供了简单易用的接口,用于处理各种面部相关的任务,如验证两张脸是否属于同一人、识别面部表情、检测年龄和性别等。
安装方式:
pip install deepface
DeepFace提供了以下几种人脸识别相关的API:
DeepFace.find:用于人脸库检索
DeepFace.verify:用于两张人脸比较
DeepFace.analyze:用于人脸属性分析
DeepFace.extract_faces:用于人脸目标检测
DeepFace.represent:用于人脸特征提取
DeepFace.stream:用于人脸实时分析
1、人脸库设计
以下是本人设计的人脸库存储结构,在face_database目录下,每个子目录代表某一个人的人脸图片,可以存放正脸、侧脸等不同角度照片,其中info.json存储了该人物的所有信息,比如姓名、手机号、出生年月等等信息,子目录名称是基于唯一标识(例如手机号)通过md5生成的散列值。
work_space
├── face_database
│ ├──682f1d4d333c228f02199c86dd385528
│ │ ├──0000.jpg
│ │ ├──0001.jpg│ │ ├──info.json
│ ├──992bd729860ab5603d3133bc7108991e
│ │ ├──0000.jpg│ │ ├──info.json
…
2、DeepFace.find
DeepFace.find主要用于在一组人脸图像(可以是一个图像数据库)中查找与给定的一张人脸图像相似的人脸。例如,在一个拥有大量员工照片的公司数据库中,使用一张未知身份员工的近照通过DeepFace.find来找到该员工在数据库中的其他照片,进而确定该员工的身份。
DeepFace.find返回一个包含查找结果的list(List[pd.DataFrame]),其中每个元素是Pandas DataFrame类型,DataFrame的每一行都对应着一张在数据库中找到的相似人脸,包含人脸图像的相关信息(如图像路径等)以及和输入人脸的距离,该距离用于衡量找到的人脸与输入人脸的相似程度,距离越近表示越相似。
from deepface import DeepFace# 数据库图像路径列表
database_path = 'face_database'
query_image_path = "query_image.jpg"results = DeepFace.find(image_path,database_path,enforce_detection=False,)[0]for _, row in results.iterrows():print(f"找到的相似人脸路径:{row['identity']},距离:{row['distance']}")
DeepFace.find函数的代码逻辑在DeepFace包的路径下的“modules\recognition.py”文件中,首先对人脸库路径下缓存的pkl文件提取所有人脸图片的特征向量,这些特征包含了面部的轮廓、五官的形状和位置、皮肤纹理等细节信息:
然后通过representation.represent函数对输入图像query_image_path提取特征向量,与人脸库的所有特征向量逐一计算距离,通过阈值target_threshold筛选所有距离小于阈值的人脸库图片,注意最后输出结果是按照距离从小到大升序的,如果只想获取距离最近的结果则提取DataFrame的第一行即可。
3、DeepFace.verify
DeepFace.verify是DeepFace库中的一个函数,主要用于验证两张人脸图像是否属于同一个人。
DeepFace.verify的代码逻辑在“modules\verification.py”文件中,与DeepFace.find类似,也是通过representation.represent函数分别对输入的两张图片提取特征向量,然后通过相应的距离计算函数生成两张图片的距离,距离小于预设阈值,则判定为同一个人。
from deepface import DeepFace# 两张人脸图像的路径,这里假设是本地的图像文件
img1_path = "path/to/image1.jpg"
img2_path = "path/to/image2.jpg"result = deepface.verify(img1_path, img2_path, enforce_detection=False)
if result["verified"]:print("这两张脸属于同一个人。")
else:print("这两张脸不属于同一个人。")print("距离:", result.get("distance"))
返回的结果示例如下:
{'verified': True, 'distance': 0.5409709948424768, 'threshold': 0.68, 'model': 'VGG-Face','detector_backend': 'opencv', 'similarity_metric': 'cosine','facial_areas': {'img1': {'x': 0, 'y': 5, 'w': 182, 'h': 221, 'left_eye': (127, 82), 'right_eye': (40, 90)},'img2': {'x': 0, 'y': 0, 'w': 683, 'h': 755, 'left_eye': (493, 244), 'right_eye': (170, 266)}},'time': 1.49}verified表明输入的两张人脸是否被判定为属于同一个人。
distance表示两张人脸特征向量之间的距离度量值。
threshold是判定两张人脸是否属于同一人的阈值。
model代表用于提取人脸特征的深度学习模型名称,可选:VGG-Face, Facenet, Facenet512, OpenFace, DeepFace, DeepID, Dlib, ArcFace, SFace and GhostFaceNet。
detector_backend表示用于检测图像中人脸位置的方法,可选:Options: 'opencv', 'retinaface', 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip'。
similarity_metric指定用于计算两张人脸特征向量之间相似度的度量方法。
facial_areas包含了输入的两张人脸图像(分别标记为img1和img2)中人脸的位置信息以及眼睛的位置信息。
time表示整个过程所花费的时间。
4、DeepFace.analyze
DeepFace.analyze能够对输入的人脸图像进行多维度的分析,包括表情识别、年龄估计、性别识别、种族识别等。这在很多领域都有广泛的应用,例如在市场调研中,通过分析消费者的表情来判断对产品的喜好程度;在安防监控中,对人员的年龄、性别等信息进行初步判断。
表情、性别、种族的识别实际上是二分类或多分类任务,年龄识别则是一个回归任务。
from deepface import DeepFaceimg_path = "path/to/face_image.jpg"
analysis_result = DeepFace.analyze(img_path, enforce_detection=False)
print("表情:", analysis_result.get("dominant_emotion"))
print("年龄:", analysis_result.get("age"))
print("性别:", analysis_result.get("dominant_gender"))
print("种族:", analysis_result.get("dominant_race"))
返回的结果示例如下:
[{'emotion': {'angry': 0.7418791274356322, 'disgust': 5.340072880214408e-05, 'fear': 89.25175602744555, 'happy': 0.01589643601781866, 'sad': 0.0007775448929871182, 'surprise': 9.989639967062471, 'neutral': 1.7639903034977293e-06}, 'dominant_emotion': 'fear', 'region': {'x': 0, 'y': 5, 'w': 182, 'h': 221, 'left_eye': (127, 82), 'right_eye': (40, 90)}, 'face_confidence': 0.94, 'age': 28, 'gender': {'Woman': 0.02528490440454334, 'Man': 99.9747097492218}, 'dominant_gender': 'Man', 'race': {'asian': 79.76993322372437, 'indian': 2.4958742782473564, 'black': 0.7977190427482128, 'white': 7.959078252315521, 'middle eastern': 1.5946529805660248, 'latino hispanic': 7.382745295763016}, 'dominant_race': 'asian'}]
DeepFace.analyze的代码逻辑在“modules\demography.py”文件中,通过加载action对应的模型,再由predict方法对输入的np.ndarray类型图像进行推理。例如,表情识别的模型加载及推理代码在“modules\demography\Emotion.py”文件中,基于tensorflow或keras构建一个3层卷积+3层全连接层的模型,通过softmax函数进行7分类。
5、DeepFace.extract_faces
DeepFace.extract_faces主要用于在给定的图像中检测人脸的位置和提取人脸区域,能够帮助后续的人脸分析(如表情分析、身份验证等)准确地定位到人脸所在的区域。例如,在一张包含多个人的合影中,该函数可以找出每个人脸的具体位置和边界。
from deepface import DeepFaceimg_path = "path/to/face_image.jpg"
result = DeepFace.extract_faces(img_path)
print(result)
返回的结果示例如下:
[{'face': array([[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
...,
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]]),'facial_area': {'x': 0, 'y': 5, 'w': 182, 'h': 221, 'left_eye': (127, 82), 'right_eye': (40, 90)},
'confidence': 0.94}]
face为图像中人脸部分的np.ndarray。
facial_area为图像中人脸的矩形框位置及左右眼位置。
confidence为人脸目标检测的置信度。
DeepFace.extract_faces的代码逻辑在“modules\detection.py”文件中,包含图像预处理、人脸目标检测与处理等逻辑。
6、DeepFace.represent
DeepFace.represent主要用于提取人脸图像的特征表示,通过使用预训练的深度学习模型将人脸图像转换为一个高维的特征向量。这个特征向量可以表示人脸的独特特征,例如面部的轮廓、眼睛、鼻子、嘴巴等的位置和形状信息,以及更细微的面部纹理和结构信息。对于不同的深度学习模型,提取的特征向量维度和表达能力会有所不同。
from deepface import DeepFaceimg_path = "path/to/face_image.jpg"
result = DeepFace.represent(img_path)
print(result)
返回的结果示例如下:
[{'embedding': [0.0, 0.0, …… , 0.0],
'facial_area': {'x': 0, 'y': 5, 'w': 182, 'h': 221, 'left_eye': (127, 82), 'right_eye': (40, 90)},
'face_confidence': 0.94}]
embedding为4096维的向量。
7、DeepFace.stream
DeepFace.stream主要用于实现实时的人脸识别功能,该函数可以处理视频流(例如来自电脑自带摄像头)中的人脸信息,并进行实时的人脸识别操作。能够持续地从视频源中读取帧,检测帧中的人脸,并将其与已知的人脸数据库进行比对。
from deepface import DeepFace# 使用 DeepFace.stream 进行实时人脸识别,使用笔记本自带摄像头
DeepFace.stream(db_path="face_database")
该函数不返回任何结果,但是运行该函数会打开一个窗口,显示笔记本摄像头的拍摄画面并进行实时分析,例如在人脸库中进行检索,分析年龄(25)、性别(Man)、表情识别(fear):
二、DeepFace二次开发
1、开发活体检测API
在DeepFace中,可以在verify、analyze、find、represent、stream、extract_faces设置anti_spoofing为True,即可对输入图像进行活体检测,使用的算法是MiniFASNet:
但有个问题是,DeepFace源码在anti_spoofing设为True、并且检测为假时,会抛出异常:
但我想在实际使用中不抛异常而是获得活体检测的分类结果和类别对应分数,再进行下一步的业务逻辑处理。
于是,我在DeepFace.py文件中新增了一个detect_spoofing函数:
在“modules\demography.py”文件中新增detect_spoofing函数:
然后调用DeepFace.detect_spoofing方法即可返回活体检测二分类的类别(True or False)以及分数。
2、模型权重持久化
由于DeepFace并未提供模型权重输入方式,而是通过输入的model_name每次运行时加载对应模型的权重,一个是会略微拖慢代码运行速度,另一个是如果我想加载自己训练的模型就只能去修改代码底层的模型路径了,有点不方便。
例如,DeepFace提供的目标检测模型有yolov8,但我想用我自己训练的yolov11。
于是我把加载模型的代码放到了外部逻辑里:
在DeepFace底层代码中逐层修改,添加model参数,并在对应的加载模型处进行修改,例如人脸分析DeepFace.analyze:
修改后,测得DeepFace.find、DeepFace.analyze等API运行速度平均加快6%,算是小幅增速。
三、总结
DeepFace是基于TensorFlow、Keras的人脸识别库,集成了多种人脸目标检测、人脸识别、人脸分析等算法,可通过修改model_name轻松切换不同模型,也可以使用自己训练的模型集成到DeepFace框架中,快速地搭建起一个小型的、具有一定准确率的人脸识别与分析应用。
DeepFace优化方向:可以从集成更多的图像预处理方法、提升神经网络提取人脸特征的能力、提升推理速度以便用于实时检测视频流。
相关文章:
Python人脸识别库DeepFace使用教程及源码解析
目录 一、DeepFace介绍 1、人脸库设计 2、DeepFace.find 3、DeepFace.verify 4、DeepFace.analyze 5、DeepFace.extract_faces 6、DeepFace.represent 7、DeepFace.stream 二、DeepFace二次开发 1、开发活体检测API 2、模型权重持久化 三、总结 一、DeepFace介绍 …...
Nacos:使用PgSQL数据源
数据源插件开源仓库地址:nacos-datasource-extend-plugins 一、PostgreSQL数据库安装 1、本文使用Docker进行数据库的安装,使用docker命令拉取的PG14版本的数据库: docker pull postgres:14.6 2、创建PG容器并启动,映射了5432…...
基于Python的多元医疗知识图谱构建与应用研究(下)
五、基于医疗知识图谱的医疗知识图谱程序构建 5.1 数据层构建 5.1.1 数据源选择与获取 在构建基于医疗知识图谱的医疗知识图谱数据层时,数据源的选择与获取至关重要。数据源的质量和丰富度直接决定了知识图谱的可靠性和实用性。医学文献是重要的数据源之一,包括学术期刊论…...
JAVA:Spring Boot 实现责任链模式处理订单流程的技术指南
1、简述 在复杂的业务系统中,订单流程往往需要一系列的操作,比如验证订单、检查库存、处理支付、更新订单状态等。责任链模式(Chain of Responsibility)可以帮助我们将这些处理步骤分开,并且以链式方式处理每一个操作…...
SpringBoot多级配置文件
1.问题先导 有这样的场景,我们开发完毕后需要测试人员进行测试,由于测试环境和开发环境的很多配置都不相同,所以测试人员在运 行我们的工程时需要临时修改很多配置,如下 java –jar springboot.jar –-spring.profiles.activete…...
阿里云安装mikrotik7配置内网互通
阿里云近期推出了200M不限量机器,对于没有公网接入的中小企业可以借助这个机器对多地分支机构进行内网互通。目前已经有很多机构用这个搞跨云k8s,跨云集群了。 mikrotik作为一个商用的软件,操作性比一些开源的软件好用不少。 本文使用的网段为172.16.1…...
std::forward实现原理与应用场景
std::forward 是 C11 引入的一个函数模板,用于实现完美转发(Perfect Forwarding)。它的核心作用是根据传入的参数,决定将参数以左值引用还是右值引用的方式进行转发,从而保持参数的原始值类别。 实现原理 template&l…...
TiDB 在市面上的热门应用领域
TiDB 在市面上的热门应用领域 TiDB 作为一款分布式数据库,凭借其高可扩展性和强一致性,逐渐成为多个行业和领域的热门选择。那么,TiDB 在市面上主要应用在哪些领域呢?今天我们来看看 TiDB 在几个热门领域的应用场景。 1. 互联网…...
“深入浅出”系列之C++:(11)推荐一些C++的开源项目
1. SQLiteCpp - 简单易用的Sqlite C封装库 仓库地址:https://github.com/SRombauts/SQLiteCpp 简介:SQLiteCpp是一个对Sqlite数据库进行C封装的开源库,代码行数约2,500行。它提供了简洁易用的接口,使得在C项目中操作Sqlite数据库…...
高等数学学习笔记 ☞ 定积分的积分方法
1. 定积分的换元积分法 1. 换元积分公式:设函数在闭区间上连续,令,若满足: ①:当时,;当时,。 此时的大小关系不一定,但与最好对应着写,否则就要留意变号的问…...
KVA教程-插件开发
“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 KVA 技术教程 * 插件开发 简介 插件开发是KVA&a…...
AI守护煤矿安全生产:基于视频智能的煤矿管理系统架构解析
前言 本文我将介绍我和我的团队自主研发设计的一款AI产品的成果展示——“基于视频AI识别技术的煤矿安全生产管理系统”。 这款产品是目前我在创业阶段和几位矿业大学的博士共同从架构设计、开发到交付的全过程中首次在博客频道发布, 我之前一直想写但没有机会来整理这套系统的…...
AI编程工具横向评测--Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发
AI编程工具横向评测–Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发 数据分析类应用的开发,指的是首先进行数据分析,比如统计学分析、机器学习模型的构建等,然后将分析的流程开发成数据分析类的工具,或者将数据分…...
04JavaWeb——Maven-SpringBootWeb入门
Maven 课程内容 初识Maven Maven概述 Maven模型介绍 Maven仓库介绍 Maven安装与配置 IDEA集成Maven 依赖管理 01. Maven课程介绍 1.1 课程安排 学习完前端Web开发技术后,我们即将开始学习后端Web开发技术。做为一名Java开发工程师,后端Web开发…...
ThreeJS能力演示——界面点选交互能力
1、支持界面点选 点选模型整体思路是:根据camera位置作为起始点,叠加鼠标相对位置作为偏置,摄像头方向作为射线方向。 根据射线方向中的遇到的3D物体列表,第一个遇到的物体作为被点选的物体。 // 鼠标事件处理let selectedObjec…...
Linux:常用命令--文件与目录操作
ls命令 功能:(list)列出当前目录的文件信息 语法:ls [-l -h -a] [参数] 参数:被查看的文件夹,不提供参数,表示查看当前工作目录-l,以列表形式查看每个文件的属性,包含…...
Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南
Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南 node-gyp Node.js native addon build tool [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/no/node-gyp 项目基础介绍及主要编程语言 Node.js NativeAddon 构建工具(node-gyp…...
docker运行Java项目,Kaptcha因为字体缺失没法显示验证码图片
2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任ÿ…...
C++otlv4连接sql serveer使用记录(注意点)
C使用otlv4在做插入时,有一些设计的坑需要注意 插入数据: 当要给表中插入单个字符时,数据库表设计使用varchar(1)是合理的,但是otlv4一直报错char。 后续查很久才知道,otlv4所写的绑定的字符数组的长度应该实际数组…...
[思考记录]认知和思考
在以前,具备一定的技能和经验就能轻易找到自己的一席之地。但在AI时代下,这些东西很容易就被抹平,那么我们的竞争力又在哪里?“认知和思考”是一个方向,帮助我们能去应对复杂情境、帮我们更容易去看到真相。 1.很多时…...
前端开发Web
Ajax 概念:Asynchronous JavaScriptAnd XML,异步的JavaScript和XML 作用: 数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的…...
【C++提高篇】—— C++泛型编程之模板基本语法和使用的详解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、模板的概念二、函数模板2.1 函数模板的使用2.2 函数模板注意事项2.3 普通函数与函数模板的区别2.4 普通函数与函数模板的调用规则2.5 模板的局限性 三、类模…...
WPS计算机二级•高效操作技巧
听说这里是目录哦 斜线表头 展示项目名称🍋🟩横排转竖排🍐批量删除表格空白行🍈方法一方法二建辅助列找空值 能量站😚 斜线表头 展示项目名称🍋🟩 选中单元格,单击右键➡️“设…...
【Maui】视图界面与数据模型绑定
文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI&…...
vue3-sfc-loader 加载远程.vue文件(sfc)案例
注意事项 style标签如果增加了lang比如:lang“scss”,需要提供scss-loader的处理器,这个暂时没研究,我的处理方式是将动态模版的css放在了全局打包暂时还没有测试,后面测试了会同步更新 安装vue3-sfc-loader npm inst…...
Hadoop美食推荐系统 爬虫1.8w+数据 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离
Hadoop美食推荐系统 爬虫1.8w数据 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离 【Hadoop项目】 1. data.csv上传到hadoop集群环境 2. data.csv数据清洗 3.MapReducer数据汇总处理, 将Reducer的结果数据保存到本地Mysql数据库中 4. SpringbootEchartsMySQL 显…...
使用Linux驱动程序的fasync(文件异步通知机制)向用户空间发送SIGIO信号的学习记录
前言 本文学习使用Linux驱动程序的fasync(文件异步通知机制)向用户空间发送SIGIO信号。 fasync(文件异步通知机制)名字的来历 fasync 是 “file asynchronous” 的缩写,意思是 文件异步通知。 这里的文件是指文件结构体struct file *file ,关于文件结…...
面试经验分享-回忆版某小公司
说说你项目中数据仓库是怎么分层的,为什么要分层? 首先是ODS层,连接数据源和数据仓库,数据会进行简单的ETL操作,数据来源通常是业务数据库,用户日志文件或者来自消息队列的数据等 中间是核心的数据仓库层&a…...
【算法学习笔记】35:扩展欧几里得算法求解线性同余方程
线性同余方程问题 线程同余方程问题是指 a x ≡ b ( m o d m ) ax \equiv b~(mod~m) ax≡b (mod m),给定 a a a、 b b b和 m m m,找到一个整数 x x x使得该方程成立,即使得 a x m o d m b ax~mod~mb ax mod mb,随便返回任何一个…...
ent.SetDatabaseDefaults()
在 AutoCAD 的 .NET API 中,ent.SetDatabaseDefaults() 这句代码通常用于将一个实体(Entity)对象的属性设置为与其所在的数据库(Database)的默认设置相匹配。这意味着,该实体将采用数据库级别的默认颜色、图…...
使用docker部署tomcat服务器和mysql数据库
使用docker部署tomcat服务器 1、拉去tomcat镜像 [rootlocalhost yum.repos.d]# sudo docker pull docker.io/tomcat:9 9: Pulling from library/tomcat de44b265507a: Pull complete 4c2afd91a87d: Pull complete 89e9bbcfa697: Pull complete 11be3e613582: Pull complet…...
Jenkins 启动
废话 这一阵子感觉空虚,心里空捞捞的,总想找点事情做,即使这是一件微小的事情,空余时间除了骑车、打球,偶尔朋友聚会 … 还能干什么呢? 当独自一人时,究竟可以做点什么,填补这空虚…...
Elasticsearch(ES)基础查询语法的使用
1. Match Query (全文检索查询) 用于执行全文检索,适合搜索文本字段。 { “query”: { “match”: { “field”: “value” } } } match_phrase:精确匹配短语,适合用于短语搜索。 { “query”: { “match_phrase”: { “field”: “text” }…...
SpringCloud系列教程:微服务的未来(十四)网关登录校验、自定义过滤器GlobalFilter、GatawayFilter
前言 在微服务架构中,API 网关扮演着至关重要的角色,负责路由请求、执行安全验证、流量控制等任务。Spring Cloud Gateway 作为一个强大的网关解决方案,提供了灵活的方式来实现这些功能。 本篇博客将重点介绍如何在 Spring Cloud Gateway 中…...
Android Studio:Linux环境下安装与配置
更多内容:XiaoJ的知识星球 Android Studio:Linux环境下安装与配置 1.安装JDK2.安装Android Studio2.1 获取安装包2.2 安装(1)配置环境变量:(2)运行安装:(3)配…...
使用AI生成金融时间序列数据:解决股市场的数据稀缺问题并提升信噪比
“GENERATIVE MODELS FOR FINANCIAL TIME SERIES DATA: ENHANCING SIGNAL-TO-NOISE RATIO AND ADDRESSING DATA SCARCITY IN A-SHARE MARKET” 论文地址:https://arxiv.org/pdf/2501.00063 摘要 金融领域面临的数据稀缺与低信噪比问题,限制了深度学习在…...
【银河麒麟高级服务器操作系统】业务访问慢网卡丢包现象分析及处理过程
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:product.kylinos.cn 开发者专区:developer.kylinos.cn 文档中心:document.kylinos.cn 交流论坛:forum.kylinos.cn 服务器环境以及配置 【内核版本…...
如何将数据库字符集改为中文,让今后所有的数据库都支持中文
最后一行有我自己的my.ini文件 数据库输入中文数据时会变为乱码, 这个时候,我们为每个数据库设置字符集,太过于麻烦,为数据库单独设置重启后又会消失 Set character_set_database’utf8’; Set character_set_server’utf8’; …...
Linux-C/C++--深入探究文件 I/O (下)(文件共享、原子操作与竞争冒险、系统调用、截断文件)
经过上一章内容的学习,了解了 Linux 下空洞文件的概念;open 函数的 O_APPEND 和 O_TRUNC 标志;多次打开同一文件;复制文件描述符;等内容 本章将会接着探究文件IO,讨论如下主题内容。 文件共享介绍&…...
Linux Bash 中使用重定向运算符的 5 种方法
注:机翻,未校。 Five ways to use redirect operators in Bash Posted: January 22, 2021 | by Damon Garn Redirect operators are a basic but essential part of working at the Bash command line. See how to safely redirect input and output t…...
opengrok_windows_环境搭建
目录 软件列表 软件安装 工程索引 编辑 工程部署 问题列表 软件列表 软件名下载地址用途JDKhttps://download.java.net/openjdk/jdk16/ri/openjdk-1636_windows-x64_bin.zipindex 使用java工具tomcathttps://dlcdn.apache.org/tomcat/tomcat-9/v9.0.98/bin/apache-tom…...
【无法下载github文件】虚拟机下ubuntu无法拉取github文件
修改hosts来进行解决。 步骤一:打开hosts文件 sudo vim /etc/hosts步骤二:查询 github.com的ip地址 https://sites.ipaddress.com/github.com/#ipinfo将github.com的ip地址添加到hosts文件末尾,如下所示。 140.82.114.3 github.com步骤三…...
python——句柄
一、概念 句柄指的是操作系统为了标识和访问对象而提供的一个标识符,在操作系统中,每个对象都有一个唯一的句柄,通过句柄可以访问对象的属性和方法。例如文件、进程、窗口等都有句柄。在编程中,可以通过句柄来操作这些对象&#x…...
.Net Core微服务入门系列(一)——项目搭建
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
[苍穹外卖] 1-项目介绍及环境搭建
项目介绍 定位:专门为餐饮企业(餐厅、饭店)定制的一款软件产品 功能架构: 管理端 - 外卖商家使用 用户端 - 点餐用户使用 技术栈: 开发环境的搭建 整体结构: 前端环境 前端工程基于 nginx 运行 - Ngi…...
【PCIe 总线及设备入门学习专栏 2 -- PCIe 的 LTSSM 和 Enumeration】
文章目录 OverviewLTSSM StatesDetect StatesDETECT_QUIETDETECT_ACTDETECT_WAITPolling StatesPOLL_ACTIVEPOLL_CONFIGPOLL_COMPLIANCEConfiguration StatesCONFIG_LINKWD_STARTCONFIG_LINKWD_ACCEPTCONFIG_LANENUM_WAITCONFIG_LANENUM_ACCEPTCONFIG_COMPLETECONFIG_IDLERecov…...
Redis 性能优化:多维度技术解析与实战策略
文章目录 1 基准性能2 使用 slowlog 优化耗时命令3 big key 优化4 使用 lazy free 特性5 缩短键值对的存储长度6 设置键值的过期时间7 禁用耗时长的查询命令8 使用 Pipeline 批量操作数据9 避免大量数据同时失效10 客户端使用优化11 限制 Redis 内存大小12 使用物理机而非虚拟机…...
QT开发技术 【基于TinyXml2的对类进行序列化和反序列化】一
一、对TinyXml2 进行封装 使用宏 实现序列化和反序列化 思路: 利用宏增加一个类函数,使用序列化器调用函数进行序列化 封装宏示例 #define XML_SERIALIZER_BEGIN(ClassName) \ public: \virtual void ToXml(XMLElement* parentElem, bool bSerialize …...
麦田物语学习笔记:创建TransitionManager控制人物场景切换
基本流程 制作场景之间的切换 1.代码思路 (1)为了实现不同场景切换,并且保持当前的persistentScene一直存在,则需要一个Manager去控制场景的加载和卸载,并且在加载每一个场景之后,都要将当前的场景Set Active Scene,保证其为激活的场景,在卸载的时候也可以方便调用当前激活的场…...