PaddleOCR 学习记录(1)--数据处理

目录

一、paddle.vision.transforms 介绍

 二、在数据集中应用数据预处理操作

2.1 在框架内置数据集中应用

2.2 在自定义的数据集中应用

三、数据预处理的几种方法介绍

CenterCrop:

ColorJitter:

四、总结 


一、paddle.vision.transforms 介绍

  1. paddle.vision.transforms

       飞桨框架在 paddle.vision.transforms 下内置了数十种图像数据处理方法

        可以通过以下代码查看:

import paddle
print('图像数据处理方法:', paddle.vision.transforms.__all__)

结果:

图像数据处理方法: ['BaseTransform', 'Compose', 'Resize', 'RandomResizedCrop', 'CenterCrop', 'RandomHorizontalFlip', 'RandomVerticalFlip', 'Transpose', 'Normalize', 'BrightnessTransform', 'SaturationTransform', 'ContrastTransform', 'HueTransform', 'ColorJitter', 'RandomCrop', 'Pad', 'RandomRotation', 'Grayscale', 'ToTensor', 'to_tensor', 'hflip', 'vflip', 'resize', 'pad', 'rotate', 'to_grayscale', 'crop', 'center_crop', 'adjust_brightness', 'adjust_contrast', 'adjust_hue', 'normalize']

        包括图像随机裁剪、图像旋转变换、改变图像亮度、改变图像对比度等常见操作,各个操作方法的简介可参考paddle.vision-API文档-PaddlePaddle深度学习平台

对于飞桨框架内置的数据预处理方法,可以单个调用,也可以将多个数据预处理方法进行组合使用,具体使用方式如下:

  • 单个使用

from paddle.vision.transforms import Resize

# 定义一个待使用的数据处理方法,这里定义了一个调整图像大小的方法
transform = Resize(size=28)
  • 多个组合使用

这种使用模式下,需要先定义好每个数据处理方法,然后用Compose 进行组合。

from paddle.vision.transforms import Compose, RandomRotation

# 定义待使用的数据处理方法,这里包括随机旋转、改变图片大小两个组合处理
transform = Compose([RandomRotation(10), Resize(size=32)])

 二、在数据集中应用数据预处理操作

定义好数据处理方法后,可以直接在数据集 Dataset 中应用,下面介绍两种数据预处理应用方式:一种是在框架内置数据集中应用,一种是在自定义的数据集中应用。

2.1 在框架内置数据集中应用
 

前面已定义好数据处理的方法,在加载内置数据集时,将其传递给 transform 字段即可。

# 通过 transform 字段传递定义好的数据处理方法,即可完成对框架内置数据集的增强
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)

2.2 在自定义的数据集中应用

对于自定义的数据集,可以在数据集中将定义好的数据处理方法传入 __init__ 函数,将其定义为自定义数据集类的一个属性,然后在 __getitem__ 中将其应用到图像上,如下述代码所示:

# 下载 MNIST 数据集并解压
! wget https://paddle-imagenet-models-name.bj.bcebos.com/data/mnist.tar
! tar -xf mnist.tar
import os
import cv2
import numpy as np
from paddle.io import Dataset

class MyDataset(Dataset):
    """
    步骤一:继承 paddle.io.Dataset 类
    """
    def __init__(self, data_dir, label_path, transform=None):
        """
        步骤二:实现 __init__ 函数,初始化数据集,将样本和标签映射到列表中
        """
        super(MyDataset, self).__init__()
        self.data_list = []
        with open(label_path,encoding='utf-8') as f:
            for line in f.readlines():
                image_path, label = line.strip().split('\t')
                image_path = os.path.join(data_dir, image_path)
                self.data_list.append([image_path, label])
        # 2. 传入定义好的数据处理方法,作为自定义数据集类的一个属性
        self.transform = transform

    def __getitem__(self, index):
        """
        步骤三:实现 __getitem__ 函数,定义指定 index 时如何获取数据,并返回单条数据(样本数据、对应的标签)
        """
        image_path, label = self.data_list[index]
        image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
        image = image.astype('float32')
        # 3. 应用数据处理方法到图像上
        if self.transform is not None:
            image = self.transform(image)
        label = int(label)
        return image, label

    def __len__(self):
        """
        步骤四:实现 __len__ 函数,返回数据集的样本总数
        """
        return len(self.data_list)
# 1. 定义随机旋转和改变图片大小的数据处理方法
transform = Compose([RandomRotation(10), Resize(size=32)])

custom_dataset = MyDataset('mnist/train','mnist/train/label.txt', transform)

在以上示例代码中,定义了随机旋转和改变图片大小数据处理方法,并传入 __init__ 函数,然后在 __getitem__ 中将其应用到图像上。

三、数据预处理的几种方法介绍

通过可视化的方法,可方便地对比飞桨内置数据处理方法的效果,下面介绍其中几个方法的对比示例。

首先下载示例图片

# 下载示例图片
! wget https://paddle-imagenet-models-name.bj.bcebos.com/data/demo_images/flower_demo.png

CenterCrop:

对输入图像进行裁剪,保持图片中心点不变。

import cv2
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
from paddle.vision.transforms import CenterCrop

transform = CenterCrop(224)

image = cv2.imread('flower_demo.png')

image_after_transform = transform(image)
plt.subplot(1,2,1)
plt.title('origin image')
plt.imshow(image[:,:,::-1])
plt.subplot(1,2,2)
plt.title('CenterCrop image')
plt.imshow(image_after_transform[:,:,::-1])
<matplotlib.image.AxesImage at 0x7f790b42b490>

ColorJitter:

随机调整图像的亮度、对比度、饱和度和色调。

import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
from paddle.vision.transforms import ColorJitter

transform = ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5)

image = cv2.imread('flower_demo.png')

image_after_transform = transform(image)
plt.subplot(1,2,1)
plt.title('origin image')
plt.imshow(image[:,:,::-1])
plt.subplot(1,2,2)
plt.title('ColorJitter image')
plt.imshow(image_after_transform[:,:,::-1])
<matplotlib.image.AxesImage at 0x7f79196e6550>

 

 更多数据处理方法介绍可以参考paddle.vision-API文档-PaddlePaddle深度学习平台

四、总结 

本节介绍了数据预处理方法在数据集中的使用方式,可先将一个或多个方法组合定义到一个实例中,再在数据集中应用,总结整个流程和用到的关键 API 如下图所示。

 

图像、文本等不同类型的数据预处理方法不同,关于文本的数据预处理可以参考 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PaddleOCR PP-Structurev2是一个基于PaddlePaddle深度学习框架的OCR工具,可以实现文字识别、表格识别、印章识别等功能。以下是PP-Structurev2的使用教程: 1. 安装PaddleOCR 首先需要安装PaddleOCR。可以使用以下命令进行安装: ``` pip install paddleocr ``` 2. 下载PP-Structurev2模型 PP-Structurev2依赖于特定的模型,需要下载对应的模型文件。可以从PaddleOCR的GitHub仓库中下载: ``` git clone https://github.com/PaddlePaddle/PaddleOCR.git cd PaddleOCR wget https://paddleocr.bj.bcebos.com/PP-Structure_v2/ch/ch_ppocr_server_v2.0_rec_infer.tar wget https://paddleocr.bj.bcebos.com/PP-Structure_v2/ch/ch_ppocr_mobile_v2.0_cls_infer.tar wget https://paddleocr.bj.bcebos.com/PP-Structure_v2/ch/ch_ppocr_mobile_v2.0_det_infer.tar tar xf ch_ppocr_server_v2.0_rec_infer.tar tar xf ch_ppocr_mobile_v2.0_cls_infer.tar tar xf ch_ppocr_mobile_v2.0_det_infer.tar ``` 3. 使用PP-Structurev2 使用PP-Structurev2需要先加载模型。可以使用以下代码加载模型: ``` import paddleocr ocr = paddleocr.OCR( det_model_dir='ch_ppocr_mobile_v2.0_det_infer', rec_model_dir='ch_ppocr_server_v2.0_rec_infer', cls_model_dir='ch_ppocr_mobile_v2.0_cls_infer', use_angle_cls=True, lang='ch' ) ``` 加载模型后,就可以使用PP-Structurev2进行文字识别、表格识别、印章识别等操作。以下是一些示例代码: ``` # 文字识别 result = ocr.ocr('example.jpg') for line in result: print(line) # 表格识别 result = ocr.table_ocr('example.jpg') for table in result: for row in table: print(row) # 印章识别 result = ocr.seal_ocr('example.jpg') print(result) ``` 以上就是PP-Structurev2的使用教程。需要注意的是,PP-Structurev2的模型文件比较大,下载和加载模型可能需要花费一些时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值