【问题标题】:sign recognition like hand written digits example in scikit-learn (python)scikit-learn(python)中的符号识别,如手写数字示例
【发布时间】:2012-12-08 01:52:43
【问题描述】:

我注意这个例子:http://scikit-learn.org/stable/auto_examples/plot_digits_classification.html#example-plot-digits-classification-py 关于 scikit-learn python 库中的手写数字。

我想准备一个 3d 数组 (N * a* b),其中 N 是我的图像编号 (75),a* b 是图像的矩阵(如示例中的 8x8 形状)。 我的问题是:我对每张图片都有不同形状的标志:(202, 230), (250, 322).. 给我 此错误:ValueError:数组维度必须一致,但此代码中的 d_0 除外

#here there is the error:
grigiume = np.dstack(listagrigie)
print(grigiume.shape)
grigiume=np.rollaxis(grigiume,-1)
print(grigiume.shape)

有一种方法可以以标准尺寸(即 200x200)调整所有图像的大小,或者有一个 3d 数组与矩阵(a,b),其中 a != 来自 b 并且不要在此代码中给我错误:

data = digits.images.reshape((n_samples, -1))
classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2])

我的代码:

import os
import glob
import numpy as np
from numpy import array
listagrigie = []

path = 'resize2/'
for infile in glob.glob( os.path.join(path, '*.jpg') ):
    print("current file is: " + infile )
    colorato = cv2.imread(infile)
    grigiscala = cv2.cvtColor(colorato,cv2.COLOR_BGR2GRAY)
    listagrigie.append(grigiscala)

print(len(listagrigie))

#here there is the error:
grigiume = np.dstack(listagrigie)
print(grigiume.shape)
grigiume=np.rollaxis(grigiume,-1)
print(grigiume.shape)


#last step
n_samples = len(digits.images)
data = digits.images.reshape((n_samples, -1))

# Create a classifier: a support vector classifier
classifier = svm.SVC(gamma=0.001)

# We learn the digits on the first half of the digits
classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2])

# Now predict the value of the digit on the second half:
expected = digits.target[n_samples / 2:]
predicted = classifier.predict(data[n_samples / 2:])

print "Classification report for classifier %s:\n%s\n" % (
classifier, metrics.classification_report(expected, predicted))
print "Confusion matrix:\n%s" % metrics.confusion_matrix(expected, predicted)

for index, (image, prediction) in enumerate(
    zip(digits.images[n_samples / 2:], predicted)[:4]):
    pl.subplot(2, 4, index + 5)
    pl.axis('off')
    pl.imshow(image, cmap=pl.cm.gray_r, interpolation='nearest')
    pl.title('Prediction: %i' % prediction)

pl.show()

【问题讨论】:

    标签: multidimensional-array numpy python-2.7 machine-learning scikit-learn


    【解决方案1】:

    您必须将所有图像的大小调整为固定大小。例如使用 PIL 的Image 类或Pillow

    from PIL import Image
    image = Image.open("/path/to/input_image.jpeg")
    image.thumbnail((200, 200), Image.ANTIALIAS)
    image.save("/path/to/output_image.jpeg")
    

    编辑:上面的不行,试试resize

    from PIL import Image
    image = Image.open("/path/to/input_image.jpeg")
    image = image.resize((200, 200), Image.ANTIALIAS)
    image.save("/path/to/output_image.jpeg")
    

    编辑 2:可能有一种方法可以保留纵横比并用黑色像素填充其余部分,但我不知道在几个 PIL 调用中该怎么做。您可以使用 PIL.Image.thumbnail 并使用 numpy 进行填充。

    【讨论】:

    • 现在我尝试用 hog 特性做同样的事情,它也会产生一个形状不同的 numpy 数组,我需要为 SVM 重新整形。 data = a.reshape((n_samples, -1)) 并且此代码不起作用 a = np.dstack(listagrigie) a=np.rollaxis(a,-1) 我认为调整大小对我没有帮助!跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2017-07-16
    • 2012-12-09
    • 2012-11-16
    • 1970-01-01
    • 2015-04-05
    • 2019-02-07
    相关资源
    最近更新 更多