LabelImg图像标注工具实战指南.zip

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:LabelImg是一个广泛应用于计算机视觉领域的开源图像标注工具,支持多操作系统,用于创建图像分类和目标检测的数据集。它具备直观的图形界面、支持多种标注类型、具有实时预览功能,以及便捷的XML格式保存和自定义类别功能。文章详细介绍了如何安装和使用LabelImg,包括图形界面操作、创建和编辑标注以及保存标注结果的步骤。还探讨了在实际项目中的应用场景,如目标检测、语义分割和自动驾驶领域,并简述了如何进行工具的扩展和自定义。 LabelImg--标记软件windows.zip

1. LabelImg图像标注工具概述

在现代计算机视觉领域,准确和高质量的数据集是模型训练的关键。图像标注工具在这种背景下变得至关重要,它帮助研究者和工程师们对图像中的目标进行精确标注。LabelImg正是这样一款流行且功能强大的开源图像标注工具,它支持对图片进行矩形框标注、多边形标注、关键点标注等多种方式,广泛应用于物体检测、图像分割等任务中。

LabelImg的主要特点包括直观的操作界面、支持多种格式的图片以及高度可定制化的标注类别。使用它可以帮助我们快速建立复杂的图像数据集,进而辅助机器学习和深度学习模型的训练工作。此外,通过自定义标签和快捷键,还可以进一步优化标注流程,提高工作效率。

接下来,我们将详细探讨如何安装和配置LabelImg,以及如何高效地使用它进行图像标注。本章将作为全面掌握LabelImg工具的起点,为读者深入理解后续章节打下坚实基础。

2. 图形界面操作指南

2.1 LabelImg的安装与配置

2.1.1 安装方法(Windows用户)

LabelImg的安装过程对于Windows用户而言相对简单。首先,需要从其GitHub页面下载适用于Windows操作系统的安装包。下载完成后,只需双击安装文件即可开始安装过程。在安装向导的指引下,用户可以选择安装路径,并完成安装。安装过程中,请确保互联网连接稳定,因为安装程序可能需要下载额外的依赖库。

2.1.2 软件环境设置

安装完成后,打开LabelImg,可能需要配置Python环境。这通常涉及到指定Python的安装路径,确保LabelImg能够正确运行。在软件首次启动时,可能会提示设置环境变量。由于LabelImg是用Python编写的,因此推荐配置Python3环境,因为Python2已经停止更新。

接下来,需要配置Pillow库,这是Python的一个图像处理库。可以通过pip命令来安装Pillow,命令如下:

pip install pillow

安装完毕后,如果遇到任何问题,可通过查看LabelImg的官方文档或GitHub Issues来寻求帮助。

2.2 LabelImg的用户界面布局

2.2.1 主窗口结构分析

LabelImg的主窗口被设计得简洁易用,主窗口中包含了多个关键部分。首当其冲的是菜单栏,提供了诸如文件操作、标签管理、视图控制等基本功能。在菜单栏下方,是主工具栏,这里放置了最常用的操作按钮,如“新建文件”、“打开文件夹”、“保存”、“上一张”和“下一张”。

紧邻工具栏的是标签编辑区域,这个区域允许用户添加、编辑或删除分类标签。在标签编辑区域下方则是图像预览区,图像将在此区域显示,用户可以在此区域进行标注操作。最后,状态栏位于窗口的最底部,显示了当前的文件路径、文件名以及当前的操作状态等信息。

2.2.2 功能按钮介绍

LabelImg的功能按钮是用户进行图像标注的主要工具。例如,“新建文件”按钮用于创建新的标注文件;“打开文件夹”按钮则用于加载包含待标注图像的文件夹;“保存”按钮用于保存当前的标注信息;“上一张”和“下一张”按钮则可以快速切换到当前文件夹中的前一张或后一张图像。

此外,在图像预览区域右键点击可以弹出操作菜单,用户可以通过它选择“缩放”、“翻转”、“旋转”等操作,以便更准确地进行图像标注。各个按钮和操作的具体细节,都可以在LabelImg的帮助文档中找到详尽的说明。

3. 多种标注类型介绍

3.1 标准的矩形框标注

3.1.1 矩形框的选择和调整

矩形框标注是最常用的图像标注方法之一,适用于标记出图片中的物体位置和大小。在LabelImg中进行矩形框标注的步骤如下:

  1. 打开LabelImg,导入需要标注的图片。
  2. 点击工具栏中的“Create RectBox”或使用快捷键 W
  3. 用鼠标在目标物体外围画一个矩形框。
  4. 在物体四周的边界线上点击拖动来调整矩形框的大小和位置,确保它紧密围绕物体。
  5. 选中矩形框后,可以通过键盘的方向键进行微调。

矩形框标注的调整是非常灵活的,能够应对不同物体的形状和尺寸。用户需要仔细观察图片内容,以确保标注的准确性和一致性。对于一些形状规则且大小相近的物体,快速准确地标注可以大幅提高工作效率。

3.1.2 标注快捷键的使用

快捷键是提高标注效率的关键。LabelImg提供了一系列快捷键,允许用户通过键盘完成大多数操作。一些常用的快捷键包括:

  • W :创建矩形框标注(Create RectBox)。
  • D :下一幅图片(Next Image)。
  • A :上一幅图片(Prev Image)。
  • S :保存当前图片的标注结果(Save)。
  • Ctrl+D :复制当前选定的标注框(Copy)。
  • Ctrl+Shift+D :粘贴复制的标注框(Paste)。
  • Del :删除当前选定的标注框(Delete)。

通过使用这些快捷键,可以减少对鼠标操作的依赖,加快标注过程。熟练掌握这些快捷键,对于提高标注工作的效率和质量至关重要。

3.2 多边形标注工具

3.2.1 多边形标注的创建与编辑

多边形标注工具主要用于处理那些形状复杂或不规则的物体。与矩形框标注相比,多边形标注能够更精确地贴合物体轮廓,从而提供更高质量的标注数据。以下是使用多边形标注工具的基本步骤:

  1. 点击工具栏中的“Create Polygon”或使用快捷键 P
  2. 从目标物体的一个角开始,按顺序点击轮廓上的点来创建多边形标注。
  3. 完成最后一个点后,按回车键确认,完成多边形的创建。
  4. 若要添加新的点,单击现有的多边形边线上任意位置即可。
  5. 若要删除点,选中多边形标注后,按 Del 键。

多边形标注的编辑通常涉及移动点、添加点或删除点等操作。这些操作使得用户能够根据物体的实际轮廓进行精确标注。需要注意的是,标注精度往往与标注时间成正比,需要在速度和准确性之间找到平衡点。

3.2.2 精确控制节点的技巧

为了精确控制多边形标注节点,用户可以利用以下技巧:

  • 使用鼠标滚轮可以放大或缩小标注区域,便于精确地放置节点。
  • 长按鼠标中键可以移动画布,查看局部细节。
  • 按住 Ctrl 键,单击多边形的节点可以快速移动到相邻节点。
  • 使用键盘的箭头键可以实现节点的微小移动。

多边形节点的精确控制是提高标注质量的关键环节。通过实践和不断调整,用户可以掌握最佳的标注技巧,确保标注结果既准确又高效。

3.3 键点标注与线段标注

3.3.1 键点的添加与定位

键点标注主要用于标记物体的关键部位,如人眼、嘴角等,而线段标注则用于连接键点,绘制物体的关键线条。在LabelImg中进行键点标注和线段标注的步骤为:

  1. 点击工具栏中的“Create Keypoint”或使用快捷键 K
  2. 用鼠标在目标物体的关键部位点击以放置键点。
  3. 在放置键点后,通过键盘箭头键进行微调。
  4. 如果需要,可继续添加更多的键点。
  5. 使用快捷键 Shift+K 来创建连接键点的线段。

在键点定位时,需要特别注意物体的特征点,确保标注位置的准确性。键点的准确添加对于后续的图像分析和理解至关重要,尤其是对于那些需要对物体的关键部位进行精准定位的计算机视觉任务。

3.3.2 线段标注的绘制方法

线段标注是通过连接两个或多个键点来完成的。其详细步骤如下:

  1. 首先,确保已经在图片上添加了至少两个键点。
  2. 按下 Shift+K ,此时光标变为十字形状。
  3. 将光标移动到其中一个键点上,单击并拖动至另一个键点处。
  4. 释放鼠标后,一条线段将连接这两个键点。

在绘制线段时,线段的粗细和颜色可能不会显示,因为它们仅在保存为XML文件后才可展示。但用户可以根据线段的起点和终点来判断其方向和位置是否正确。正确的线段标注可以为计算机视觉模型提供重要的几何信息,帮助模型更准确地识别和理解图像内容。

下一章节将介绍如何利用LabelImg进行实时预览功能,进一步提高标注效率和精确度。

4. 实时预览功能

4.1 实时预览窗口的使用

实时预览功能是LabelImg工具中非常重要的一个特性,它允许用户在标注图像的同时,能够即时查看标注结果的视觉效果。这一功能对提高标注的准确性与效率都有着显著的影响。

4.1.1 预览窗口的操作指南

要使用实时预览窗口,首先需要确保已经打开了一个图像文件进行标注。在主窗口的右侧,用户会看到一个预览区域,该区域会显示当前标注的图像。

在预览窗口中,用户可以进行一系列的操作以获得更好的标注体验:

  • 缩放与移动 :在预览窗口中,可以通过鼠标滚轮来放大或缩小图像,这有助于查看标注的细节。同时,可以使用鼠标拖动功能来移动图像,以便查看图像的不同部分。
  • 全屏预览 :用户可以通过点击预览窗口右上角的全屏按钮,将预览窗口切换到全屏模式。这在处理较大图像或需要更专注于标注任务时特别有用。
  • 更新预览 :如果在标注过程中对图像进行了裁剪或其他编辑操作,可以通过点击预览窗口左上角的“刷新”按钮来更新显示的内容。

4.1.2 预览中图像的放大缩小与拖动

在进行细致的图像标注时,用户可能需要放大图像以更精确地放置标注框或进行细节的描绘。LabelImg提供了快捷键来辅助这一过程:

  • 放大 :按下“+”键可以逐渐放大图像预览,便于查看标注的边缘和细节。
  • 缩小 :按下“-”键可以减小图像预览,以便查看更大范围内的标注效果。
  • 拖动 :在缩放后的图像上,可以通过按住鼠标左键并拖动来移动图像,从而查看不同部分的标注情况。

预览功能与标注操作的紧密结合,使得用户可以直观地评估标注的准确性,并做出及时的调整。这不仅减少了因视角或细节判断失误而造成的错误标注,还大大提高了整个图像标注工作的效率。

4.2 预览与标注同步

4.2.1 同步机制的工作原理

实时预览功能之所以能够及时反映用户的标注操作,是因为其背后有一个高效同步机制的支持。该机制确保了用户界面中的任何更改都能即时反映在预览窗口上。

同步机制的核心在于:

  • 事件监听 :LabelImg会在用户界面上设置事件监听器,一旦用户执行了任何与标注相关的操作(如创建或修改标注框、更改标注类别等),监听器就会捕捉到这些事件。
  • 数据传递 :捕捉到的操作事件会触发数据更新,这些更新会通过程序中的同步函数进行处理,并立即更新到预览窗口中。
  • 渲染优化 :为了保持预览窗口的流畅性,同步机制还涉及到一定的渲染优化,比如仅重绘有更改的部分,而非整个图像。

4.2.2 解决预览与标注不同步的问题

虽然同步机制确保了大部分情况下预览与标注是同步的,但有时用户可能会遇到预览不同步的问题。这可能是由于软件错误、图形驱动问题或其他外部因素导致的。以下是解决这一问题的步骤:

  1. 检查系统兼容性 :确认操作系统的版本和硬件配置是否满足LabelImg的运行要求。
  2. 更新图形驱动 :过时的图形驱动可能会影响图像的处理效率,及时更新到最新的驱动版本。
  3. 软件复位 :关闭LabelImg并重新打开,有时简单的重启软件就能解决问题。
  4. 查看日志文件 :LabelImg可能会记录错误日志,查看日志文件可能发现导致不同步的具体原因。
  5. 软件更新 :如果有新的版本发布,尝试更新到最新版本,修复bug可能导致的问题。

通过上述步骤,大多数预览与标注不同步的问题都可以得到解决。如果问题依然存在,建议在LabelImg的官方论坛或者社区中寻求技术支持,可能有其他用户遇到过类似的问题,并分享了解决方案。

5. XML格式保存说明

5.1 XML数据结构的解析

5.1.1 XML文件的基本组成

XML (Extensible Markup Language) 是一种标记语言,用于存储和传输数据。在LabelImg中,XML文件作为图像标注的输出格式,记录了标注对象的类别、位置等重要信息。XML文件由一系列的标签组成,标签内可以包含属性、文本和其他标签。每个标签通常成对出现,开始标签如 <tag> 与结束标签如 </tag> 。在LabelImg中,每个标注的对象都会有一个对应的 <object> 标签,包含 name pose truncated difficult <bndbox> 标签,后者的标签内存储了对象的边界框位置信息。

5.1.2 关键标签的含义与作用

<name> :对象的类别名称,如 "car"、"person"。 <pose> :对象的姿态,通常在人体标注中使用。 <truncated> :指示对象是否被截断,1 表示是,0 表示否。 <difficult> :标记对象是否难以标注,1 表示是,0 表示否。 <bndbox> :包含四个子标签 <xmin> , <ymin> , <xmax> , <ymax> 分别表示边界框的左上角和右下角的坐标。

在实际应用中,通过这些标签,计算机视觉算法可以轻松地解析出图像中每个标注对象的位置与类别信息。

5.2 XML文件的导出与管理

5.2.1 导出XML文件的步骤

  1. 打开LabelImg并加载需要标注的图像。
  2. 进行对象标注,确保每个对象都按照要求标注完毕。
  3. 点击工具栏上的“保存”按钮,会弹出文件保存对话框。
  4. 输入文件名,并选择合适的保存路径。
  5. 点击“保存”完成XML文件的导出。

5.2.2 文件命名规则与管理策略

文件命名规则应该简洁明了,反映内容特征。通常,命名中可包含日期、图像序号、图像内容等信息,例如: 00001_2023-01-01_car.jpg 00001_2023-01-01_car.xml 。这样方便后期管理和检索。

管理策略方面,建议按项目或数据集创建单独的文件夹,将对应的图像和XML文件存放在同一文件夹内。同时,对于大型项目,考虑建立索引文件或使用数据库进行文件的引用和追踪管理。

下面是一个简单的示例代码,用于读取LabelImg生成的XML文件:

import xml.etree.ElementTree as ET

def parse_xml(file_path):
    tree = ET.parse(file_path)
    root = tree.getroot()
    objects = []

    for member in root.findall('object'):
        values = (member[0].text,
                  int(member[6][0].text),
                  int(member[6][1].text),
                  int(member[6][2].text),
                  int(member[6][3].text),
                  member[4].text)
        objects.append(values)

    return objects

# 调用函数
xml_file = 'path/to/image.xml'
parsed_objects = parse_xml(xml_file)
print(parsed_objects)

代码逻辑解读和参数说明

  • import xml.etree.ElementTree as ET :导入Python内置的XML解析库。
  • def parse_xml(file_path) :定义解析XML文件的函数,接收文件路径作为参数。
  • tree = ET.parse(file_path) :解析XML文件。
  • root = tree.getroot() :获取根节点。
  • for member in root.findall('object') :遍历所有的 <object> 标签。
  • values = (...) :提取并存储对象的类别、边界框坐标等信息。
  • objects.append(values) :将提取的信息添加到对象列表中。
  • print(parsed_objects) :打印解析结果。

通过此代码,我们能够有效地从LabelImg导出的XML文件中提取标注数据,并进行进一步的处理与分析。

6. 自定义类别和批量处理

在处理大规模的计算机视觉项目时,数据的多样化和标注工作的繁琐性是不可避免的挑战。为了提高效率,我们需要对LabelImg工具进行自定义设置,包括类别管理和批量处理标注。本章节将详细介绍自定义标注类别和实现高效批量处理的技巧。

6.1 自定义标注类别的方法

6.1.1 类别管理的操作步骤

在计算机视觉项目中,每个项目都可能有其独特的物体类别,需要我们在开始标注之前先进行类别管理。以下是具体的类别管理操作步骤:

  1. 打开LabelImg工具并加载图像。
  2. 点击界面上的“PascalVoc”按钮或“Create RectBox”按钮旁边的下拉菜单。
  3. 在弹出的列表中选择“Change/save the class name”选项。
  4. 在新的窗口中,你会看到当前已经设置的类别列表。
  5. 如果要添加新类别,点击“Add”按钮,并输入新类别的名称。
  6. 如果需要删除某个类别,选中该类别后点击“Delete”按钮。
  7. 完成类别添加或删除后,点击“Save”按钮保存设置。

6.1.2 类别属性的修改与分类

有时候,我们不仅需要添加或删除类别,还可能需要对类别的属性进行修改,比如颜色、快捷键等。以下是类别的属性修改与分类的详细步骤:

  1. 同样地,点击“Change/save the class name”选项进入类别管理。
  2. 在类别列表中选中需要修改的类别。
  3. 点击“Change”按钮可以修改类别的名称或颜色。
  4. 为类别分配快捷键(如果有的话),这将在后续的标注中加速你的工作流程。
  5. 根据需要,你可以将类别进行分类,设置不同的颜色以便于在图像中标注时进行区分。
  6. 保存修改后的类别设置。

扩展性说明: 自定义类别后,在标注新图像时,工具会按照你设定的类别进行显示,从而提升工作效率。此外,不同类别的颜色分类有助于视觉上的快速识别,尤其是在标注复杂背景图像时。

6.2 批量标注与编辑技巧

6.2.1 批量标注的流程

批量标注是提高数据标注效率的重要手段,尤其是对于有大量相似或重复标注任务的情况。以下是批量标注的基本流程:

  1. 准备好要进行批量标注的图像集,并确保它们的格式一致且存放在同一文件夹下。
  2. 打开LabelImg工具,点击“Open Dir”选项,选择包含待标注图像的文件夹。
  3. 在“PascalVoc”按钮旁边的下拉菜单中选择“Create Polygons”,因为批量操作中多边形比矩形更具有可塑性。
  4. 进行一次标准标注,作为模板。
  5. 选择菜单中的“File > Change Save Dir”,以更改保存标注的文件夹,确保不会覆盖原始图像。
  6. 选择菜单中的“Tools > Batch Add Rectangle”进行批量添加矩形标注。
  7. 在弹出的窗口中,输入需要批量添加标注的类名和数量,然后点击“OK”执行批量标注。
  8. 如果需要,使用批量编辑功能调整标注位置、大小或类别。

6.2.2 快速批量处理的高效策略

为了实现快速高效的批量处理,可以采取以下策略:

  • 预设模板 :创建一组预设的标注模板,这些模板可以用于相似的物体和场景,节省重复的标注工作。
  • 合并同类操作 :当需要对同一类别的多个对象进行相同操作时,可以先标注一个示例,然后利用复制、粘贴或变换功能进行批量处理。
  • 使用快捷键 :合理配置和使用快捷键,可以显著提升标注效率。
  • 图形识别辅助 :利用图像识别技术自动识别相似图像中的相似物体,然后进行批量标注。

代码块示例:

import xml.etree.ElementTree as ET
import os

def batch_process_annotations(input_dir, output_dir, label_name, num_rectangles):
    for filename in os.listdir(input_dir):
        if filename.endswith(".jpg"):
            tree = ET.parse(os.path.join(input_dir, filename))
            root = tree.getroot()
            for _ in range(num_rectangles):
                # Create a new rectangle element
                obj = ET.SubElement(root, 'object')
                ET.SubElement(obj, 'name').text = label_name
                bndbox = ET.SubElement(obj, 'bndbox')
                ET.SubElement(bndbox, 'xmin').text = '0'
                ET.SubElement(bndbox, 'ymin').text = '0'
                ET.SubElement(bndbox, 'xmax').text = '0'
                ET.SubElement(bndbox, 'ymax').text = '0'
            tree.write(os.path.join(output_dir, filename))

# Example usage
batch_process_annotations('path/to/inputs', 'path/to/outputs', 'car', 5)

参数说明与代码逻辑分析:

  • input_dir : 输入图像文件夹的路径。
  • output_dir : 输出标注文件夹的路径。
  • label_name : 需要批量添加的类别名称。
  • num_rectangles : 需要批量添加的矩形标注数量。

以上代码块是一个简化的Python脚本,用于演示如何通过编程方式批量处理标注。在实际应用中,可能需要根据具体的标注要求和格式进行调整。此方法可以自动化地对图像集进行标注,极大提高效率。

7. 在计算机视觉项目中的应用案例

计算机视觉项目往往需要大量的图像数据,并对其进行详尽的标注来训练模型,而LabelImg工具在这一过程中起着不可或缺的作用。本章将展示LabelImg在数据集制作中的作用,并通过应用案例来分析其使用流程及遇到问题的解决方案。

7.1 LabelImg在数据集制作中的作用

7.1.1 数据集的重要性与准备工作

在计算机视觉领域,数据集是深度学习模型训练的基础。高质量的数据集可以显著提高模型的性能。准备工作包括收集图像、筛选图像质量以及确定数据集的规模等。使用LabelImg可以更加便捷地进行图像标注工作,为后续的模型训练提供丰富且准确的数据支撑。

7.1.2 使用LabelImg加速数据标注

通过LabelImg工具,我们可以为计算机视觉项目中所需的不同对象创建边界框,并为这些对象赋予相应的标签。这不仅提高了标注的效率,还能通过XML格式的输出文件,方便地与各种主流深度学习框架集成。在使用时,可以结合批量处理技巧,进一步提高标注速度。

7.2 应用案例分析

7.2.1 实际案例的标注流程

以交通标志识别项目为例,我们需要对各种交通标志进行识别和分类。首先,我们收集了大量的交通标志图片。通过LabelImg,我们为每种标志创建了相应的标签,并为每个标签标注出准确的位置。

步骤大致如下: 1. 启动LabelImg并加载目标图像。 2. 选择合适的标注类别,如“限速标志”。 3. 使用矩形框工具精确标注目标区域。 4. 保存标注信息,生成对应的XML文件。

7.2.2 案例中的问题与解决方案

在标注过程中,我们可能会遇到的问题包括:标注速度慢、标注不准确、数据集大小不一等。

解决这些问题的方案包括: - 使用快捷键加快标注速度。 - 采用批量标注功能提升效率。 - 定期检查和校准数据集,确保一致性。 - 对于形状不规则的物体,可以使用多边形工具进行更准确的标注。

代码块示例

# 示例代码:批量处理标注文件

import os
import glob
import xml.etree.ElementTree as ET

def convert_annotation(image_path):
    tree = ET.parse(image_path)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)

    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if int(difficult) == 1:
            continue
        xmlbox = obj.find('bndbox')
        b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text),
             int(xmlbox.find('xmax').text), int(xmlbox.find('ymax').text))

        # 将标注框的坐标转换成图像中心坐标
        bb = (b[0] + (b[2]-b[0])/2, b[1] + (b[3]-b[1])/2)
        bb = (max(0, bb[0]-w/10), max(0, bb[1]-h/10),
              min(w, bb[0]+w/10), min(h, bb[1]+h/10))

        # 此处代码省略,进行XML文件的保存操作
        # ...

# 调用函数处理目录下的所有XML文件
xml_files = glob.glob('/path/to/annotations/*.xml')
for xml_file in xml_files:
    convert_annotation(xml_file)

在上述代码中,我们定义了一个 convert_annotation 函数来处理图像的标注信息,将边界框从角点坐标转换为图像中心的坐标系,并进行了一些细节的调整,以适应不同的标注需求。通过对XML文件的解析和处理,我们可以实现对标注信息的批量修改,提高数据准备的效率。

在实际应用中,我们还可以结合计算机视觉项目的具体要求,对标注策略进行适当调整,确保标注数据的质量和适用性。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:LabelImg是一个广泛应用于计算机视觉领域的开源图像标注工具,支持多操作系统,用于创建图像分类和目标检测的数据集。它具备直观的图形界面、支持多种标注类型、具有实时预览功能,以及便捷的XML格式保存和自定义类别功能。文章详细介绍了如何安装和使用LabelImg,包括图形界面操作、创建和编辑标注以及保存标注结果的步骤。还探讨了在实际项目中的应用场景,如目标检测、语义分割和自动驾驶领域,并简述了如何进行工具的扩展和自定义。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值