IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 利用scikit-image库生成图像标签数据集 -> 正文阅读

[人工智能]利用scikit-image库生成图像标签数据集

方法二:利用scikit-image库生成图像标签数据集

提示:此处独立使用图像库scikit-image。即仅用io读图和显示处理服装关键点数据集

安装OpenCV的时候,安装opencv_python:
pip install scikit-image
导入的时候:from skimage import io, transform, draw

服装关键点数据集下载:链接:https://pan.baidu.com/s/1A_UEaulqsz60OhC5BStA9g?pwd=hr47
提取码:hr47

数据集描述:pytorch生成图像标签数据集的三种方式–前言

Skimage模块常用子模块

Skimage模块常用子模块:
io用于图像读取、保存,显示图片和视频。color颜色空间变换。filters包括图像增强、边缘检测、排序滤波、自动阈值。
draw基于numpy数组图像绘制,线段、矩形、圆和文本。transform几何变换包括:旋转,拉伸,收缩等非回调函数。
Exposure曝光调整包括:强度、亮度、直方图均衡化。Feature特征检测与提取。
measure图像属性测量:相似性、等高线。segmentation图像分割。
restoration图像恢复。

生成 图像-关键点坐标标签 数据集

此例,服装类型和关键点图像-标签数据集,引入 io, transform, draw的函数模块进行处理。
数据集展示:(图像,坐标,类型)和只管图像显示。
在这里插入图片描述

代码:dataset_by_skimage.py

# 1.输入图像预处理,统一尺寸。
# 2.真实值ground truth变形,img的shape = (h,w,c),label的shape=(x, y, 是否存在和显隐)
# 3.返回一个数据发生器,img用于给模型做输入,label与输出做损失计算。
import os
import numpy as np
import pandas as pd
import torch
from skimage import io, transform, draw  # skimage是基于python开发的数字图片处理包。此处使用IO和transform--里面的变换均为不可回调函数
from torch.utils.data import Dataset, DataLoader

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")


class KeyPointsDataSet(Dataset):
    """服装关键点标记数据集"""

    def __init__(self, root_dir, image_set='train', transforms=None):
        """
        初始化数据集
        :param root_dir: 数据目录(.csv和images的根目录)
        :param image_set: train训练,val验证,test测试
        :param transforms(callable,optional):图像变换-可选
        标签数据文件格式为csv_file: 标签csv文件(内容:图像相对地址-category类型-标签coordination坐标)
        """
        self._imgset = image_set
        self._image_paths = []  # 用于存储图片地址列表
        self._labels = []  # 图片标签坐标群
        self._cates = []  # 标签:服装类别
        self._csv_file = os.path.join(root_dir, image_set + '.csv')  # csv标签文件地址
        self._categories = ['blouse', 'outwear', 'dress', 'trousers', 'skirt', ]
        self.root_dir = root_dir
        self._transform = transforms

        self.__getFileList()  # 获取数据(图像,坐标,类型)

    def __len__(self):
        return len(self._image_paths)

    def __getitem__(self, idx):
        img_id = self._image_paths[idx]
        img_id = os.path.join(self.root_dir, img_id)
        image = io.imread(img_id)  # (高,宽,通道数)= (h, w, c)
        imgSize = image.shape[0:2]  # 原始图像宽高

        label = np.asfortranarray(self._labels[idx])  # (x, y, 显隐)=(宽,高,显隐性)
        category = self._categories.index(self._cates[idx])  # 0,1,2,3,4

        if self._transform:
            image = self._transform(image)
        else:
            image = transform.resize(image, output_shape=(256, 256))  # 使用skimage库自带transform
        afterSize = image.shape[0:2]  # 缩放后图像的宽高
        bi = np.array((afterSize[1], afterSize[0])) / np.array((imgSize[1], imgSize[0]))
        label[:, 0:2] = label[:, 0:2] * bi

        return image, label, category

    def __getFileList(self):
        file_info = pd.read_csv(self._csv_file)
        self._image_paths = file_info.iloc[:, 0]  # 第一列,相对地址列
        self._cates = file_info.iloc[:, 1]  # 第二列,服装类型:blouse,trousers,skirt,dress,outwear
        if self._imgset == 'train':
            landmarks = file_info.iloc[:, 2:26].values  # panda中DataFrame数据的读取。第3-25列为坐标群,共24组坐标,
            for i in range(len(landmarks)):  # 处理坐标数据84_497_1 to [84,497,1]
                label = []
                for j in range(24):
                    plot = landmarks[i][j].split('_')
                    coor = []
                    for per in plot:
                        coor.append(int(per))
                    label.append(coor)
                self._labels.append(np.concatenate(label))
            self._labels = np.array(self._labels).reshape((-1, 24, 3))
        else:
            self._labels = np.ones((len(self._image_paths), 24, 3)) * (-1)


def showImageAndCoor(img, coords):
    for coor in coords:
        if coor[2] == -1:
            pass
        else:
            # print(coor)
            rr, cc = draw.circle(coor[1], coor[0], 4)
            draw.set_color(img, [rr, cc], [255, 0, 0])
    io.imshow(img)
    io.show()


if __name__ == "__main__":
    fashionDataset = KeyPointsDataSet(root_dir=r"E:/Datasets/Fashion/Fashion AI-keypoints_24/train/",
                                      image_set="train",
                                      )
    dataloader = DataLoader(dataset=fashionDataset, batch_size=4)  # 因为整个类继承的是torch的Dataset,此处返回的都是'torch.Tensor'
    for i_batch, data in enumerate(dataloader):
        img, label, category = data
        img, label, category = img.numpy(), label.numpy(), category.numpy()  # 'torch.Tensor'不能直接显示,需要转换程io能处理的numpy数组格式。
        print(img.shape, label.shape, category)
        showImageAndCoor(img[0], label[0])
        # break


注意事项

  1. io读图的数据结构也是为(h, w, c)=(高,宽,通道),坐标组是(宽x, 高y)。统一伸缩时注意对应。
  2. 本文输出数据集为了显示并没有对图像数组进行归一化或标准化操作,用的时候需要加上归一化。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:10:12  更:2022-05-24 18:14:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:36:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码