DeepFace【部署 01】轻量级人脸识别和面部属性分析框架安装使用详解(网盘分享模型文件)

news2024/10/7 14:29:05

DeepFace安装使用

  • 1.安装
    • 1.1 官方的三种方式
    • 1.2 使用的方式
  • 2.使用
    • 2.1 模型文件下载
    • 2.2 Facial Recognition
    • 2.3 Face Verification
    • 2.4 Face recognition
    • 2.5 Embeddings
    • 2.6 Face recognition models
    • 2.7 Similarity
    • 2.8 Facial Attribute Analysis
    • 2.9 Face Detectors
  • 3.总结

Github地址:https://github.com/serengil/deepface/tree/master
模型下载地址:https://github.com/serengil/deepface_models/releases/

百度网盘模型下载:

链接:https://pan.baidu.com/s/11AJfX_c_LfmdPsznjNhu_g
提取码:7q38

官方自我介绍: Deepface is a lightweight face recognition and facial attribute analysis (age, gender, emotion and race) framework for python. It is a hybrid face recognition framework wrapping state-of-the-art models: VGG-Face, Google FaceNet, OpenFace, Facebook DeepFace, DeepID, ArcFace, Dlib and SFace.
Experiments show that human beings have 97.53% accuracy on facial recognition tasks whereas those models already reached and passed that accuracy level.

请小伙伴儿们注意: 以下内容基本来自官网的翻译,和自己的实践记录,不准确的地方望指正。

1.安装

1.1 官方的三种方式

  1. The easiest way to install deepface is to download it from PyPI. It’s going to install the library itself and its prerequisites as well.
pip install deepface
  1. Secondly, DeepFace is also available at Conda. You can alternatively install the package via conda.
conda install -c conda-forge deepface
  1. Thirdly, you can install deepface from its source code.
$ git clone https://github.com/serengil/deepface.git
$ cd deepface
$ pip install -e .

1.2 使用的方式

我使用的是Anaconda+PyCharm的社区版。

  1. Anaconda操作

创建虚拟环境+deepface安装:
env-0.jpg

env-1.jpg

env-2.jpg

pip install deepface -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. Pycharm操作

下载源码:https://github.com/serengil/deepface/tree/master
设置运行环境:File->Setting->Project->Python Interpreter->使用Anaconda创建的环境

env-3.jpg

2.使用

2.1 模型文件下载

模型下载地址:https://github.com/serengil/deepface_models/releases/,文件列表:

models.jpg

预训练面部识别模型:

  • VGG-Face 由Visual Geometry Group开发,是一种基于深度卷积神经网络的人脸识别模型。
  • FaceNet (128D, 512D) 由Google开发,是一种基于三维卷积神经网络的人脸识别模型。
  • OpenFace 由Carnegie Mellon University开发,是一种基于深度神经网络的人脸识别模型。
  • DeepID 由香港中文大学开发,是一种基于深度神经网络的人脸识别模型。
  • ArcFace 由中科院自动化所开发,是一种基于深度卷积神经网络的人脸识别模型。

预训练面部特征分析模型:

  • Age
  • Gender
  • Emotion
  • Race / Ethnicity

直接使用浏览器的下载速度堪称龟速,还很容易失败,我是用云服务器进行的下载,以下是全部链接:

wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/age_model_weights.h5
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/arcface_weights.h5
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/deepid_keras_weights.h5
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/facenet512_weights.h5
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/facenet_weights.h5
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/facial_expression_model_weights.h5
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/gender_model_weights.h5
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/openface_weights.h5
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/race_model_single_batch.h5
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/retinaface.h5
wget -c https://github.com/serengil/deepface_models/releases/download/v1.0/vgg_face_weights.h5
wget -c https://github.com/serengil/deepface_models/archive/refs/tags/v1.0.zip
wget -c https://github.com/serengil/deepface_models/archive/refs/tags/v1.0.tar.gz

刚开始速度也是很慢,随后就会起飞,如果一分钟还是几K的速度就断开重新开始,速度几M是可以达到的。下载成功后放置到functions.get_deepface_home()目录下:

  • Windows系统C:\Users\Administrator下的/.deepface/weights/目录下。
  • Linux系统functions.get_deepface_home()下的/.deepface/weights/目录下。

2.2 Facial Recognition

A modern face recognition pipeline consists of 5 common stages: detect, align, normalize, represent and verify. While Deepface handles all these common stages in the background, you don’t need to acquire in-depth knowledge about all the processes behind it. You can just call its verification, find or analysis function with a single line of code.
如今的人脸识别流程包括5个基本阶段:检测、对齐、归一化、表示和验证。Deepface会在后台处理所有这些,因此您不需要深入了解其背后的所有过程。你可以用一行代码调用它的验证、查找或分析函数。

2.3 Face Verification

这个函数验证一对人脸是否是同一个人。它期望输入的是精确的图像路径。也可以传递numpy或base64编码的图像。然后,它将返回一个字典,你只需要检查它的verified键。

result = DeepFace.verify(img1_path = "img1.jpg", img2_path = "img2.jpg")

# 由于测试时【VGG-Face】模型未下载完成故使用【Facenet】
result = DeepFace.verify(img1_path="tests/dataset/img1.jpg", img2_path="tests/dataset/img2.jpg", model_name="Facenet")

结果数据如下:

{
    "detector_backend": "opencv",
    "distance": 0.24256996744273296,
    "facial_areas": {
        "img1": {
            "h": 769,
            "w": 769,
            "x": 345,
            "y": 211
        },
        "img2": {
            "h": 512,
            "w": 512,
            "x": 516,
            "y": 192
        }
    },
    "model": "Facenet",
    "similarity_metric": "cosine",
    "threshold": 0.4,
    "time": 5.93,
    "verified": True
}

由于使用的模型不同,结果跟图片中的不完全一致:
stock-1.jpg
验证函数也可以处理多人脸对的情况。将会比较最相似的面部。测试代码及结果如下:

result = DeepFace.verify(img1_path="tests/dataset/img1.jpg", img2_path="tests/dataset/couple.jpg", model_name="Facenet")
{
    "detector_backend": "opencv",
    "distance": 0.2260340280992379,
    "facial_areas": {
        "img1": {
            "h": 769,
            "w": 769,
            "x": 345,
            "y": 211
        },
        "img2": {
            "h": 779,
            "w": 779,
            "x": 318,
            "y": 534
        }
    },
    "model": "Facenet",
    "similarity_metric": "cosine",
    "threshold": 0.4,
    "time": 5.2,
    "verified": True
}

由于使用的模型不同,结果跟图片中的不完全一致:
verify-many-faces.jpg

2.4 Face recognition

人脸识别需要多次进行人脸验证。在这里,deepface有一个开箱即用的查找函数来处理这个动作。它将在数据库路径中查找输入图像的身份它将返回pandas数据帧列表作为输出。同时,人脸数据库中的人脸嵌入被存储在pickle文件中,以便下次快速搜索。结果将是出现在源图像中的脸的大小。此外,数据库中的目标图像也可以有多个人脸。

dfs = DeepFace.find(img_path = "img1.jpg", db_path = "C:/workspace/my_db")

# 使用源码里的测试图片
dfs = DeepFace.find(img_path="tests/dataset/img1.jpg", db_path="tests/dataset/", model_name="Facenet")

结果数据,facenet_cosine越小相似度越高:

[                    identity  source_x  ...  source_h  Facenet_cosine
0    tests/dataset//img1.jpg       345  ...       769        0.000000
1   tests/dataset//img11.jpg       345  ...       769        0.184640
2    tests/dataset//img7.jpg       345  ...       769        0.193672
3   tests/dataset//img10.jpg       345  ...       769        0.221339
4  tests/dataset//couple.jpg       345  ...       769        0.226034
5    tests/dataset//img6.jpg       345  ...       769        0.230715
6    tests/dataset//img2.jpg       345  ...       769        0.242570
7    tests/dataset//img4.jpg       345  ...       769        0.246557
8    tests/dataset//img5.jpg       345  ...       769        0.259066

[9 rows x 6 columns]] 

stock-6-v2.jpg

2.5 Embeddings

人脸识别模型基本上是将人脸图像表示为多维向量。有时候,你直接需要这些嵌入向量。DeepFace带有专门的表示函数。标识函数返回嵌入列表。结果将是出现在图像路径中的面的大小。

embedding_objs = DeepFace.represent(img_path = "tests/dataset/img1.jpg")

# 实际测试
embedding_objs = DeepFace.represent(img_path="tests/dataset/img1.jpg", model_name="Facenet")

结果数据,:

[
    {
        "embedding": [
            0.8134615421295166,
            1.0957121849060059,
            1.477981686592102,
            -1.6971195936203003,
            0.49749791622161865,
            -0.6081872582435608...[省略了一些数据]
        ],
        "face_confidence": 10.068783960014116,
        "facial_area": {
            "h": 769,
            "w": 769,
            "x": 345,
            "y": 211
        }
    }
]

这个函数返回一个数组作为嵌入。嵌入数组的大小将根据模型名称而有所不同。例如,VGG-Face是默认模型,它将面部图像表示为2622维向量。

embedding = embedding_objs[0]["embedding"]
assert isinstance(embedding, list)
assert model_name = "VGG-Face" and len(embedding) == 2622

# 实际测试
embedding = embedding_objs[0]["embedding"]
assert isinstance(embedding, list)
assert len(embedding) == 128

在这里,嵌入也是用2622个槽水平绘制的。每个槽对应嵌入向量中的一个维度值,维度值在右侧的颜色条中进行说明。与2D条形码类似,垂直维度在插图中不存储任何信息。
image.png

2.6 Face recognition models

Deepface is a hybrid face recognition package. It currently wraps many state-of-the-art face recognition models: VGG-Face,Google FaceNet, OpenFace, Facebook DeepFace, DeepID, ArcFace, DlibandSFace. The default configuration uses VGG-Face model.

models = ["VGG-Face", "Facenet", "Facenet512", "OpenFace", "DeepFace", "DeepID", "ArcFace", "Dlib", "SFace"]

# face verification
result = DeepFace.verify(img1_path = "img1.jpg", 
      img2_path = "img2.jpg", 
      model_name = models[0]
)

# face recognition
dfs = DeepFace.find(img_path = "img1.jpg",
      db_path = "C:/workspace/my_db", 
      model_name = models[1]
)

# embeddings
embedding_objs = DeepFace.represent(img_path = "img.jpg", 
      model_name = models[2]
)
# 这些跟前边的一样 不再进行实测

FaceNet, VGG-Face, ArcFace and Dlib are overperforming ones based on experiments. You can find out the scores of those models below on both Labeled Faces in the Wild and YouTube Faces in the Wild data sets declared by its creators.

ModelLFW ScoreYTF Score
Facenet51299.65%-
SFace99.60%-
ArcFace99.41%-
Dlib99.38 %-
Facenet99.20%-
VGG-Face98.78%97.40%
Human-beings97.53%-
OpenFace93.80%-
DeepID-97.05%

LFW Score和YTF Score是两种用于评估人脸识别算法性能的指标,分别基于LFW和YTF两个数据集。LFW(Labeled Faces in the Wild)是一个包含超过13,000张带有人名标注的人脸图像的数据集,这些图像来自互联网上不同的人脸图库,涵盖了各种人种、姿态和表情。YTF(YouTube Faces)是一个包含3425个视频的人脸视频数据集,这些视频来自YouTube上1595个不同人的视频,涉及大量的姿态、表情、光照和遮挡变化。LFW Score和YTF Score分别使用LFW和YTF数据集中的匹配对和不匹配对来测试人脸识别算法是否能够正确判断两张人脸是否属于同一个人。一般来说,LFW Score和YTF Score越高,表示人脸识别算法越准确。

2.7 Similarity

人脸识别模型是正则卷积神经网络,它们负责将人脸表示为向量。我们认为同一个人的两张脸应该比不同人的两张脸更相似。相似度可以通过余弦相似度、欧氏距离和L2形式等不同度量来计算。默认配置使用余弦相似度。

metrics = ["cosine", "euclidean", "euclidean_l2"]

#face verification
result = DeepFace.verify(img1_path = "img1.jpg", 
          img2_path = "img2.jpg", 
          distance_metric = metrics[1]
)

#face recognition
dfs = DeepFace.find(img_path = "img1.jpg", 
          db_path = "C:/workspace/my_db", 
          distance_metric = metrics[2]
)

# 实际测试
# face verification
result = DeepFace.verify(img1_path="tests/dataset/img1.jpg",
                         img2_path="tests/dataset/img2.jpg",
                         model_name="Facenet",
                         distance_metric=metrics[1]
                         )
# face recognition
dfs = DeepFace.find(img_path="tests/dataset/img1.jpg",
                    db_path="tests/dataset/",
                    model_name="Facenet",
                    distance_metric=metrics[2]
                    )

前面的cosine距离是0.24256996744273296:

{
    "detector_backend": "opencv",
    "distance": 8.146639638611239,
    "facial_areas": {
        "img1": {
            "h": 769,
            "w": 769,
            "x": 345,
            "y": 211
        },
        "img2": {
            "h": 512,
            "w": 512,
            "x": 516,
            "y": 192
        }
    },
    "model": "Facenet",
    "similarity_metric": "euclidean",
    "threshold": 10,
    "time": 4.53,
    "verified": True
}

之前的Facenet_cosineFacenet_euclidean_l2区别还是挺大的:

[                    identity  source_x  ...  source_h  Facenet_euclidean_l2
0    tests/dataset//img1.jpg       345  ...       769              0.000000
1   tests/dataset//img11.jpg       345  ...       769              0.607683
2    tests/dataset//img7.jpg       345  ...       769              0.622369
3   tests/dataset//img10.jpg       345  ...       769              0.665341
4  tests/dataset//couple.jpg       345  ...       769              0.672360
5    tests/dataset//img6.jpg       345  ...       769              0.679286
6    tests/dataset//img2.jpg       345  ...       769              0.696520
7    tests/dataset//img4.jpg       345  ...       769              0.702221
8    tests/dataset//img5.jpg       345  ...       769              0.719814

[9 rows x 6 columns]] 

欧几里得L2形式似乎比余弦和正则欧几里得距离更稳定。但是实际使用,更常用的是cosine因为它的结果是0~1可以换算成相似度100%~0%

2.8 Facial Attribute Analysis

Deepface还配备了强大的面部属性分析模块,包括年龄,性别,面部表情(包括愤怒,恐惧,中性,悲伤,厌恶,惊喜)和种族(包括亚洲人、白人、中东人、印度人、拉丁裔和黑人)预测。结果将是出现在源图像中的脸的大小。

objs = DeepFace.analyze(img_path = "img4.jpg", 
        actions = ['age', 'gender', 'race', 'emotion']
)

# 实际测试
objs = DeepFace.analyze(img_path="tests/dataset/img4.jpg", actions=['age', 'gender', 'race', 'emotion'])

结果数据:

[
    {
        "age": 31,
        "dominant_emotion": "happy",
        "dominant_gender": "Woman",
        "dominant_race": "white",
        "emotion": {
            "angry": 0.06343021349136967,
            "disgust": 0.000025026363773344608,
            "fear": 0.16905087126557575,
            "happy": 92.43509859620349,
            "neutral": 6.627006038784261,
            "sad": 0.4689154121827588,
            "surprise": 0.23647171420196125
        },
        "gender": {
            "Man": 0.00018949589275507606,
            "Woman": 99.99980926513672
        },
        "race": {
            "asian": 0.05465112952298698,
            "black": 0.0038303477149617426,
            "indian": 0.08727377218708528,
            "latino hispanic": 3.3318923909600016,
            "middle eastern": 5.098589813625205,
            "white": 91.42376133345135
        },
        "region": {
            "h": 919,
            "w": 919,
            "x": 419,
            "y": 301
        }
    }
]

stock-2.jpg
根据其教程,年龄模型的平均绝对误差为±4.65,性别模型的准确率为97.44%,精度为96.29%,召回率为95.05%。

2.9 Face Detectors

人脸检测和对齐是现代人脸识别流程的重要早期阶段。实验表明,仅仅对齐就能使人脸识别准确率提高近1%。OpenCV,SSD,Dlib,MTCNN,RetinaFace,MediaPipe,YOLOv8 Face和YuNet探测器被包裹在deepface中。
所有deepface函数都接受一个可选的检测器后端输入参数。你可以用这个参数在这些检测器之间切换。OpenCV是默认的检测器。

backends = [
  'opencv', 
  'ssd', 
  'dlib', 
  'mtcnn', 
  'retinaface', 
  'mediapipe',
  'yolov8',
  'yunet',
]

#face verification
obj = DeepFace.verify(img1_path = "img1.jpg", 
        img2_path = "img2.jpg", 
        detector_backend = backends[0]
)

#face recognition
dfs = DeepFace.find(img_path = "img.jpg", 
        db_path = "my_db", 
        detector_backend = backends[1]
)

#embeddings
embedding_objs = DeepFace.represent(img_path = "img.jpg", 
        detector_backend = backends[2]
)

#facial analysis
demographies = DeepFace.analyze(img_path = "img4.jpg", 
        detector_backend = backends[3]
)

#face detection and alignment
face_objs = DeepFace.extract_faces(img_path = "img.jpg", 
        target_size = (224, 224), 
        detector_backend = backends[4]
)
# 这里不再进行详细的测试

人脸识别模型实际上是CNN模型,它们期望标准大小的输入。因此,在表示之前需要调整大小。为了避免变形,deepface在检测和对齐后根据目标大小参数添加黑色填充像素。
RetinaFace和MTCNN似乎在检测和对齐阶段表现优异,但它们要慢得多。如果管道的速度更重要,那么应该使用opencv或ssd。另一方面,如果你考虑到准确性,那么你应该使用retinaface或mtcnn。
如下图所示,即使在人群中,RetinaFace的表现也非常令人满意。此外,它还具有令人难以置信的面部地标检测性能。突出的红点表示一些面部标志,如眼睛、鼻子和嘴巴。因此,RetinaFace的对齐分数也很高。

retinaface-results.jpeg
你可以在这个回购上找到更多关于RetinaFace的信息。

3.总结

框架很强大,有现成的模型和api,部署等由于篇幅所限我们下篇继续。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1044608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知网G4期刊-基础教育论坛-如何投稿?

《基础教育论坛》知网 3版5000字符 24年上半年刊期,可收中小学基础教育,幼儿教育等教育全科文章。 《基础教育论坛》主要刊登有关教育教学理论探讨及课程改革、教学改革、考试改革研究等方面的文章,为广大基础教育工作者提供学术交流的…

Lua学习笔记:debug.sethook函数

前言 本篇在讲什么 使用Lua的debug.setHook函数 本篇需要什么 对Lua语法有简单认知 依赖Sublime Text工具 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ 👉 ♠ 一级标题 &…

第五章:C语言的数组

文章目录 1、数组的理解2、各类数组的定义3、变长数组4、字符数组 1、数组的理解 一维数组:比如定义一个int a[3];,那么可以将其看成两部分,a【3】为①,int为②。意思就是有一个数组名字为a,里面包含3个(池&#xff0…

QT5自定义下拉框为QTreeView类型(树形分上下级)的下拉框(QComboBox)(超详细步骤)

项目开发中,很可能简单的QComboBox满足不了需求,就需要自定义QComboBox。 先看效果。 自定义ComboBox 1、先建立一个project,命名为CustomComboBox,建立一个project的过程不细说了。建立后的工程目录如下图: 2、在项目名CustomCo…

React 全栈体系(十六)

第八章 React 扩展 五、Context 1. 代码 /* index.jsx */ import React, { Component } from react import ./index.css//创建Context对象 const MyContext React.createContext() const {Provider,Consumer} MyContext export default class A extends Component {state …

蓝桥杯每日一题20223.9.26

4407. 扫雷 - AcWing题库 题目描述 分析 此题目使用map等都会超时,所以我们可以巧妙的使用哈希模拟散列表,哈希表初始化为-1首先将地雷读入哈希表,找到地雷的坐标在哈希表中对应的下标,如果没有则此地雷的位置第一次出现&#…

2023彩虹商城自助发卡商城+卡卡云模板+wxstore模板

2023彩虹商城自助发卡商城免授权版卡卡云模板wxstore模板 全新SUP模板/知识付费模板/卡卡云模板,首页美化,登陆页美化,修复了pc端购物车页面显示不正常的问题。

RabbitMQ的工作模式——WorkQueues模式

1.工作队列模式 生产者代码 public class Producer_WorkQueues1 {public static void main(String[] args) throws IOException, TimeoutException {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory();//2.设置参数factory.setHost("172.16.98.133&qu…

动态线程池框架DynamicTp v1.1.4大版本发布,新增若干实用特性

DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池监控管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 DynamicTp 特性 代码零侵入:我们改变了线程池以往的使用姿势,所有配置均放…

【算法】直接插入排序

文章目录 概念实现过程时间复杂度和空间复杂度代码示例 总结 概念 直接插入排序(Insertion Sort)是一种简单直观的排序算法,它的基本思想是通过构建有序的子序列,逐步将无序的元素插入到有序序列中,最终实现整体的排序…

【python基础】—内置模块os常用功能介绍

文章目录 前言一、模块变量os.nameos.environ 二、文件与文件夹os.getcwd(path)os.chdir(path)os.listdir(path)os.mkdir(path)os.remove(path)os.rename(src,dst) 三、os的子模块:Path模块os.path.abspath(path)os.path.basename(path)os.path.dirname(path)os.pat…

软件设计模式——桥接模式

摘要 桥接模式(Bridge pattern): 使用桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变。 一、桥接模式的意图 将抽象与实现分离开来,使它们可以独立变化。 二、桥接模式的类图 Abstraction: 定义抽象类的接口Implementor: 定义实现类接口 …

C++标准模板(STL)- 输入/输出操纵符-(std::resetiosflags,std::setiosflags)

操纵符是令代码能以 operator<< 或 operator>> 控制输入/输出流的帮助函数。 不以参数调用的操纵符&#xff08;例如 std::cout << std::boolalpha; 或 std::cin >> std::hex; &#xff09;实现为接受到流的引用为其唯一参数的函数。 basic_ostream::…

【计算机视觉】3.传统计算机视觉方法

传统计算机视觉方法 一、大纲图像分割人脸检测行人检测 二、图像分割基于阈值检测的方法基于边缘检测的方法基于区域的分割方法基于图论的分割方法 三、人脸检测四、行人检测五、SVM六、DPM 一、大纲 图像分割 基于阈值、基于边缘 基于区域、基于图论 人脸检测 Haar-like 特征…

渗透测试之——信息收集思路

请遵守网络安全法 渗透测试时要和客户定好时间再使用扫描器。 渗透测试切记不要渗透客户所给域名的同级域名&#xff0c;可以渗透所给域名的子域名。信息收集永远是渗透测试的第一步。 1. 测试目标 xiusafe.com 2. 域名与ip 渗透测试中IP比域名更适合做渗透&#xff1b; …

Elasticsearch 集群时的内部结构是怎样的?

Apache Lucene : Flush, Commit Elasticsearch 是一个基于 Apache Lucene 构建的搜索引擎。 它利用 Lucene 的倒排索引、查询处理和返回搜索结果等功能来执行搜索。 它还扩展了 Lucene 的功能&#xff0c;添加分布式处理功能以支持大型数据集的搜索。 让我们看一下 Apache Luc…

网络通信(套接字通信)(C/C++)

1.网络编程必知概念 1.广域网和局域网 广域网:又称外网、公网。是连接不同地区局域网或城域网进行计算机通信的远程公共网络。 局域网:在一定的通信范围内,有很个多计算机组成的私有网络就叫局域网。(这些计算机相互之间是可以通信的,但是不能直接访问外网(可以通过网线…

ElementUI -- Mock.js介绍和使用与首页导航栏左侧菜单搭建

1.1 mockjs介绍 Mock.js是一个用于生成随机数据和模拟接口请求的JavaScript库。它可以帮助开发人员在前端开发过程中模拟后端接口的返回数据&#xff0c;以便进行前端页面的开发和测试。 Mock.js有两个重要的特性风靡前端: 数据类型丰富 Mock.js提供了一套简单易用的API&#x…

FL Studio21编曲软件好不好用?值得下载吗

现在的编曲界&#xff0c;鱼龙混杂&#xff0c;很多垃圾软件都来滥竽充数&#xff0c;能入流的编曲软件真的是屈指可数。而编曲业的缺口却又如此之大&#xff0c;所以各类货色都想入行分一杯羹。然而没有实力注定就没有市场而FL Studio又是一款非常著名&#xff0c;实力超群的编…

CTF_BUUCTF_MIS解题_05大白

题目地址&#xff1a;BUUCTF在线评测 文件下载解压之后发现真是一个大白 但是这个大白越看越不对劲&#xff0c;怎么下半身给整没了呢&#xff1f; 随机考虑到图片高度的隐写&#xff0c;杀手锏winhex上场&#xff0c;高度改高一下看看 flag已出现&#xff1a;flag{He1l0_d4_…