J'ai utilisé OpenCV lors de la conversion d'images au format npy avec TensorFlow, mais je me suis retrouvé coincé avec une erreur, alors j'ai pris une note.
Bêtement, j'ai oublié que les fonctions liées aux E / S de fichier seraient complètement bloquées si je ne gérais pas les exceptions lorsqu'elles échouaient. La fonction imread est l'une d'entre elles.
Voici une fonction qui crée un ensemble de données pour tensorflow. Le traitement après lecture de la fonction imread est effectué avec le jugement None. Si vous ne le faites pas, vous obtiendrez de la mousse dans None, vous devez donc le faire. (Si vous y réfléchissez, c'est naturel ...)
import os, sys
import numpy as np
import tensorflow as tf
import cv2
# config
flags = tf.app.flags
FLAGS = flags.FLAGS
flags.DEFINE_string('imgdir', '/home/hoge/fuga/piyo', 'Image dataset path')
flags.DEFINE_string('imgclasses', 4, 'The num of image dataset classes')
IMAGE_SIZE = 84 # the size of image
TRAIN_IMG_DIRS = os.listdir(FLAGS.imgdir)
def main():
train_image, train_label = cvGetImageAndLabel()
#Le code d'apprentissage est gênant, il est donc omis.
def cvGetImageAndLabel():
images = []
labels = []
for i, d in enumerate(TRAIN_IMG_DIRS):
files = os.listdir(FLAGS.imgdir + '/' + d)
for f in files:
img = cv2.imread(FLAGS.imgdir + '/' + d + '/' + f)
#Aucun jugement dans cette partie
if not img is None:
img = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE), interpolation = cv2.INTER_AREA)
img = img.flatten().astype(np.float32)/255.0
images.append(img)
tmp = np.zeros(FLAGS.imgclasses)
tmp[i] = 1
labels.append(tmp)
return np.asarray(images, dtype=np.float32), np.asarray(labels, dtype=np.float32)
if __name__ == '__main__':
main()
J'adore le code sale (?)
http://stackoverflow.com/questions/23628325/cv2-imread-checking-if-image-is-being-read
Recommended Posts