J'essaie de lire un fichier png dans une application python-flask exécutée dans docker et j'obtiens une erreur qui dit

ValueError: Impossible de trouver un format pour lire le fichier spécifié en mode 'i'

J'ai téléchargé un fichier en utilisant un fichier HTML et j'essaye maintenant de le lire pour un traitement ultérieur. je vois que scipy.misc.imread est obsolète et j'essaie de le remplacer par imageio.imread

if request.method=='POST':
    file = request.files['image']
    if not file: 
        return render_template('index.html', label="No file")
    #img = misc.imread(file)
    img = imageio.imread(file)

Je reçois cette erreur:

File "./appimclass.py", line 34, in make_prediction

img = imageio.imread(file)

File "/usr/local/lib/python3.6/site-packages/imageio/core/functions.py", line 221, in imread

reader = read(uri, format, "i", **kwargs)

File "/usr/local/lib/python3.6/site-packages/imageio/core/functions.py", line 139, in get_reader

"Could not find a format to read the specified file " "in mode %r" % mode
8
Calcutta 26 janv. 2019 à 17:12

5 réponses

Meilleure réponse

Eu le même problème récemment, et le problème était un seul fichier corrompu. Le mieux est d'utiliser quelque chose comme PIL pour vérifier les fichiers défectueux.

import os
from os import listdir
from PIL import Image

dir_path = "/path/"


for filename in listdir(dir_path):
    if filename.endswith('.jpg'):
        try:
            img = Image.open(base_dir+"\\"+filename) # open the image file
            img.verify() # verify that it is, in fact an image
        except (IOError, SyntaxError) as e:
            print('Bad file:', filename)
            #os.remove(base_dir+"\\"+filename) (Maybe)
0
Dipan Ghosh 2 avril 2019 à 12:05

J'ai eu ce problème aujourd'hui et j'ai constaté que si je fermais le fichier avant de le lire dans imageio, le problème disparaissait.

L'erreur était:

File "/home/vinny/pvenvs/chess/lib/python3.6/site-packages/imageio/core/functions.py", line 139, in get_reader                                                  "Could not find a format to read the specified file " "in mode %r" % mode  ValueError: Could not find a format to read the specified file in mode 'i' 

Solution: Mettez file.close() avant images.append(imageio.imread(filename)), pas après.

0
Uncle Vinny 3 oct. 2019 à 05:58

Ajoutez l'option "pilmode":

imageio.imread(filename,pilmode="RGB")

Ça a marché pour moi.

0
Pablo Villanueva Domingo 21 déc. 2019 à 01:06

enter image description here

J'ai rencontré la même erreur, et enfin, j'ai trouvé que c'était parce que l'image était endommagée.

0
zfireear 6 mai 2020 à 09:25

Différent, mais au cas où utile. J'ai eu une erreur identique dans une bibliothèque différente (skimage), et la solution était d'ajouter un paramètre supplémentaire de `` plugin '' comme ceci -

image = io.imread(filename,plugin='matplotlib')
6
Arsene Lupin 28 avril 2019 à 18:52