1. ホーム
  2. パイソン

OSError: イメージファイルを特定できない

2022-02-09 20:35:09

私が抱えている問題はOSError: cannot identify image file <_io.BytesIO object at 0x7f02cad50780>ですが、これはヘッダーとして機能しません(理由を探った結果)。

まず、なぜOSErrorが発生するのかを少し説明します。

オペレーティングシステムが指定されたタスク(ファイルを開くなど)を実行できない場合に発生し、複数のサブクラスが存在します。

なぜ出るかというと、大量の画像を処理しなければならないのですが、一部の画像が開けないため、OSErrorエラーが発生します。この例外を解決するには、try acceptを使用することです。もちろん、この画像を削除すればいいのです。もし信じられないなら、テストをしてみてください。ここに00001.jpgという新しいファイルを作りました。

import tensorflow as tf
import io
from PIL import Image

img = tf.gfile.FastGFile('00001.jpg','rb')
encoded_jpg = img.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
image = Image.open(encoded_jpg_io)
height,width = image.size

      Python組み込みの例外クラスが付属しています。

<テーブル 例外 ほとんどすべての例外クラスがこのクラスから派生している アトリビュートエラー 属性の参照や値の代入に失敗した場合に発生します。 OSError    オペレーティング システムが指定されたタスク (ファイルを開くなど) を実行できない場合に発生し、複数のサブクラスがあります。 インデックスエラー LookupErrorのサブクラスで、シーケンス内に存在しないインデックスを使用した場合に発生します。 キーエラー LookupErrorのサブクラスで、マッピングに存在しないキーを使用した場合に発生します。 名前エラー 名前(変数)が見つからない場合に発生します。 シンタックスエラー コードが正しくない場合に発生します タイプエラー 不正確な型付けのオブジェクトに対して組み込みの操作または関数を使用した場合に発生します。 バリューエラー 型は正しいが不適切な値を含むオブジェクトに対してビルトイン操作または関数を使用した場合に発生します。 ゼロディビジョンエラー(ZeroDivisionError     除算またはモジュロ演算の第2引数がゼロのときに発生します。

似たような問題を解決するために、以外と試してみる方法。

import tensorflow as tf
import io
from PIL import Image

img = tf.gfile.FastGFile('00001.jpg', 'rb')
encoded_jpg = img.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
try:
    image = Image.open(encoded_jpg_io)
    height, width = image.size
except (OSError, NameError):
    print('OSError')
print('done')