Вставьте изображения в папке в dataframe - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь прочитать изображения из папок в информационном кадре, где каждая строка в информационном кадре - это все изображения для папки:

import cv2
import os,glob
import matplotlib.pylab as plt
from os import listdir,makedirs
from os.path import isfile,join
import pandas as pd
import PIL
import numpy as np
from scipy.ndimage import imread

pth = 'C:/Users/Documents/myfolder/'

folders =  os.listdir(pth)


videos = pd.DataFrame()
for folder in folders:
   pth_upd = pth + folder + '/'

   allfiles = os.listdir(pth_upd)
   files = []
   columns = ['data']
   index = [folders]
   for file in allfiles:
      files.append(file) if ('.bmp' in file) else None

      samples =  np.empty((0,64,64))
    for file in files:
       img = cv2.imread(os.path.join(pth_upd,file),cv2.IMREAD_GRAYSCALE)

       img = img.reshape(1,64,64)            
       samples = np.append(samples, img, axis=0)

    result = pd.DataFrame([samples], index=[folder], columns=['videos'])
    videos = videos.append(result)    

после считывания всех изображений в каждой папке (массив samples)как вставить изображения для каждой папки в строке данных

ValueError Traceback (последний вызов был последним) в 17 samples = np.append (samples, img, axis = 0) 18 --->19 result = pd.DataFrame ([samples], index = [folder], columns = ['videos']) 20 videos = videos.append (результат)

 ValueError: Must pass 2-d input

:

1 Ответ

0 голосов
/ 18 декабря 2018

Конечно, можно помещать строки изображений с измененным размером в панд, но есть гораздо лучшие способы для обучения CNN.Я адаптировал ваш код обработки изображений, чтобы показать, как вы можете делать то, что просили:

import io
import pandas as pd
import numpy as np
import sklearn
import requests
import tempfile
import os
import cv2

# Image processing for the df
def process_imgfile(x):
  img = cv2.imread(os.path.join(
        x.Folder, x.image),cv2.IMREAD_GRAYSCALE)

  img = cv2.resize(img, (64, 64))
  img = str(img)
  return img

# Simulate folders with images in them
with tempfile.TemporaryDirectory() as f:
  f1 = os.path.join(f, "Folder1")
  f2 = os.path.join(f, "Folder2")
  os.mkdir(f1)
  os.mkdir(f2)
  print(r.status_code)
  for x in range(20):
    with open(os.path.join(f1, "f1-{}.jpg".format(x)), "wb") as file1, open(
        os.path.join(f2, "f2-{}.jpg".format(x)), "wb") as file2:

      r = requests.get(
      'https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg',
       stream=True)
      for chunk in r.iter_content(16): # File writing...
        file1.write(chunk)
        file2.write(chunk)

  result = [x for x in os.walk(f)]
  folder1 = result[1][2]
  folder2 = result[2][2]

  # Generate dataframe data
  j = {"Folder":[], "image":[]}

  for x in folder1:
    j["Folder"].append(result[1][0])
    j["image"].append(x)
  for x in folder2:
    j["Folder"].append(result[2][0])
    j["image"].append(x)

  # Use the process_imgfile function to append image data
  df = pd.DataFrame(j)
  df["imgdata"] = df.apply(process_imgfile, axis=1)

Но на большом наборе изображений это не сработает.Вместо этого проверьте ImageDataGenerator , который может позволить вам загружать изображения в поезде и во время тестирования.Это также может помочь вам применить расширение или синтезировать данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...