python - 创建自定义数据集

标签 python image-processing tensorflow neural-network dataset

我认为这是一个广泛适用的问题,但我正在尝试为特定竞赛创建一个数据集,该竞赛涉及将无人机飞过带有涂有字母数字字符的纸板几何形状的 field 。目标是对形状和字符进行检测和分类。

目前,我使用 SURF 来检测形状,使用 K-means 来分割形状和字符,并使用卷积神经网络来对每个形状和字符进行分类。然而,当涉及到可以在真实数据上表现良好的训练数据时,我遇到了瓶颈。

我尝试过的

  • 使用 Keras 生成数据集 ImageDataGenerator打字字体和几何形状的每个字母数字字符的模板图像的随机旋转、缩放和倾斜:可以很好地处理数据集中的数据(如图)和一些外部数据,但当字符时会感到困惑太离经叛道

  • 使用 MNIST 数据集:没有提示,但只包含数字

  • 使用 EMNIST ByClass 数据集(与 MNIST 数据集不同;也包含字母):由于大小的原因,训练起来并不容易,即使训练得相当好,也表现不佳高准确率。在数据集本身中,许多图像与所谓的类几乎没有相似之处,并且某些类的旋转速度与其他类不同

  • 对字符使用 Tesseract OCR。 这并没有取得很好的结果

我没有尝试过的

  • 使用我们创建的真实纸板 Papercut 进行多次飞行,并使用每个视频中的多个帧作为数据集。 缺点:这需要大量航类和纸板剪裁,并且不会提供太多数据变化。

  • 使用 ImageDataGenerator,但使用几种不同的字体,而不是一种。

有人对如何为此类任务创建自定义数据集有任何建议吗?

最佳答案

这是我的 dataSetGenerator 也许可以帮助您生成自己的数据集

import numpy as np
from os import listdir
from glob import glob
import cv2

def dataSetGenerator(path,resize=False,resize_to=224,percentage=100):
    """

    DataSetsFolder
      |
      |----------class-1
      |        .   |-------image-1
      |        .   |         .
      |        .   |         .
      |        .   |         .
      |        .   |-------image-n
      |        .
      |-------class-n

    :param path: <path>/DataSetsFolder
    :param resize:
    :param resize_to:
    :param percentage:
    :return: images, labels, classes
    """
    classes = listdir(path)
    image_list = []
    labels = []
    for classe in classes:
        for filename in glob(path+'/'+classe+'/*.tif'):
            if resize:image_list.append(cv2.resize(cv2.imread(filename),(resize_to, resize_to)))
            else:image_list.append(cv2.imread(filename))
            label=np.zeros(len(classes))
            label[classes.index(classe)]=1
            labels.append(label)
    indice = np.random.permutation(len(image_list))[:int(len(image_list)*percentage/100)]
    return np.array([image_list[x] for x in indice]),np.array([labels[x] for x in indice]),np.array(classes)

关于python - 创建自定义数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856444/

相关文章:

python - 为什么 BeautifulSoup 发现不断返回具有类 id 的元素而不是我传递的元素?

c++ - 合并两个显示亮度的图像

python - 删除边界线上方的图像顶部以检测文本文档

android - Android:出现错误:添加新依赖项后,任务 ':app:processDebugGoogleServices'的执行失败

android - 如何在 Android 平台上使用 TensorFlow?

python - Python 中 eval ("input()") 和 eval(input()) 的区别

python - 字符串解析与数据库查询

python - 为什么我的 PyQt 应用程序在 Mac OS X 的后台打开?

opencv - 对图像进行上采样

python - 如何表示 tensorflow 中的稀疏特征列表?