如何将个人 PNG 数据集放入 Sci-Kit Learn 进行图像识别?
How to put personal PNG dataset into Sci-Kit Learn for Image Identification?
我正在尝试创建一个 Python 程序来识别图像,并且我正在使用 Sci-Kit Learn 机器学习包。我已经完成了他们提供的用于识别数字的教程(这是教程的 link:http://scikit-learn.org/stable/tutorial/basic/tutorial.html#introduction)。现在,我想使用 Sci-Kit Learn 的 svm.SVC
分类器从我自己的 PNG 图像数据集中识别图像,但我不知道该怎么做。我读到 fit(X, y)
方法需要接受 [n_samples, n_features]
数组和 [n_samples]
数组;但是,我不太明白n_samples
和n_features
是什么意思。这是我程序中的相关代码:
from PIL import Image
import numpy as np
import glob
event_png_pair = []
for file in glob.glob('../../Pictures/Trial/*.png'):
img = Image.open(file, 'r')
''' Some image resizing code '''
img_conv = img.convert("L")
datum = np.array(img_conv)
''' Some name parsing below '''
name = file
name = name.replace('.png', '')[::-1]
name_list = list(name)
number_char_list = name_list[:name_list.index('_')]
number_list = number_char_list[::-1]
event_number = int(''.join(number_list))
''' Create tuple with event number and corresponding np array from image '''
event_png_pair.append((event_number, datum))
很明显,上面的内容并没有多大帮助,它只是展示了我是如何从 PNG 图像中解释数据的。有人可以就如何创建可由 Sci-Kit Learn 解释的数据集提供任何指导吗?
更新:我现在要尝试创建一个类似于数字数据集的数据集,除了我自己的图像。我将使 n_samples
图像数量和 n_features
图像数据。我的 target
将是一个数组 [1, 2]
因为我只是想区分两种类型的图像。如果有任何关于如何将图像数据集放入 Sci-Kit Learn 的相关信息,请提供该信息。
n_samples
为图片数量
n_features
是图像数据本身。
您必须创建一个形状为 (number of images x number of image points)
的矩阵,然后传递给分类器。
您必须将所有图像的大小调整为恒定的大小,例如 256x256 或 128x128,或 96x96 或任何适合从中提取相关信息的大小。每个图像(大部分)属于一个(灰度)或三个(RGB)值,代表给定的颜色。
如果你真的打算用最高性能对图像进行分类,你应该使用卷积网络,你应该得到一个性能合理的GPU ,但是该过程也适用于 CPU,但速度要慢得多。
如果您想使用原始像素作为特征(如数字示例中所示),您需要调整图像大小/重塑形状/填充图像以使每个图像具有相同数量的像素。然后你需要将每个图像展平成一行,并将它们堆叠成一个数组。
这仅适用于非常简单、对齐和规范化的图像。
我正在尝试创建一个 Python 程序来识别图像,并且我正在使用 Sci-Kit Learn 机器学习包。我已经完成了他们提供的用于识别数字的教程(这是教程的 link:http://scikit-learn.org/stable/tutorial/basic/tutorial.html#introduction)。现在,我想使用 Sci-Kit Learn 的 svm.SVC
分类器从我自己的 PNG 图像数据集中识别图像,但我不知道该怎么做。我读到 fit(X, y)
方法需要接受 [n_samples, n_features]
数组和 [n_samples]
数组;但是,我不太明白n_samples
和n_features
是什么意思。这是我程序中的相关代码:
from PIL import Image
import numpy as np
import glob
event_png_pair = []
for file in glob.glob('../../Pictures/Trial/*.png'):
img = Image.open(file, 'r')
''' Some image resizing code '''
img_conv = img.convert("L")
datum = np.array(img_conv)
''' Some name parsing below '''
name = file
name = name.replace('.png', '')[::-1]
name_list = list(name)
number_char_list = name_list[:name_list.index('_')]
number_list = number_char_list[::-1]
event_number = int(''.join(number_list))
''' Create tuple with event number and corresponding np array from image '''
event_png_pair.append((event_number, datum))
很明显,上面的内容并没有多大帮助,它只是展示了我是如何从 PNG 图像中解释数据的。有人可以就如何创建可由 Sci-Kit Learn 解释的数据集提供任何指导吗?
更新:我现在要尝试创建一个类似于数字数据集的数据集,除了我自己的图像。我将使 n_samples
图像数量和 n_features
图像数据。我的 target
将是一个数组 [1, 2]
因为我只是想区分两种类型的图像。如果有任何关于如何将图像数据集放入 Sci-Kit Learn 的相关信息,请提供该信息。
n_samples
为图片数量
n_features
是图像数据本身。
您必须创建一个形状为 (number of images x number of image points)
的矩阵,然后传递给分类器。
您必须将所有图像的大小调整为恒定的大小,例如 256x256 或 128x128,或 96x96 或任何适合从中提取相关信息的大小。每个图像(大部分)属于一个(灰度)或三个(RGB)值,代表给定的颜色。
如果你真的打算用最高性能对图像进行分类,你应该使用卷积网络,你应该得到一个性能合理的GPU ,但是该过程也适用于 CPU,但速度要慢得多。
如果您想使用原始像素作为特征(如数字示例中所示),您需要调整图像大小/重塑形状/填充图像以使每个图像具有相同数量的像素。然后你需要将每个图像展平成一行,并将它们堆叠成一个数组。 这仅适用于非常简单、对齐和规范化的图像。