Tesseract OCR技术深度解析与应用实践

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

简介:本文对"Tessdata Main Zip 文件"进行了全面的解析,深入探讨了Tesseract OCR引擎的工作原理、tessdata数据库的作用,以及如何通过Tess4J库实现OCR应用。内容涵盖了Tesseract的历史、工作流程、tessdata数据库结构、Tess4J库的集成及优化技巧。最终目的是为了帮助开发者在Java应用中实现高效的图像文字提取,提升信息处理效率。 tessdata-main.zip

1. Tesseract OCR概述及开源历史

1.1 Tesseract OCR简介

Tesseract是一款开源的光学字符识别引擎,由HP实验室于1985年启动,并于1995年开源。其后由Google进行了显著的更新与维护,成为了当今最流行且功能强大的OCR工具之一。它支持多种操作系统平台,并能够识别超过100种语言,是处理图像数据、实现文本提取的重要工具。

1.2 开源历史与社区贡献

Tesseract的开源历史可以追溯到2005年,当时由于HP停止了对其的开发,项目转到了开源社区进行维护。开源社区的活跃贡献者们致力于改进算法、扩展语言支持以及优化接口,不断将Tesseract推向更高的性能和可靠性。经过多年的演进,Tesseract已经成为了许多企业和研究机构进行文本识别工作的首选库。

1.3 应用与影响力

Tesseract广泛应用于文档数字化、车牌识别、自动票务系统等众多场景。由于其高效的识别能力以及可编程的接口,开发者可以在不同的应用中集成Tesseract,提升产品的智能化水平。此外,Tesseract的开源性和跨平台特性使得它在全球范围内拥有庞大的用户群和开发者社区。

2. Tesseract工作流程详解

2.1 Tesseract的识别原理

2.1.1 图像处理的各个阶段

Tesseract的图像处理过程分为几个阶段,每个阶段都是为了提高最终字符识别的准确性。初始阶段包括图像的读取和加载,这一过程决定后续处理的基线质量。接下来的阶段是图像预处理,主要包括灰度化、二值化、去噪、去噪以及边缘检测等。这一系列步骤的目的是为了将文本从背景中突出出来,并且尽量减少图像中的干扰因素。

在预处理之后,Tesseract将图像中的文字区域分割成单独的文本行,然后再将这些文本行分割成单词和字符。字符识别阶段,Tesseract会根据训练好的数据模型识别出单个字符。最后,后处理步骤对识别结果进行优化,比如通过词典验证和语言模型来提高识别的准确率。

2.1.2 字符识别的算法基础

Tesseract字符识别的核心算法是基于机器学习的,尤其是使用了支持向量机(SVM)进行字符分类。这些算法需要大量的训练数据来“学习”如何识别不同的字符特征。Tesseract将图像中的每个字符识别为可能的字符集中的一个,然后使用概率模型来决定最终的输出。

机器学习模型被训练来识别字符的不同特征,这些特征包括但不限于字符的形状、笔画粗细、轮廓等。通过这些特征的学习,模型可以对未知图像中的字符进行分类和识别。Tesseract还支持神经网络模型,随着深度学习技术的发展,Tesseract也在不断融入新的算法来提升识别性能。

2.2 Tesseract的主要功能模块

2.2.1 图像预处理

图像预处理是整个Tesseract工作流程中的第一步,它对原始图像进行一系列的转换,以便为后续的字符识别阶段做好准备。预处理包括以下几个关键步骤:

  • 灰度化 :减少图像数据量,将彩色图像转换为灰度图像。
  • 二值化 :将灰度图像转换为黑白两色图像,以突出文本特征。
  • 去噪 :消除图像中的干扰和噪声,避免干扰字符识别。
  • 去噪和边缘检测 :使用诸如高斯模糊、中值滤波等技术来消除图像中的颗粒状噪声,并使用Canny算法等边缘检测技术突出文字边缘。

这些预处理步骤对于改善识别效果至关重要,特别是在处理质量较差的图像时。一个经过良好预处理的图像,可以使字符识别的准确率显著提高。

2.2.2 文字行和单词分割

在图像预处理之后,Tesseract需要确定文本在图像中的布局。文字行分割的目标是识别并分割出图像中的每一行文字。这是通过查找文本行的起始和结束位置来实现的。一旦文字行被确定,接下来就是将这些行分割成单词。单词分割通常基于空格、标点符号或其他文本布局特性。Tesseract使用特定的规则和启发式方法来进行这一分割工作。

2.2.3 字符识别和后处理

字符识别是将分割后的图像区域识别为单个字符的过程。Tesseract使用训练好的数据模型进行这一识别工作,将图像中的每个像素点映射到预定义的字符集中。这一过程会输出一个字符序列,但这个序列可能包含错误或不完整的识别结果。

后处理阶段旨在修正这些错误和不完整的结果。Tesseract使用语言模型和字典来验证识别的字符序列,调整不自然或不可能的字符组合。它还利用词形还原和语境分析来提高识别结果的准确性。

2.3 Tesseract的版本迭代和特性

2.3.1 主要版本的更新亮点

Tesseract自发布以来,经历了多个版本的迭代,每个版本都带来了新的特性和改进。早期版本主要集中在提高识别准确性上,但新版本开始注重性能优化、易用性提升以及对新语言的支持。

例如,Tesseract 3.x版本引入了对多种新语言的支持和一些重要的性能改进。而Tesseract 4.x版本更是引入了LSTM(长短期记忆网络)模型用于识别,显著提高了识别的准确性和效率。此版本还引入了对Tessdata的改进,使得Tesseract能够更加高效地处理数据和进行训练。

2.3.2 社区贡献和未来发展

Tesseract是一个活跃的开源项目,由Google支持,社区对其贡献非常大。社区成员不断地为Tesseract添加新功能、优化现有功能,并提供新的语言支持。社区的这些贡献大大扩展了Tesseract的应用范围。

展望未来,Tesseract将继续以社区为中心,推动人工智能和机器学习技术的创新。随着深度学习技术的发展,Tesseract可能会进一步集成先进的深度学习模型,提升对各种复杂场景的适应能力,比如手写文本识别、复杂布局的文档处理等。此外,Tesseract的性能优化和跨平台支持也是未来的重点发展方向。

3. tessdata数据库的作用与结构

Tesseract OCR是开源光学字符识别引擎,广泛用于图像中的文本识别。tessdata是Tesseract的神经中枢,包含了用于语言识别的训练数据。它的重要性在于提供给Tesseract准确的语言识别能力,让机器能更好地理解不同的语言和脚本。

3.1 tessdata的组成和重要性

3.1.1 语言数据文件的作用

tessdata包含了各种语言的数据文件,是Tesseract执行语言识别的核心组件。这些文件通常是一系列的文本文件,包含了大量的语言规则、字符集和模式匹配规则。Tesseract利用这些文件来解析图像中识别出的字符,并将它们转换成机器可读的文本。从这个意义上讲,tessdata就是Tesseract的语言大脑。

3.1.2 文件格式和结构解析

tessdata中的文件通常具有特定的格式。例如,每个语言数据文件通常都是以 .traineddata 为扩展名。而这些文件的内部结构一般包含以下几个部分:

  • 字典文件 :包含该语言所有单词的列表,Tesseract使用这些字典来查找并确定图像中的文本。
  • 语言模型文件 :为Tesseract提供更深层的上下文理解,例如单词在句子中的排列概率。
  • 字符规范文件 :详细定义了字符的形状、字形等,以便Tesseract能够更准确地识别字符。

3.2 tessdata的管理与优化

3.2.1 数据库的更新与同步

tessdata库需要定期更新来适应不断变化的语言环境和增加新的识别能力。这通常意味着下载最新的 .traineddata 文件,并替换旧版本。同步更新tessdata的过程可以自动化,以确保使用的始终是最新和最佳的识别数据。

3.2.2 空间优化和性能调优

tessdata可能包含多种语言数据,这会导致存储空间需求很大。为了优化存储空间,可以使用命令行工具来裁剪tessdata,去除未使用的语言数据。此外,还可以通过合并多个 .traineddata 文件来减少文件数量,提升Tesseract加载效率。

3.3 tessdata的自定义训练

3.3.1 训练数据的准备和格式要求

在需要识别非标准字符或者特殊符号时,可能需要对tessdata进行自定义训练。首先,需要准备训练图像和对应文本,确保图像质量和文本准确性。然后,需要按照特定的格式组织这些数据。

3.3.2 训练过程和模型评估

接下来使用Tesseract提供的训练工具进行模型训练。训练过程包括图像预处理、字符分割、字符特征提取等步骤。训练完成后,要对新生成的模型进行评估,确保识别的准确性和稳定性。评估可以通过交叉验证等方法来完成。

在本章节中,我们深入了解了tessdata数据库的重要性、管理优化的方法以及自定义训练的步骤。通过精心的配置和管理,可以显著提升Tesseract OCR的识别效果和效率。下面,我们将通过一个简单的代码示例来演示如何管理tessdata数据库。

# 下载并安装tessdata
wget https://github.com/tesseract-ocr/tessdata/blob/master/<language>.traineddata
sudo mv <language>.traineddata /usr/share/tesseract-ocr/4.00/tessdata/

# 更新tessdata库
tesseract -l <language> input.png output

通过上述示例,可以观察到如何通过命令行直接与tessdata交互。这里的 <language> 是代表特定语言的标识符,比如 eng 代表英语,而 tessdata/4.00/tessdata/ 是Tesseract OCR默认查找训练数据的位置。

对于tessdata的管理,推荐使用自动化脚本来下载、更新和管理这些文件。此外,考虑到存储空间和性能的优化,通过合并多个训练数据文件或者有选择性地安装语言数据文件是行之有效的方法。

在本章中,我们通过理论和实际操作相结合的方式,全面介绍了tessdata的作用、结构、管理与优化,以及自定义训练的详细步骤。通过这些知识,读者可以更好地理解Tesseract OCR的内部工作原理,进而提升OCR项目的性能和准确性。在后续章节中,我们将继续深入探讨Tesseract的其他高级功能和实际应用场景。

4. Tess4J库的介绍和集成使用方法

Tess4J(Tesseract for Java)是一个开源的Java库,它允许开发者在Java应用程序中集成Tesseract OCR引擎。Tess4J封装了Tesseract命令行工具的功能,并通过简洁的API提供给Java开发者使用。这一章节将详细介绍Tess4J库的基本概念、API解析以及如何将Tess4J集成到项目中去。

4.1 Tess4J库的基本概念

4.1.1 Java与Tesseract的桥梁

Tess4J为Java开发者提供了一个简洁的接口,以访问Tesseract的功能。通过Tess4J,我们可以轻松地在Java代码中实现图像到文本的转换过程,而不必担心复杂的外部依赖和环境配置。与直接使用Tesseract命令行工具相比,Tess4J提供了更加友好的编程接口,使得开发者可以更容易地将OCR功能集成到他们的应用程序中。

4.1.2 开发环境的搭建

为了开始使用Tess4J,我们需要进行一些简单的开发环境设置。首先,需要在项目中添加Tess4J依赖,这可以通过Maven或Gradle等构建工具轻松完成。以Maven为例,你可以在你的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>4.5.4</version> <!-- Check for the latest version -->
</dependency>

随后,需要确保Tesseract的二进制文件在系统的PATH环境变量中,或者在Java代码中指定Tesseract安装的绝对路径。这样,Tess4J就能在运行时找到Tesseract引擎。

4.2 Tess4J库的API解析

4.2.1 核心API的使用方法

Tess4J库的核心API类是 ITesseract 接口,该接口的主要实现类是 Tesseract 。下面是一个简单的例子,展示了如何使用Tess4J进行基本的OCR操作:

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;

import java.io.File;

public class SimpleTess4JExample {
    public static void main(String[] args) {
        ITesseract instance = new Tesseract(); // 默认使用英文语言文件
        instance.setDatapath("tessdata/"); // 设置tessdata的路径
        File imageFile = new File("path/to/image.png"); // 待识别的图片文件
        String resultText = null;
        try {
            resultText = instance.doOCR(imageFile);
        } catch (TesseractException e) {
            e.printStackTrace();
        }
        System.out.println(resultText);
    }
}

在这段代码中,我们创建了一个 Tesseract 类的实例,并设置了tessdata的路径。然后,我们指定要识别的图像文件,并调用 doOCR 方法执行识别操作。识别的结果存储在 resultText 变量中,并在控制台中输出。

4.2.2 错误处理和异常管理

在OCR操作中,常常会遇到各种错误和异常情况。Tess4J提供了 TesseractException 类来处理与Tesseract引擎相关的错误。开发者应该妥善处理 TesseractException ,以确保应用程序的健壮性和用户友好性。以下是一个处理异常的改进示例:

try {
    resultText = instance.doOCR(imageFile);
} catch (TesseractException e) {
    // 输出错误信息
    System.err.println("Tesseract OCR Error: " + e.getMessage());
    // 可以选择记录错误日志
    logError("Tesseract error", e);
    // 异常处理逻辑
    handleOCRFailure();
}

在上述代码段中,我们不仅打印了异常消息,还可以记录错误信息到日志文件中,或者执行其他自定义的异常处理逻辑。

4.3 集成Tess4J到项目的实践

4.3.1 实际应用场景介绍

Tess4J被广泛应用于各种需要OCR功能的场景,例如文档扫描、图像中的文字提取、验证码识别等。在实际项目中,我们可能需要根据特定的业务需求,处理各种图像格式、适应不同的语言环境,并且优化识别过程。

4.3.2 项目配置和代码集成示例

集成Tess4J到项目中通常涉及添加依赖、配置环境变量以及编写OCR业务逻辑代码。以一个文档扫描应用为例,假设我们希望扫描文档并提取关键信息,以下是集成Tess4J的步骤和代码示例:

  1. 添加依赖 :如前面所述,通过Maven或Gradle添加Tess4J依赖。
  2. 环境配置 :确保tessdata目录正确配置,并且有必要的语言数据文件。
  3. 编写业务代码 :根据项目需求,调用Tess4J的API来实现OCR功能。比如,我们可能需要处理多种文件格式和图像质量,因此可能需要实现文件格式的检测和预处理的逻辑。
// 假设有一个扫描文档的方法,返回文件对象列表
List<File> scannedDocuments = scanDocuments("path/to/scanned/docs");

for (File doc : scannedDocuments) {
    try {
        // 将文件转换为ITesseract可识别的格式,如BufferedImage
        BufferedImage image = ImageIO.read(doc);
        // 使用Tess4J识别图像中的文本
        String text = instance.doOCR(image);
        // 存储识别结果或进一步处理
        processText(text);
    } catch (Exception e) {
        handleOCRFailure(doc, e);
    }
}

private List<File> scanDocuments(String path) {
    // ...扫描文档并返回文件列表的实现
}

private void processText(String text) {
    // ...文本处理逻辑
}

private void handleOCRFailure(File doc, Exception e) {
    // ...错误处理逻辑
}

在这个示例中,我们演示了一个可能的OCR流程,它从扫描文档开始,读取图像文件,使用Tess4J进行OCR处理,以及对识别结果进行后续的处理。这个流程可根据实际需求调整,例如增加图像预处理步骤、识别特定格式的文档等。

通过这样的实践,开发者可以将Tess4J集成到任何支持Java的应用程序中,从而赋予应用程序识别和处理图像中文字的能力。在下一章节,我们将深入探讨OCR预处理的优化策略。

5. OCR预处理优化策略

5.1 图像预处理的基本概念

5.1.1 预处理的目的和重要性

在OCR(Optical Character Recognition,光学字符识别)技术中,图像预处理是提高识别准确性的一个重要环节。预处理的目的是改善图像质量,为接下来的字符识别阶段做准备。高质量的图像对于OCR系统来说至关重要,因为图像中的噪声和不清晰的边缘会干扰识别引擎,降低识别的准确率。

图像预处理通常包含以下几个方面:

  • 图像去噪
  • 图像二值化
  • 图像旋转校正
  • 图像缩放和裁剪
  • 文本区域的定位和增强

通过这些预处理步骤,可以减少字符识别过程中的错误,并且加快识别的速度。

5.1.2 常用预处理技术介绍

预处理技术通常包括以下几种:

  • 图像去噪 :通过滤波等方法去除图像上的噪声,提高图像的清晰度。
  • 图像二值化 :将彩色或灰度图像转换为只有黑和白两种颜色的二值图像,以减少后续处理的复杂度。
  • 图像旋转校正 :通过算法识别图像中的文本行方向,并进行自动旋转校正。
  • 图像缩放和裁剪 :根据需要对图像进行缩放和裁剪,使得图像中的文字区域更加清晰。
  • 文本区域定位和增强 :识别并增强图像中的文本区域,进一步减少噪声对字符识别的影响。

以下部分,我们将深入探讨每种技术的实现细节,并提供实际应用案例。

5.2 高级预处理技术

5.2.1 图像二值化与去噪

图像二值化

图像二值化是一个将图像转换为仅包含黑和白两种颜色的过程,这有助于简化后续的图像处理和分析。在Python中,使用OpenCV库可以很方便地实现这一过程:

import cv2
import numpy as np

# 读取图像
image = cv2.imread('sample.jpg', cv2.IMREAD_GRAYSCALE)

# 应用二值化
_, binary_image = cv2.threshold(image, 128, 255, cv2.THRESH_BINARY)

cv2.imshow('Binary Image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中, cv2.threshold() 函数用于将图像转换为二值图像。第一个参数是输入图像,第二个参数是二值化阈值,第三个参数是最大值(白色),最后一个参数是二值化类型。

图像去噪

图像去噪的目的是移除图像中的随机噪声,提高图像质量。OpenCV提供了多种去噪方法,比如高斯去噪:

# 应用高斯去噪
gaussian_image = cv2.GaussianBlur(binary_image, (5, 5), 1)

cv2.imshow('Gaussian Image', gaussian_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中, cv2.GaussianBlur() 函数通过应用高斯核对图像进行平滑处理,减少噪声。

5.2.2 文本区域定位和特征增强

文本区域定位

文本区域定位是为了找出图像中的文本区域。例如,可以使用连通组件分析来定位文本区域:

# 使用连通组件分析定位文本区域
n, labels, stats, centroids = cv2.connectedComponentsWithStats(binary_image)

# 假设文本区域是最大的连通区域(除背景外)
max_label = 1 + np.argmax(stats[1:, cv2.CC_STAT_AREA])
text_mask = np.zeros_like(binary_image)
text_mask[labels == max_label] = 255

cv2.imshow('Text Mask', text_mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中, cv2.connectedComponentsWithStats() 函数可以计算每个连通组件的统计信息,然后选取最大面积的非背景连通区域作为文本区域。

特征增强

特征增强的目的是突出图像中的文字特征,以便更好地识别。这可以通过形态学操作来实现,例如使用闭运算来填补文字的空洞:

kernel = np.ones((3, 3), np.uint8)
morph_image = cv2.morphologyEx(text_mask, cv2.MORPH_CLOSE, kernel)

cv2.imshow('Morph Image', morph_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中, cv2.morphologyEx() 函数使用闭运算对文本区域进行形态学操作,填补小的空洞和裂缝。

5.3 实践中的预处理应用案例

5.3.1 案例分析:提高识别准确率

假设我们需要对一系列扫描的文档进行OCR处理。文档图像可能包含各种噪声和扭曲,这些因素都会影响OCR的准确率。

  1. 图像去噪 :首先,使用高斯去噪和中值滤波去除噪声。
  2. 图像二值化 :然后,通过Otsu's二值化方法自动确定最佳阈值。
  3. 文本区域定位 :使用连通组件分析确定文本区域。
  4. 特征增强 :使用形态学闭运算增强文本特征。

5.3.2 案例分析:加速识别过程

对于实时系统或者要求快速响应的场景,我们可能需要减少OCR处理的时间。这通常意味着降低图像质量,以加快处理速度。

  1. 图像缩放 :预处理时,将图像缩放到较小的尺寸,可以显著减少处理时间。
  2. 简化去噪 :使用快速的去噪方法,比如简单的均值滤波器。
  3. 简化二值化 :直接使用固定阈值进行二值化,跳过复杂的阈值选择算法。

通过上述两个案例的分析,我们可以看到,预处理策略需要根据具体的应用场景和需求来定制。适当的预处理能够显著提高OCR的准确率,同时还可以优化识别过程的速度。

预处理作为OCR技术的一个核心组成部分,其优化策略和实施方法对于提高整个系统的性能至关重要。在下一章节中,我们将继续深入了解如何通过字符白名单与黑名单配置进一步提高OCR的准确性和性能。

6. 字符白名单与黑名单配置

6.1 白名单与黑名单的概念和作用

6.1.1 白名单的筛选机制

白名单在OCR中扮演着筛选器的角色,它定义了一组必须被OCR引擎识别的字符集合。通过白名单,OCR引擎可以专注于识别指定的字符集,从而提高整体的识别准确性和处理速度。例如,如果我们知道待处理的文档只包含数字和特定的符号,就可以只将这些字符添加到白名单中。

6.1.2 黑名单的排除机制

与白名单相反,黑名单的作用是排除那些不需要被OCR引擎识别的字符。在一些场景中,OCR可能需要从图像中过滤掉一些不相关的字符,如常见的标点符号、特殊字符等。使用黑名单可以减少不必要的处理,提升OCR引擎的效率。

6.2 白名单与黑名单的配置方法

6.2.1 配置文件的创建和编辑

Tesseract支持通过配置文件来设置白名单和黑名单。首先,需要创建一个名为 tessdata/configs/yourconfig 的配置文件,然后使用文本编辑器打开它。在文件中,可以使用 whitelist blacklist 参数来定义字符集合。

例如:

whitelist 0123456789
blacklist '!"#$%&()*+,-./:;<=>?@[\]^_`{|}~'

6.2.2 配置技巧和最佳实践

在配置白名单时,务必确保包含所有可能出现在图像中的字符,否则OCR可能会将未知字符标记为错误。黑名单则应尽量包含那些不会出现在目标文档中的字符,以减少误识别的可能性。

配置时还需要注意字符编码,确保字符编码与待处理文本的编码保持一致,以避免编码冲突导致的识别错误。

6.3 白名单与黑名单在实际项目中的应用

6.3.1 提升性能:减少搜索范围

通过使用白名单,OCR引擎仅需要在有限的字符集中搜索和匹配,从而减少搜索范围,显著提升处理速度。这一策略在处理固定格式的文档,如票据、表格等场景中尤为有效。

6.3.2 提高准确度:排除非目标字符

黑名单在提高OCR准确度方面同样重要。通过排除非目标字符,可以避免OCR引擎错误识别干扰字符,从而提高最终的识别准确率。在图像质量不佳或字符混杂的环境中,这一技术尤为关键。

例如,若文档中不应包含特殊符号,而这些符号的出现可能是图像噪声或干扰导致的,通过设置黑名单,可以有效过滤掉这些干扰,使OCR结果更加精准。

使用白名单和黑名单配置,可以大幅提高OCR项目的性能和准确率,尤其在面对特定格式的文档或预知文档内容范围的场景中,这两项配置能够显著优化OCR处理流程。在实际项目中,合理地设置和利用白名单与黑名单,将有助于实现高效率与高准确度的文本识别。

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

简介:本文对"Tessdata Main Zip 文件"进行了全面的解析,深入探讨了Tesseract OCR引擎的工作原理、tessdata数据库的作用,以及如何通过Tess4J库实现OCR应用。内容涵盖了Tesseract的历史、工作流程、tessdata数据库结构、Tess4J库的集成及优化技巧。最终目的是为了帮助开发者在Java应用中实现高效的图像文字提取,提升信息处理效率。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值