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

DeepFace 全面使用教程

DeepFace 全面使用教程

DeepFace 是一个轻量级的 Python 人脸识别和人脸属性分析库。它封装了多种先进的深度学习模型(如 VGG-Face、FaceNet、ArcFace 等),支持人脸验证、识别、年龄/性别/情绪/种族检测等多种功能。本教程将从安装开始,逐步介绍核心功能的使用方法,包括代码示例和最佳实践。

目录

  1. 简介
  2. 先决条件
  3. 安装
  4. 核心功能
    • 人脸验证
    • 人脸识别
    • 人脸属性分析
    • 实时分析
    • 特征向量提取
    • 人脸检测与对齐
    • 人脸反欺骗
  5. 高级功能
    • 模型选择
    • 检测器选择
    • 相似度度量
    • API 使用
    • 大规模人脸识别
    • 加密嵌入
  6. 核心原理
    • 人脸检测
    • 人脸对齐
    • 人脸表征
    • 人脸匹配
  7. 最佳实践
  8. 常见问题与故障排除
  9. 参考与贡献

简介

DeepFace 是一个混合人脸识别框架,能够自动处理现代人脸识别管道的所有阶段:检测、对齐、归一化、表示和验证。它支持单行代码完成复杂任务,并在基准测试中达到了人类水平的准确率(例如,人脸识别准确率 97.53%)。

主要应用场景包括:

  • 安全系统中的身份验证
  • 社交媒体的人脸属性分析
  • 实时视频监控
  • 用户体验个性化
  • 照片管理与分类

DeepFace 的最大优点是极其简单易用,将当今最先进的人脸识别模型封装在简单的函数调用中,让开发者可以专注于业务逻辑,而无需深入了解深度学习模型的具体实现。

先决条件

  • Python 环境:Python 3.7 或更高版本
  • 依赖库:安装时会自动处理,但需确保系统有 NumPy、Pandas、TensorFlow/Keras 等
  • 硬件:CPU 即可运行,但 GPU(NVIDIA,需 CUDA)可显著加速
  • 互联网:首次运行时会下载预训练模型(约 500MB-1GB)
  • 图像格式:支持 JPG、PNG 等常见格式;输入可以是文件路径、NumPy 数组或 base64 编码

注意:无互联网访问时,无法下载模型;建议在有网环境中首次安装。

安装

通过 PyPI 安装(推荐)

pip install deepface

这会安装库及其依赖(如 TensorFlow、OpenCV)。

从源代码安装(用于开发或最新功能)

git clone https://github.com/serengil/deepface.git
cd deepface
pip install -e .

安装后验证

from deepface import DeepFace
print(DeepFace.__version__)  # 输出当前版本,例如 0.0.79

额外依赖(可选)

  • 对于 GPU 支持:安装 TensorFlow GPU 版本
  • 对于实时视频:确保 OpenCV 已安装(pip install opencv-python

核心功能

人脸验证

人脸验证用于比较两张图片中的人脸是否属于同一个人(1:1 比较)。

from deepface import DeepFace# 准备两张图片路径
img1_path = "person1_img1.jpg"
img2_path = "person1_img2.jpg"# 验证是否为同一个人
result = DeepFace.verify(img1_path=img1_path, img2_path=img2_path)print("验证结果:")
print(f"是否为同一人: {result['verified']}")
print(f"相似度距离: {result['distance']}")
print(f"阈值: {result['threshold']}")

输出示例:

验证结果:
是否为同一人: True
相似度距离: 0.23
阈值: 0.4

参数说明:

  • img1_pathimg2_path:图片路径或 NumPy 数组
  • model_name:使用的模型,默认为 “VGG-Face”
  • detector_backend:人脸检测器,默认为 “opencv”
  • distance_metric:距离度量方式,默认为 “cosine”
  • enforce_detection:是否强制检测人脸,默认为 True

返回值说明:

  • verified:True 表示是同一个人,False 则不是
  • distance:计算出的两张人脸特征向量的距离,距离越小,相似度越高
  • threshold:判断是否为同一个人的阈值,当 distance <= threshold 时,verified 为 True
  • modeldetector_backendsimilarity_metric:使用的模型和参数信息
  • facial_areas:检测到的人脸区域坐标

人脸识别

人脸识别用于在一个图片数据库中搜索与给定图片最相似的人脸(1:N 比较)。

from deepface import DeepFace
import pandas as pd# 数据库路径
db_path = "database"  # 包含多张人脸图片的文件夹
# 目标图片路径
target_img_path = "target_img.jpg"# 在数据库中查找相似人脸
dfs = DeepFace.find(img_path=target_img_path, db_path=db_path, enforce_detection=False)# find函数返回一个列表,其中每个元素都是一个DataFrame
if dfs and not dfs[0].empty:print("识别结果:")print(dfs[0])
else:print("在数据库中未找到匹配的人脸。")

输出示例:

识别结果:identity  distance
0  database/person1_img1.jpg  0.189772
1  database/person1_img2.jpg  0.234567
2  database/person2_img1.jpg  0.687912

参数说明:

  • img_path:目标图片路径或 NumPy 数组
  • db_path:数据库文件夹路径
  • model_name:使用的模型,默认为 “VGG-Face”
  • distance_metric:距离度量方式,默认为 “cosine”
  • enforce_detection:是否强制检测人脸,默认为 True
  • threshold:匹配阈值,只返回距离小于阈值的结果

返回值说明:

  • 返回一个 DataFrame 列表,按相似度(距离)升序排列
  • identity:数据库中匹配到的图片的路径
  • distance:与目标图片的距离

注意:DeepFace 会为数据库中的人脸特征向量建立索引(一个 representations_xxx.pkl 文件),第一次运行 find 会比较慢。之后再运行时,它会直接加载索引文件,速度会快很多。

人脸属性分析

人脸属性分析用于提取单张人脸的各种属性,如年龄、性别、情绪和种族。

from deepface import DeepFaceimg_path = "target_img.jpg"# 分析人脸属性
analysis = DeepFace.analyze(img_path=img_path, actions=['age', 'gender', 'emotion', 'race'],enforce_detection=False)# analyze 返回一个列表,因为一张图可能有多张脸
if isinstance(analysis, list) and len(analysis) > 0:# 我们只看第一张检测到的人脸first_face = analysis[0]print("人脸属性分析结果:")print(f"年龄: {first_face['age']}")print(f"性别: {first_face['dominant_gender']}")print(f"主要情绪: {first_face['dominant_emotion']}")print(f"主要种族: {first_face['dominant_race']}")
else:print("无法检测到人脸或分析失败。")

输出示例:

人脸属性分析结果:
年龄: 32
性别: Man
主要情绪: happy
主要种族: middle eastern

参数说明:

  • img_path:图片路径或 NumPy 数组
  • actions:要分析的属性列表,可选值: ‘age’, ‘gender’, ‘emotion’, ‘race’
  • enforce_detection:是否强制检测人脸,默认为 True
  • detector_backend:人脸检测器,默认为 “opencv”

返回值说明:

  • 返回一个字典列表,每个字典代表图中一张人脸的分析结果
  • age:估计的年龄(均方误差 ±4.65)
  • gender:性别概率分布和主要性别(准确率 97.44%)
  • emotion:情绪概率分布和主要情绪(7 类:angry, disgust, fear, happy, sad, surprise, neutral)
  • race:种族概率分布和主要种族(6 类:asian, indian, black, white, middle eastern, latino)
  • region:人脸边界框坐标

实时分析

实时分析可以打开摄像头,进行实时的人脸识别和属性分析。

from deepface import DeepFace# 方法1:使用内置的 stream 函数
# 指定数据库路径进行识别
DeepFace.stream(db_path="database",enable_face_analysis=True,  # 启用属性分析source=0,  # 摄像头索引,0 为默认time_threshold=5,  # 检测到人脸后显示 5 秒frame_threshold=5)  # 连续 5 帧检测到人脸# 方法2:自定义实现
import cv2# 打开摄像头
cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if ret:try:# 实时分析人脸analysis = DeepFace.analyze(frame, actions=['emotion'],enforce_detection=False)if analysis:print(analysis[0]['dominant_emotion'])# 在图像上绘制结果region = analysis[0]['region']cv2.rectangle(frame, (region['x'], region['y']), (region['x']+region['w'], region['y']+region['h']), (0, 255, 0), 2)cv2.putText(frame, analysis[0]['dominant_emotion'], (region['x'], region['y']-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)except Exception as e:pass# 显示结果cv2.imshow('Real-time Analysis', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

参数说明(stream 函数):

  • db_path:数据库路径,用于识别。如果不提供,则只进行属性分析
  • enable_face_analysis:是否启用属性分析,默认为 True
  • source:摄像头索引,默认为 0
  • time_threshold:检测到人脸后显示结果的时间(秒),默认为 5
  • frame_threshold:需要连续检测到多少帧才显示结果,默认为 5

特征向量提取

特征向量提取将一张人脸图片转换成一个数学向量(Embedding),这个向量是人脸识别模型对该人脸的数学表示。

from deepface import DeepFace
import numpy as npimg_path = "target_img.jpg"# 生成特征向量
embedding_objs = DeepFace.represent(img_path=img_path, model_name="VGG-Face")if embedding_objs:embedding = embedding_objs[0]['embedding']print(f"成功提取特征向量,维度: {len(embedding)}")# 如果有两张人脸图片,可以计算它们的相似度img2_path = "another_img.jpg"embedding2_objs = DeepFace.represent(img_path=img2_path, model_name="VGG-Face")if embedding2_objs:embedding2 = embedding2_objs[0]['embedding']# 计算余弦相似度similarity = np.dot(embedding, embedding2) / (np.linalg.norm(embedding) * np.linalg.norm(embedding2))print(f"两张人脸的余弦相似度: {similarity}")print(f"余弦距离: {1 - similarity}")
else:print("无法提取特征向量。")

参数说明:

  • img_path:图片路径或 NumPy 数组
  • model_name:使用的模型,默认为 “VGG-Face”
  • enforce_detection:是否强制检测人脸,默认为 True
  • detector_backend:人脸检测器,默认为 “opencv”

返回值说明:

  • 返回一个字典列表,每个字典包含:
    • embedding:人脸特征向量(不同模型维度不同,如 VGG-Face 为 2622 维,Facenet 为 128 维)
    • facial_area:人脸区域坐标
    • face:预处理后的人脸图像数组

人脸检测与对齐

DeepFace 内部使用检测器提取人脸,但也可以独立调用这个功能。

from deepface import DeepFace
import matplotlib.pyplot as plt# 检测人脸区域
faces = DeepFace.extract_faces(img_path="group_photo.jpg", target_size=(224, 224),detector_backend="retinaface")print(f"检测到 {len(faces)} 张人脸")# 显示检测到的人脸
fig = plt.figure(figsize=(8, 8))
for i, face in enumerate(faces):ax = fig.add_subplot(2, 3, i+1)plt.imshow(face)plt.axis('off')plt.tight_layout()
plt.show()

参数说明:

  • img_path:图片路径或 NumPy 数组
  • target_size:输出人脸图像的大小,默认为 (224, 224)
  • detector_backend:人脸检测器,默认为 “opencv”
  • enforce_detection:是否强制检测人脸,默认为 True
  • align:是否对人脸进行对齐,默认为 True

返回值说明:

  • 返回一个列表,包含检测到的所有人脸图像数组

人脸反欺骗

人脸反欺骗用于检测图像是否为真实人脸(防止照片、视频等欺骗)。

from deepface import DeepFace# 检测是否为真实人脸
result = DeepFace.anti_spoof(img_path="face_image.jpg", model_name="MiniFASNet")print(result)
# 输出示例:{'is_real': True, 'anti_spoof_score': 0.95}

参数说明:

  • img_path:图片路径或 NumPy 数组
  • model_name:使用的模型,目前仅支持 “MiniFASNet”

返回值说明:

  • is_real:是否为真实人脸
  • anti_spoof_score:真实性得分,大于 0.8 通常被视为真实

高级功能

模型选择

DeepFace 支持多种不同的模型,可以根据需求选择:

# 使用不同的模型进行人脸验证
result = DeepFace.verify(img1_path="img1.jpg",img2_path="img2.jpg",model_name="ArcFace")  # 可选:VGG-Face, Facenet, OpenFace, DeepFace, DeepID, ArcFace, Dlib, SFace

可用模型比较:

模型名称维度准确率速度特点
VGG-Face2622中等默认模型,稳定可靠
Facenet128中高轻量级,适合移动设备
OpenFace128开源实现
DeepFace4096Facebook 开发
ArcFace512最高中等最新技术,高精度
Dlib128传统方法,稳定
SFace128中高最快专为速度优化

检测器选择

可以选择不同的人脸检测器来平衡速度和准确率:

# 使用不同的检测器
result = DeepFace.analyze(img_path="img.jpg",detector_backend="retinaface")  # 可选:opencv, ssd, dlib, mtcnn, retinaface, mediapipe, yolov8, yuNet

可用检测器比较:

检测器名称准确率速度特点
opencv最快基于 Haar Cascade,适合正面人脸
ssd单次检测,平衡速度和准确率
dlib中等基于 HOG,稳定可靠
mtcnn多任务级联,精度高
retinaface最高最先进,擅长小人脸和侧脸
mediapipeGoogle 开发,适合移动设备
yolov8中等通用目标检测,适合复杂场景

相似度度量

可以选择不同的距离度量方式来计算人脸相似度:

# 使用不同的距离度量
result = DeepFace.verify(img1_path="img1.jpg",img2_path="img2.jpg",distance_metric="euclidean_l2")  # 可选:cosine, euclidean, euclidean_l2

可用距离度量比较:

度量名称范围特点推荐模型
cosine[0,1]方向相似性,对尺度不敏感VGG-Face, ArcFace
euclidean[0,∞)直线距离,对尺度敏感Facenet, OpenFace
euclidean_l2[0,∞)标准化后的欧氏距离Facenet, OpenFace

API 使用

DeepFace 提供 REST API 服务,可以通过 HTTP 请求调用:

# 启动服务器(在命令行中运行)
# python -m deepface.api# 客户端调用示例
import requests# 人脸验证
response = requests.post("http://localhost:5001/verify",files={'img1': open('img1.jpg', 'rb'),'img2': open('img2.jpg', 'rb')})
print(response.json())# 人脸分析
response = requests.post("http://localhost:5001/analyze",files={'img': open('img.jpg', 'rb')},data={'actions': 'age,gender,emotion'})
print(response.json())

API 端点:

  • /verify:人脸验证
  • /analyze:人脸属性分析
  • /represent:特征向量提取
  • /find:人脸识别(需要在服务器端配置数据库路径)

大规模人脸识别

对于大型数据库(超过 10,000 张图片),建议使用向量索引库来加速搜索:

# 使用 Faiss 加速大规模人脸识别(需要先安装 faiss-cpu 或 faiss-gpu)
import faiss
import numpy as np
from deepface import DeepFace
import os
import pickle# 步骤 1: 提取所有人脸的特征向量
db_path = "large_database"
model_name = "ArcFace"
embeddings = []
identities = []# 遍历数据库中的所有图片
for root, dirs, files in os.walk(db_path):for file in files:if file.endswith(('.jpg', '.jpeg', '.png')):img_path = os.path.join(root, file)try:# 提取特征向量embedding_objs = DeepFace.represent(img_path=img_path, model_name=model_name)if embedding_objs:embeddings.append(embedding_objs[0]['embedding'])identities.append(img_path)except Exception as e:print(f"Error processing {img_path}: {e}")# 步骤 2: 构建 Faiss 索引
embeddings_array = np.array(embeddings).astype('float32')
dimension = embeddings_array.shape[1]  # 特征向量维度# 创建索引(使用余弦相似度)
index = faiss.IndexFlatIP(dimension)  # 内积(点积)用于余弦相似度
# 归一化向量,使内积等价于余弦相似度
faiss.normalize_L2(embeddings_array)
index.add(embeddings_array)# 保存索引和身份映射
faiss.write_index(index, "face_index.bin")
with open("identities.pkl", "wb") as f:pickle.dump(identities, f)# 步骤 3: 使用索引进行搜索
def find_similar_faces(img_path, top_k=5):# 加载索引和身份映射index = faiss.read_index("face_index.bin")with open("identities.pkl", "rb") as f:identities = pickle.load(f)# 提取查询图片的特征向量query_embedding_objs = DeepFace.represent(img_path=img_path, model_name=model_name)if not query_embedding_objs:return []query_embedding = np.array([query_embedding_objs[0]['embedding']]).astype('float32')faiss.normalize_L2(query_embedding)# 搜索最相似的 top_k 个人脸distances, indices = index.search(query_embedding, top_k)# 返回结果results = []for i, idx in enumerate(indices[0]):if idx < len(identities):results.append({'identity': identities[idx],'distance': 1 - distances[0][i]  # 转换为余弦距离})return results# 使用示例
results = find_similar_faces("query_img.jpg", top_k=10)
for result in results:print(f"身份: {result['identity']}, 距离: {result['distance']}")

加密嵌入

对于需要保护隐私的应用,可以使用同态加密保护人脸特征向量:

# 需要安装 TenSEAL 库: pip install tenseal
from deepface import DeepFace
import tenseal as ts
import numpy as np# 生成加密密钥
context = ts.context(ts.SCHEME_TYPE.CKKS, poly_modulus_degree=8192, coeff_mod_bit_sizes=[60, 40, 40, 60])
context.generate_galois_keys()
context.global_scale = 2**40# 提取人脸特征向量
embedding_objs = DeepFace.represent(img_path="img1.jpg", model_name="Facenet")
embedding1 = np.array(embedding_objs[0]['embedding'])# 加密特征向量
encrypted_embedding1 = ts.ckks_vector(context, embedding1)# 存储加密的特征向量(可以安全地存储在数据库中)
encrypted_data = encrypted_embedding1.serialize()# 解密(只有拥有密钥的一方才能解密)
deserialized_embedding = ts.ckks_vector_from(context, encrypted_data)
decrypted_embedding = deserialized_embedding.decrypt()# 在加密域中计算相似度(同态加密允许在加密数据上进行有限的计算)
embedding_objs2 = DeepFace.represent(img_path="img2.jpg", model_name="Facenet")
embedding2 = np.array(embedding_objs2[0]['embedding'])# 归一化向量(为了余弦相似度)
embedding1 = embedding1 / np.linalg.norm(embedding1)
embedding2 = embedding2 / np.linalg.norm(embedding2)# 加密第一个向量
encrypted_embedding1 = ts.ckks_vector(context, embedding1)# 计算点积(近似余弦相似度,因为向量已归一化)
# 注意:这是一个简化的例子,实际中可能需要更复杂的协议
dot_product = encrypted_embedding1.dot(embedding2)# 解密结果
decrypted_similarity = dot_product.decrypt()
print(f"加密域中计算的相似度: {decrypted_similarity}")# 验证结果(与明文计算比较)
plaintext_similarity = np.dot(embedding1, embedding2)
print(f"明文计算的相似度: {plaintext_similarity}")

核心原理

DeepFace 的工作流程可以分为一个标准的四步管道(Pipeline):

人脸检测原理

目标:在图像中定位人脸的位置和边界框(Bounding Box)。

DeepFace 支持多种先进的检测器,每种都有其优缺点:

  • opencv:基于 Haar Cascade,速度快但精度较低
  • ssd:单次检测器,平衡速度和精度
  • dlib:基于 HOG 特征的检测器,稳定可靠
  • mtcnn:多任务级联卷积网络,精度高但速度较慢
  • retinaface:最先进的检测器,精度极高,尤其擅长检测小尺寸人脸

人脸对齐

目标:将检测到的人脸进行标准化处理,以消除姿态、角度和比例等差异。

算法会识别人脸的关键特征点(如眼睛、鼻子、嘴角),然后通过仿射变换(旋转、缩放、裁剪)将这些特征点对齐到标准模板的位置。这确保了输入到识别模型中的人脸都是"正面"且标准化的,从而大大提高了识别的准确率。

人脸表征

目标:将对齐后的人脸图像转换为一个紧凑且具有区分性的数学向量,即特征向量(Embedding)。

这是整个流程中最核心的一步,由深度卷积神经网络(DCNN)完成。不同的模型使用不同的网络架构和训练方法:

  • VGG-Face:基于 VGG-16 架构,输出 2622 维向量
  • FaceNet:使用 Inception 架构,引入了 Triplet Loss,输出 128 维向量
  • ArcFace:使用 ResNet 架构,引入了角度边缘损失,输出 512 维向量

这些模型已经在大规模人脸数据集(如 MS-Celeb-1M)上进行了训练,学会了如何提取最能代表人脸身份的特征。

人脸匹配

目标:比较两个特征向量,计算它们的相似度。

常用的距离度量包括:

  • 余弦相似度:计算两个向量在方向上的相似性,距离 d = 1 - cos(θ)
  • 欧氏距离:计算两个向量在多维空间中的直线距离
  • L2 归一化欧氏距离:先对向量进行 L2 归一化,再计算欧氏距离

将计算出的距离与一个预设的阈值(threshold)进行比较。如果距离小于阈值,则判定为同一个人;否则为不同的人。每个模型都有其官方论文中建议的最佳阈值。

最佳实践

性能优化

  1. 预加载模型

    # 预加载模型以提高性能
    models = {}
    models["emotion"] = DeepFace.build_model('emotion')
    models["age"] = DeepFace.build_model('age')
    
  2. 使用 GPU 加速:确保安装了 GPU 版本的 TensorFlow 以获得更好的性能。

  3. 批量处理:当需要处理多张图片时,使用批处理而不是循环处理单张图片。

  4. 选择合适的模型和检测器

    • 对于高精度需求:使用 ArcFace 模型和 RetinaFace 检测器
    • 对于实时应用:使用 SFace 模型和 OpenCV 检测器
  5. 缓存特征向量:对于频繁查询的数据库,预先计算并缓存特征向量。

错误处理

try:result = DeepFace.verify(img1_path, img2_path)
except Exception as e:if "Face could not be detected" in str(e):print("无法检测到人脸,请检查图片质量或尝试不同的检测器")# 尝试使用不同的检测器result = DeepFace.verify(img1_path, img2_path, detector_backend="retinaface", enforce_detection=False)else:print(f"处理失败:{str(e)}")

性能监控

import timestart_time = time.time()
result = DeepFace.analyze(img_path)
process_time = time.time() - start_time
print(f"处理时间:{process_time}秒")

常见问题与故障排除

  1. 人脸检测失败

    • 检查图片质量和光照条件
    • 尝试不同的检测器:detector_backend="retinaface"
    • 调整 enforce_detection=False 参数
  2. 内存问题

    • 及时释放不需要的变量
    • 使用生成器处理大量图片
    • 选择较小的模型(如 SFace 而非 VGG-Face)
  3. 模型加载慢

    • 使用模型预加载
    • 检查网络连接(首次运行需要下载模型)
    • 手动下载模型到 ~/.deepface/weights/ 目录
  4. 版本兼容性

    • 使用虚拟环境隔离依赖
    • 检查 TensorFlow 和 DeepFace 的版本兼容性
  5. API 服务问题

    • 检查端口是否被占用
    • 确保有足够的权限运行服务

参考与贡献

  • 官方文档:DeepFace GitHub

  • 学术论文

    • VGG-Face: Deep Face Recognition
    • FaceNet: FaceNet: A Unified Embedding for Face Recognition and Clustering
    • ArcFace: ArcFace: Additive Angular Margin Loss for Deep Face Recognition
  • 贡献:DeepFace 是一个开源项目,欢迎通过 GitHub 提交问题和贡献代码。


总结

DeepFace 是一个功能强大且易于使用的人脸分析库,它可以满足从简单的人脸检测到复杂的情绪分析等多种需求。通过本教程的学习,你应该能够掌握 DeepFace 的基本使用方法,并能够根据实际需求进行功能扩展和优化。

记住,在实际应用中要注意:

  • 合理使用计算资源
  • 注意数据隐私保护
  • 定期更新模型和库
  • 做好异常处理和日志记录

希望这个教程能帮助你更好地使用 DeepFace 库!


文章转载自:

http://8P2OqSG8.kLLtg.cn
http://NY6Thlb2.kLLtg.cn
http://LlNRURpL.kLLtg.cn
http://BJEGBSPW.kLLtg.cn
http://mZ9nBCM6.kLLtg.cn
http://4v4czQH3.kLLtg.cn
http://UqcUrGj9.kLLtg.cn
http://1PIKQ46W.kLLtg.cn
http://fYfd3y6x.kLLtg.cn
http://oDcHeEmZ.kLLtg.cn
http://iQum5thD.kLLtg.cn
http://NXgeaalb.kLLtg.cn
http://ddJlHP94.kLLtg.cn
http://mnXa36mH.kLLtg.cn
http://UN15E1S7.kLLtg.cn
http://DNKI6i2h.kLLtg.cn
http://Gyz2ZGav.kLLtg.cn
http://7UvwjKDw.kLLtg.cn
http://rM5xldF7.kLLtg.cn
http://gr0FXHM6.kLLtg.cn
http://2ykuprne.kLLtg.cn
http://tzgNoc0j.kLLtg.cn
http://i8or9zjz.kLLtg.cn
http://xxVL1mLa.kLLtg.cn
http://1llY2ht4.kLLtg.cn
http://ZxtInuh5.kLLtg.cn
http://ymrgZLVP.kLLtg.cn
http://iuP1WZlH.kLLtg.cn
http://gLe8j6jO.kLLtg.cn
http://YDaUoTmY.kLLtg.cn
http://www.dtcms.com/a/382185.html

相关文章:

  • ISP之DHCPv6-PD(前缀代理)为用户下发前缀
  • LINUX913 shell:set ip [lindex $argv 0],\r,send_user,spawn ssh root@ip “cat “
  • GEO 优化专家孟庆涛以 AI 技术建体系,赋能多行业智能化转型
  • 没有统一的知识管理平台会带来哪些问题
  • 系统编程day10-同步与互斥
  • Spring Boot 整合 Mockito 进行单元测试
  • 【C++】C++11介绍(Ⅱ)
  • HTML新属性
  • 分库分表是否真的要退出历史舞台?
  • [BJ2012.X4] 统计车牌
  • 【Rust】一个从Modelscope下载模型CLI工具
  • 第三方服务商接入美团核销接口:零侵入对接的关键要点
  • 电压监控器原理
  • python面向对象的三大特性
  • 从 MySQL 到 TiDB:分布式数据库的无缝迁移与实战指南
  • Ansible的jinja2 模板、Roles角色详解
  • Linux内核的PER_CPU机制
  • 树莓派组建nas,云服务器及家庭影院
  • 二叉树hot100-中等
  • MX 模拟赛二总结
  • windows rocketmq 启动时报 java.lang.NullPointerException
  • 文本处理三剑客——grep、sed、awk
  • o2oa待办流程和已办流程表
  • 【WebSocket✨】入门之旅(三):WebSocket 的实战应用
  • 闪电科创-交通信号灯仿真SUMO
  • 【自动化】深入浅出UIAutomationClient:C#桌面自动化实战指南
  • 自定义类型:结构体、联合与枚举(1)
  • 在 Ubuntu 系统中基于 Miniconda 安装 VLLM 并启动模型 + Dify 集成指南
  • JavaWeb--day4--WebHttp协议Tomcat
  • Linux命令行的核心理念与实用指南(进阶版)