Я новичок в Python, учусь с нуля. У меня есть набор папок с изображениями, для которых я хочу применить различные алгоритмы машинного обучения. Однако я изо всех сил пытаюсь получить эти изображения в виде данных, которые я могу использовать.
Это мои предпосылки:
- Каждое имя папки содержит ключ к изображению. Например, /birds/abc123.jpg и /birds/def456.jpg оба являются «птицами»
- Каждое изображение 100x100px jpg
- Я использую Python 2.7
- Всего 2800 изображений
Это мой код, насколько я получил:
# Standard scientific Python imports
import matplotlib.pyplot as plt
# Import datasets, classifiers and performance metrics
from sklearn import svm, metrics
import numpy as np
import os # Working with files and folders
from PIL import Image # Image processing
rootdir = os.getcwd()
key_array = []
pixel_arr = np.empty((0,10000), int)
for subdir, dirs, files in os.walk('data'):
dir_name = subdir.split("/")[-1]
if "x" in dir_name:
key_array.append(dir_name)
for file in files:
if ".DS_Store" not in file:
file = os.path.join(subdir, file)
im = Image.open(file)
im_bw = im.convert('1') #Black and white
new_np = np.array(im_bw2).reshape(1,-1)
print new_np.shape
pixel_arr = np.append(pixel_arr, new_np, axis=0)
Что работает в этом коде, так это просмотр папок, получение имен папок и выбор правильных файлов / изображений. Что я не могу заставить работать, так это создать простой массив, который будет 2800,10000 (или, возможно, правильный будет 10000,2800), то есть 2800 строк с 10000 значениями в каждом.
Это решение (которое я не уверен, работает ли оно) очень медленное, и я совершенно уверен, что должно быть решение, которое будет более быстрым и элегантным, чем это!
Как я могу создать этот массив с числовым индексом 2800x10000, желательно с индексным номером из присоединенного массива key_array?