image - scikit - sklearn classifiers example
Función de cambio de tamaño HOG para el clasificador Scikit-Learn (1)
Estoy intentando ejecutar este código que procesa 70 imágenes y extrae las características del histograma de degradados orientados (HOG). Estos se pasan a un clasificador (Scikit-Learn).
Sin embargo, se genera un error:
hog_image = hog_image_rescaled.resize((200, 200), Image.ANTIALIAS)
TypeError: an integer is required
No entiendo por qué, porque al intentar con una sola imagen funciona correctamente.
#Hog Feature
from skimage.feature import hog
from skimage import data, color, exposure
import cv2
import matplotlib.pyplot as plt
from PIL import Image
import os
import glob
import numpy as np
from numpy import array
listagrigie = []
path = ''img/''
for infile in glob.glob( os.path.join(path, ''*.jpg'') ):
print("current file is: " + infile )
colorato = Image.open(infile)
greyscale = colorato.convert(''1'')
#hog feature
fd, hog_image = hog(greyscale, orientations=8, pixels_per_cell=(16, 16),
cells_per_block=(1, 1), visualise=True)
plt.figure(figsize=(8, 4))
print(type(fd))
plt.subplot(121).set_axis_off()
plt.imshow(grigiscala, cmap=plt.cm.gray)
plt.title(''Input image'')
# Rescale histogram for better display
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 0.02))
print("hog 1 immagine shape")
print(hog_image_rescaled.shape)
hog_image = hog_image_rescaled.resize((200, 200), Image.ANTIALIAS)
listagrigie.append(hog_image)
target.append(i)
print("ARRAY of gray matrices")
print(len(listagrigie))
grigiume = np.dstack(listagrigie)
print(grigiume.shape)
grigiume = np.rollaxis(grigiume, -1)
print(grigiume.shape)
from sklearn import svm, metrics
n_samples = len(listagrigie)
data = grigiume.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], target[:n_samples / 2])
# Now predict the value of the digit on the second half:
expected = target[n_samples / 2:]
predicted = classifier.predict(data[n_samples / 2:])
print("expected")
print("predicted")
Deberías reescalar la imagen de origen (llamada colorato
en tu ejemplo) a (200, 200)
, luego extraer las características HOG y luego pasar la lista de vectores fd
a tus modelos de aprendizaje automático. El hog_image
está destinado a visualizar los descriptores de características de una manera fácil de usar. Las características reales se devuelven en la variable fd
.