news 2026/10/7 16:07:48

PaddleX 图像特征模块使用教程:从特征向量提取到检索识别实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PaddleX 图像特征模块使用教程:从特征向量提取到检索识别实战
  • 人工智能
  • 大模型
  • 低代码
  • 计算机视觉
  • 深度学习
  • NLP
  • 模型推理服务
  • RAG

【免费下载链接】PaddleX

All-in-One Development Tool based on PaddlePaddle

项目地址:https://gitcode.com/paddlepaddle/PaddleX
点击查看免费下载

图像特征模块是飞桨 PaddleX 中面向图像检索任务的核心能力之一,它通过深度学习方法从图像中自动提取高维特征向量,为后续的向量检索与相似图像匹配提供输入。本教程以 关联文档 为骨架,结合仓库中的模型配置文件与推理源码,完整讲解 PaddleX 图像特征模块的模型选型、Python 快速集成、数据集校验、模型训练/评估/推理的端到端二次开发流程,读完即可独立构建自己的图像特征提取与检索识别方案。

一、模块概述

图像特征模块是计算机视觉中的一项重要任务,主要指的是通过深度学习方法自动从图像数据中提取有用的特征,以便于后续的图像检索任务。该模块的性能直接影响到后续任务的准确性和效率。在实际应用中,图像特征通常会输出一组特征向量,这些向量能够有效地表示图像的内容、结构、纹理等信息,并将作为输入传递给后续的检索模块进行处理。

在 PaddleX 中,图像特征模块以PP-ShiTuV2_rec系列模型为默认实现,其推理输出是一组经 L2 归一化的浮点特征向量(默认 512 维)。从源码结构看,该模块属于通用图像特征系统 PP-ShiTuV2 的特征提取子模块:PP-ShiTuV2 由主体检测、特征提取、向量检索三个模块构成,特征提取模型负责把图像编码为向量,检索模块负责在向量库中完成相似度匹配与识别(参见 PP-ShiTuV2 产线配置)。

二、支持模型列表

PaddleX 图像特征模块当前提供 3 个官方预训练模型,均由仓库中的 模型注册表 登记,可在 configs/modules/image_feature 目录下找到对应的 YAML 配置文件:

模型模型下载链接recall@1 (%)GPU推理耗时(ms)
[常规模式 / 高性能模式]
CPU推理耗时(ms)
[常规模式 / 高性能模式]
模型存储大小(MB)介绍
PP-ShiTuV2_rec推理模型 / 训练模型84.23.91 / 1.066.82 / 2.8916.3通用图像特征系统 PP-ShiTuV2 的特征提取模块模型,可根据系统情况选择不同的模型
PP-ShiTuV2_rec_CLIP_vit_base推理模型 / 训练模型88.6912.57 / 11.6267.09 / 67.09306.6同上,基于 CLIP ViT-Base 骨干
PP-ShiTuV2_rec_CLIP_vit_large推理模型 / 训练模型91.0349.85 / 49.85229.14 / 229.141050同上,基于 CLIP ViT-Large 骨干

测试环境说明:

  • 性能测试环境
    • 测试数据集:PaddleX 自建数据集。
    • 硬件配置:GPU 为 NVIDIA Tesla T4;CPU 为 Intel Xeon Gold 6271C @ 2.60GHz;其他环境为 Ubuntu 20.04 / CUDA 11.8 / cuDNN 8.9 / TensorRT 8.6.1.6。
  • 推理模式说明
模式GPU配置CPU配置加速技术组合
常规模式FP32精度 / 无TRT加速FP32精度 / 8线程PaddleInference
高性能模式选择先验精度类型和加速策略的最优组合FP32精度 / 8线程选择先验最优后端(Paddle/OpenVINO/TRT等)

从三份配置文件的差异可以看出选型规律:PP-ShiTuV2_rec体积最小(16.3 MB)、推理最快,适合对速度敏感的场景;两个 CLIP 版本特征表达更强、召回率更高,但模型体积与耗时成倍增加(如 PP-ShiTuV2_rec_CLIP_vit_base.yaml 中默认batch_size为 32、学习率 0.001,与PP-ShiTuV2_rec的 128/0.01 不同),可根据精度与效率的平衡选择。

三、快速集成

❗ 在快速集成前,请先安装 PaddleX 的 wheel 包,详细请参考 PaddleX本地安装教程。

完成 wheel 包的安装后,几行代码即可完成图像特征模块的推理,可以任意切换该模块下的模型,也可以将图像特征模块的模型推理集成到您的项目中。运行以下代码前,请先将示例图片下载到本地:

from paddlex import create_model model_name = "PP-ShiTuV2_rec" model = create_model(model_name) output = model.predict("general_image_recognition_001.jpg", batch_size=1) for res in output: res.print() res.save_to_json("./output/res.json")

运行后,得到的结果为:

{'res': {'input_path': 'general_image_recognition_001.jpg', 'page_index': None, 'feature': array([ 0.04910231, ..., -0.07126085], dtype=float32)}}

参数含义如下:

  • input_path:输入的待预测图像的路径
  • feature:提取的图像特征向量,维度为模型输出特征维度,此处为 512 维

3.1create_model参数说明

create_model实例化图像特征模型(此处以PP-ShiTuV2_rec为例),具体说明如下:

参数参数说明参数类型可选项默认值
model_name模型名称str无无
model_dir模型存储路径str无无
device模型推理设备str支持指定 GPU 具体卡号,如gpu:0;其他硬件具体卡号,如npu:0;CPU 如cpugpu:0
use_hpip是否启用高性能推理插件bool无False
hpi_config高性能推理配置dict|None无None

其中,model_name必须指定。指定model_name后,默认使用 PaddleX 内置的模型参数;在此基础上,指定model_dir时,使用用户自定义的模型。需要注意的是,模型名必须命中 MODELS 注册表 中登记的PP-ShiTuV2_rec、PP-ShiTuV2_rec_CLIP_vit_base、PP-ShiTuV2_rec_CLIP_vit_large三者之一,create_model会据此自动组装对应模型的预处理、推理与后处理流水线。

3.2predict()方法参数说明

调用图像特征模型的predict()方法进行推理预测,predict()方法参数有input和batch_size,具体说明如下:

参数参数说明参数类型可选项默认值
input待预测数据,支持多种输入类型Python Var/str/list
  • Python变量,如numpy.ndarray表示的图像数据
  • 文件路径,如图像文件的本地路径:/root/data/img.jpg
  • URL链接,如图像文件的网络 URL:示例
  • 本地目录,该目录下需包含待预测数据文件,如本地路径:/root/data/
  • 列表,列表元素需为上述类型数据,如[numpy.ndarray, numpy.ndarray]、["/root/data/img1.jpg", "/root/data/img2.jpg"]、["/root/data1", "/root/data2"]
无
batch_size批大小int任意整数1

从推理实现 predictor.py 可以看到,predict内部依次执行:读取 RGB 图像 → 按短边 Resize → 按 ImageNet 均值/标准差 Normalize → 转 CHW 并组 batch → 静态图推理 → 后处理输出特征。其中后处理算子 NormalizeFeatures 会对网络输出做 L2 归一化(先求向量平方和开方,再逐元素相除),使得输出特征可直接用于后续余弦相似度检索,这也是本模块推理结果可被检索模块直接消费的关键一步。

3.3 预测结果的处理方法

对预测结果进行处理,每个样本的预测结果均为对应的 Result 对象(该模块使用 IdentityResult 封装),且支持打印、保存为json文件的操作:

方法方法说明参数参数类型参数说明默认值
print()打印结果到终端format_jsonbool是否对输出内容使用JSON缩进格式化True
indentint指定缩进级别,以美化输出的JSON数据,使其更具可读性,仅当format_json为True时有效4
ensure_asciibool控制是否将非ASCII字符转义为Unicode。为True时全部转义,False保留原始字符,仅当format_json为True时有效False
save_to_json()将结果保存为 json 格式的文件save_pathstr保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致无
indentint指定缩进级别,以美化输出的JSON数据,使其更具可读性,仅当format_json为True时有效4
ensure_asciibool控制是否将非ASCII字符转义为Unicode。为True时全部转义,False保留原始字符,仅当format_json为True时有效False

此外,也支持通过属性获取预测结果:

属性属性说明
json获取预测的json格式的结果

需要说明的是,IdentityResult在序列化时会剔除input_img原始图像字段(参见 result.py),因此打印与保存的 JSON 中只保留input_path、page_index与feature等关键信息。

四、二次开发

如果你追求更高精度的现有模型,可以使用 PaddleX 的二次开发能力,开发更好的图像特征模型。在使用 PaddleX 开发图像特征模型之前,请务必安装 PaddleX 的分类相关模型训练插件,安装过程可以参考 PaddleX本地安装教程。

4.1 数据准备

在进行模型训练前,需要准备相应任务模块的数据集。PaddleX 针对每一个模块提供了数据校验功能,只有通过数据校验的数据才可以进行模型训练。此外,PaddleX 为每一个模块都提供了 Demo 数据集,您可以基于官方提供的 Demo 数据完成后续的开发。若您希望用私有数据集进行后续的模型训练,可以参考 PaddleX图像特征任务模块数据标注教程。

4.1.1 Demo 数据下载

参考下面的命令将 Demo 数据集下载到指定文件夹:

wget https://paddle-model-ecology.bj.bcebos.com/paddlex/data/Inshop_examples.tar -P ./dataset tar -xf ./dataset/Inshop_examples.tar -C ./dataset/
4.1.2 数据校验

一行命令即可完成数据校验:

python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/Inshop_examples

执行上述命令后,PaddleX 会对数据集进行校验,并统计数据集的基本信息,命令运行成功后会在 log 中打印出Check dataset passed !信息。校验结果文件保存在./output/check_dataset_result.json,同时相关产出会保存在当前目录的./output/check_dataset目录下,产出目录中包括可视化的示例样本图片和样本分布直方图。

校验结果详情(点击展开):

校验结果文件具体内容为:

"done_flag": true, "check_pass": true, "attributes": { "train_samples": 1000, "train_sample_paths": [ "check_dataset/demo_img/05_1_front.jpg", "check_dataset/demo_img/02_1_front.jpg", "check_dataset/demo_img/02_3_back.jpg", "check_dataset/demo_img/04_3_back.jpg", "check_dataset/demo_img/04_2_side.jpg", "check_dataset/demo_img/12_1_front.jpg", "check_dataset/demo_img/07_2_side.jpg", "check_dataset/demo_img/04_7_additional.jpg", "check_dataset/demo_img/04_4_full.jpg", "check_dataset/demo_img/01_1_front.jpg" ], "gallery_samples": 110, "gallery_sample_paths": [ "check_dataset/demo_img/06_2_side.jpg", "check_dataset/demo_img/01_4_full.jpg", "check_dataset/demo_img/04_7_additional.jpg", "check_dataset/demo_img/02_1_front.jpg", "check_dataset/demo_img/02_3_back.jpg", "check_dataset/demo_img/02_3_back.jpg", "check_dataset/demo_img/02_4_full.jpg", "check_dataset/demo_img/03_4_full.jpg", "check_dataset/demo_img/02_2_side.jpg", "check_dataset/demo_img/03_2_side.jpg" ], "query_samples": 125, "query_sample_paths": [ "check_dataset/demo_img/08_7_additional.jpg", "check_dataset/demo_img/01_7_additional.jpg", "check_dataset/demo_img/02_4_full.jpg", "check_dataset/demo_img/04_4_full.jpg", "check_dataset/demo_img/09_7_additional.jpg", "check_dataset/demo_img/04_3_back.jpg", "check_dataset/demo_img/02_1_front.jpg", "check_dataset/demo_img/06_2_side.jpg", "check_dataset/demo_img/02_7_additional.jpg", "check_dataset/demo_img/02_2_side.jpg" ] }, "analysis": { "histogram": "check_dataset/histogram.png" }, "dataset_path": "./dataset/Inshop_examples", "show_type": "image", "dataset_type": "ShiTuRecDataset"

上述校验结果中,check_pass为true表示数据集格式符合要求,其他部分指标说明如下:

  • attributes.train_samples:该数据集训练样本数量为 1000;
  • attributes.gallery_samples:该数据集被查询(gallery)样本数量为 110;
  • attributes.query_samples:该数据集查询(query)样本数量为 125;
  • attributes.train_sample_paths:该数据集训练样本可视化图片相对路径列表;
  • attributes.gallery_sample_paths:该数据集被查询样本可视化图片相对路径列表;
  • attributes.query_sample_paths:该数据集查询样本可视化图片相对路径列表。

另外,数据集校验还对数据集中图像数量和图像类别情况进行了分析,并绘制了分布直方图(histogram.png)。值得注意,dataset_type字段标识该模块的数据集类型为ShiTuRecDataset——它天然划分为 train / gallery / query 三个集合,这正是图像检索任务“训练、建库、查询”三段式流程的数据形态,区别于普通分类数据集的 train/val 划分。

4.1.3 数据集格式转换/数据集划分(可选)

在完成数据校验之后,可以通过修改配置文件或是追加超参数的方式对数据集的格式进行转换,也可以对数据集的训练/验证比例进行重新划分。

(1)数据集格式转换

图像特征任务支持LabelMe格式的数据集转换为ShiTuRecDataset格式,数据集格式转换的参数可以通过修改配置文件中CheckDataset下的字段进行设置:

  • CheckDataset.convert.enable:是否进行数据集格式转换,图像特征任务支持LabelMe格式的数据集转换为ShiTuRecDataset格式,默认为False;
  • CheckDataset.convert.src_dataset_type:如果进行数据集格式转换,则需设置源数据集格式,默认为null,可选值为LabelMe。

例如,想将LabelMe格式的数据集转换为ShiTuRecDataset格式,先下载示例数据:

cd /path/to/paddlex wget https://paddle-model-ecology.bj.bcebos.com/paddlex/data/image_classification_labelme_examples.tar -P ./dataset tar -xf ./dataset/image_classification_labelme_examples.tar -C ./dataset/

再将配置文件修改为:

...... CheckDataset: ...... convert: enable: True src_dataset_type: LabelMe ......

随后执行命令:

python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/image_classification_labelme_examples

数据转换执行之后,原有标注文件会被在原路径下重命名为xxx.bak。以上参数同样支持通过追加命令行参数的方式进行设置:

python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/image_classification_labelme_examples \ -o CheckDataset.convert.enable=True \ -o CheckDataset.convert.src_dataset_type=LabelMe

(2)数据集划分

数据集划分的参数同样通过CheckDataset下的字段设置:

  • CheckDataset.split.enable:是否进行重新划分数据集,为True时进行数据集重划分,默认为False;
  • CheckDataset.split.train_percent:如果重新划分数据集,则需要设置训练集的百分比,类型为 0-100 之间的任意整数,需要保证和gallery_percent、query_percent值加和为 100。

例如,想重新划分数据集为训练集占比 70%、被查询数据集占比 20%、查询数据集占比 10%,则需将配置文件修改为:

...... CheckDataset: ...... split: enable: True train_percent: 70 gallery_percent: 20 query_percent: 10 ......

随后执行命令:

python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/Inshop_examples

数据划分执行之后,原有标注文件会被在原路径下重命名为xxx.bak。以上参数同样支持通过追加命令行参数的方式进行设置:

python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/Inshop_examples \ -o CheckDataset.split.enable=True \ -o CheckDataset.split.train_percent=70 \ -o CheckDataset.split.gallery_percent=20 \ -o CheckDataset.split.query_percent=10

❗注意:由于图像特征模型评估的特殊性,当且仅当 train、query、gallery 集合属于同一类别体系下,数据切分才有意义。在图像特征模型的评估过程中,必须满足 gallery 集合和 query 集合属于同一类别体系,其允许和 train 集合不在同一类别体系;如果 gallery 集合和 query 集合与 train 集合不在同一类别体系,则数据划分后的评估没有意义,建议谨慎操作。

4.2 模型训练

一条命令即可完成模型的训练,以此处图像特征模型PP-ShiTuV2_rec的训练为例:

python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.mode=train \ -o Global.dataset_dir=./dataset/Inshop_examples

需要如下几步:

  • 指定模型的.yaml配置文件路径(此处为PP-ShiTuV2_rec.yaml,训练其他模型时,需要指定相应的配置文件,模型和配置文件的对应关系可以查阅 PaddleX模型列表(CPU/GPU));
  • 指定模式为模型训练:-o Global.mode=train;
  • 指定训练数据集路径:-o Global.dataset_dir;
  • 其他相关参数均可通过修改.yaml配置文件中的Global和Train下的字段来进行设置,也可以通过在命令行中追加参数来进行调整。如指定前 2 卡 GPU 训练:-o Global.device=gpu:0,1;设置训练轮次数为 10:-o Train.epochs_iters=10。更多可修改的参数及其详细解释,可以查阅模型对应任务模块的配置文件说明 PaddleX通用模型配置文件参数说明;
  • 新特性:Paddle 3.0 版本支持了 CINN 神经网络编译器,在使用 GPU 设备训练时,不同模型有不同程度的训练加速效果。在 PaddleX 中训练模型时,可通过指定参数-o Train.dy2st=True开启。

以 PP-ShiTuV2_rec.yaml 为例,Train段内置的默认超参数包括:num_classes: 159(类别数,需与数据集类别一致)、epochs_iters: 20、batch_size: 128、learning_rate: 0.01、warmup_steps: 5、pretrain_weight_path(指向官方预训练权重 URL),以及eval_interval、save_interval等控制参数;Global.device默认值在该配置中为gpu:0,1,2,3,训练时可按实际卡数改写。

更多说明(点击展开):

  • 模型训练过程中,PaddleX 会自动保存模型权重文件,默认为output,如需指定保存路径,可通过配置文件中-o Global.output字段进行设置;
  • PaddleX 对您屏蔽了动态图权重和静态图权重的概念。在模型训练的过程中,会同时产出动态图和静态图的权重,在模型推理时,默认选择静态图权重推理;
  • 在完成模型训练后,所有产出保存在指定的输出目录(默认为./output/)下,通常有以下产出:
    • train_result.json:训练结果记录文件,记录了训练任务是否正常完成,以及产出的权重指标、相关文件路径等;
    • train.log:训练日志文件,记录了训练过程中的模型指标变化、loss 变化等;
    • config.yaml:训练配置文件,记录了本次训练的超参数的配置;
    • .pdparams、.pdema、.pdopt.pdstate、.pdiparams、.json:模型权重相关文件,包括网络参数、优化器、EMA、静态图网络参数、静态图网络结构等;
    • 【注意】:Paddle 3.0.0 对于静态图网络结构信息的存储格式,由 protobuf(原.pdmodel后缀文件)升级为 json(现.json后缀文件),以兼容 PIR 体系,并获得更好的灵活性与扩展性。

4.3 模型评估

在完成模型训练后,可以对指定的模型权重文件在验证集上进行评估,验证模型精度。使用 PaddleX 进行模型评估,一条命令即可完成:

python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.mode=evaluate \ -o Global.dataset_dir=./dataset/Inshop_examples

与模型训练类似,需要如下几步:

  • 指定模型的.yaml配置文件路径(此处为PP-ShiTuV2_rec.yaml);
  • 指定模式为模型评估:-o Global.mode=evaluate;
  • 指定验证数据集路径:-o Global.dataset_dir。

其他相关参数均可通过修改.yaml配置文件中的Global和Evaluate下的字段来进行设置,详细请参考 PaddleX通用模型配置文件参数说明。

更多说明(点击展开):

  • 在模型评估时,需要指定模型权重文件路径,每个配置文件中都内置了默认的权重保存路径(如PP-ShiTuV2_rec.yaml中Evaluate.weight_path默认为output/best_model/best_model.pdparams),如需要改变,只需要通过追加命令行参数的形式进行设置即可,如-o Evaluate.weight_path=./output/best_model/best_model.pdparams;
  • 在完成模型评估后,会产出evaluate_result.json,其记录了评估的结果,具体来说,记录了评估任务是否正常完成,以及模型的评估指标,包含recall1、recall5、mAP。这正是图像检索任务的标准评估口径:recall@k 衡量在 top-k 命中正确结果的比例,mAP 综合衡量排序质量。

4.4 模型推理

在完成模型的训练和评估后,即可使用训练好的模型权重进行推理预测或者进行 Python 集成。

4.4.1 模型推理

通过命令行的方式进行推理预测,只需如下一条命令。运行以下代码前,请将示例图片下载到本地:

python main.py -c paddlex/configs/modules/image_feature/PP-ShiTuV2_rec.yaml \ -o Global.mode=predict \ -o Predict.model_dir="./output/best_model/inference" \ -o Predict.input="general_image_recognition_001.jpg"

与模型训练和评估类似,需要如下几步:

  • 指定模型的.yaml配置文件路径(此处为PP-ShiTuV2_rec.yaml);
  • 指定模式为模型推理预测:-o Global.mode=predict;
  • 指定模型权重路径:-o Predict.model_dir="./output/best_model/inference";
  • 指定输入数据路径:-o Predict.input="..."。

其他相关参数均可通过修改.yaml配置文件中的Global和Predict下的字段来进行设置,详细请参考 PaddleX通用模型配置文件参数说明。

❗注意:图像特征模型的推理结果为一组向量,需要配合检索模块完成图像的识别。

这一警告点明了本模块的使用边界:特征提取只是检索链路的前半程。完整的识别方案还需两步——先用待检索图库构建向量索引(gallery 特征入库),再对查询图提取特征并在索引中做相似度检索。仓库中的 test_shitu.py 演示了在 PP-ShiTuV2 产线中的完整用法:通过pipeline.build_index(gallery_imgs=..., gallery_label=...)为图库构建索引,再调用pipeline.predict(..., index=index_data)完成识别。

4.4.2 模型集成

模型可以直接集成到 PaddleX 产线中,也可以直接集成到您自己的项目中。

1. 产线集成

图像特征模块可以集成的 PaddleX 产线为通用图像特征产线(coming soon),只需要替换模型路径即可完成相关产线的图像特征模块的模型更新。在产线集成中,你可以使用服务化部署来部署你得到的模型。产线的完整配置参考 PP-ShiTuV2.yaml,其中SubModules.Recognition段通过model_name: PP-ShiTuV2_rec挂载特征提取模型,model_dir置为null表示使用官方权重,替换为本地路径即可更新为自训模型。

2. 模块集成

您产出的权重可以直接集成到图像特征模块中,可以参考快速集成的 Python 示例代码,只需要将模型替换为你训练得到的模型路径即可,即在使用create_model时传入model_dir="./output/best_model/inference"。

您也可以利用 PaddleX 高性能推理插件来优化您模型的推理过程,进一步提升效率,详细的流程请参考 PaddleX高性能推理指南。

五、小结

PaddleX 图像特征模块提供了一条“特征提取模型 + 二次开发 + 产线集成”的完整链路:开箱即用时可选用官方PP-ShiTuV2_rec系列模型快速拿到 512 维 L2 归一化特征向量;追求更高精度时,可基于ShiTuRecDataset数据格式完成数据集校验、格式转换、划分、训练、评估与推理的完整闭环;最终产物既能替换进 PP-ShiTuV2 产线,也能以create_model方式直接集成进自有项目。理解“特征向量输出 + 检索模块消费”这一分工,是正确使用本模块的关键。

  • 人工智能
  • 大模型
  • 低代码
  • 计算机视觉
  • 深度学习
  • NLP
  • 模型推理服务
  • RAG

【免费下载链接】PaddleX

All-in-One Development Tool based on PaddlePaddle

项目地址:https://gitcode.com/paddlepaddle/PaddleX
点击查看免费下载

相关推荐

上一篇:react-native-ui-kitten中的加载状态:Spinner组件动画定制
下一篇:告别APP切换烦恼:一个应用聚合四大直播平台,让你简简单单看直播

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 16:05:35

macOS下OBS录系统声音教程:BlackHole虚拟声卡配置与踩坑指南

直接说结论:macOS 下用 OBS 录系统声音,不像 Windows 那样勾一个“桌面音频”就能搞定。你在 Mac 上回放录屏,大概率会发现画面里视频播得正欢,但声音轨只有麦克风里你自己说话的声音,电脑本身的播放声干干净净地“失踪…

作者头像 李华
网站建设 2026/10/7 15:58:14

YOLOv5 6.0吸烟检测实战:从数据集配置到边缘部署全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华