なぜそれが問題ですか?
1、ネットワークの問題:ネットワークが不安定で、受信した情報は、完全な画像ではありません。問題のその応答;
2、ローカルディスクがいっぱいです:時々受け取った画像情報が完全であるが、任意のローカルディスクを保存するには、すべての後に、そのいくつかのMbのの絵を持っています。
エラー画像を検出する方法は?
非常に多くの方法を試してみましたが、より良いアプローチが終わるアイデンティティのjpg、jpeg形式は、PNGファイルを決定することです。
JPGファイルの終了を識別:\ XFF \ XD9
JPEGファイル終了を識別:\ XFF \ XD9
PNGファイルの終了を識別:\ xaeB` \ X82
不完全な絵コードを検出
クラスCheckImage(オブジェクト):
デフ__init __(自己、IMG):
オープン(IMG、 "RB")とFとして:
f.seek(-2、2)
self.img_text = f.read()
f.close()を
check_jpg_jpeg DEF(自己):
"" "検出JPG画像の完全性、完全Trueを返し、不完全Falseを返します" ""
BUF = self.img_text
リターンbuf.endswith(B '\ XFF \ XD9')
check_png DEF(自己):
"" "" "検出PNG画像の完全性、完全Trueを返し、不完全Falseを返します"
BUF = self.img_text
リターンbuf.endswith(B '\ xaeB` \ X82')
全体像せずにフォルダを検出し、削除します
輸入OS
CheckImageインポートCheckImageから
クラスCheckBrockImage(オブジェクト):
デフ__init __(自己、train_dir):
self.train_dir = train_dir
self.completeFile = 0
self.incompleteFile = 0
get_imgs DEF(自己):
"" "" "フォルダ内のすべての画像から"
os.listdirでファイル用(self.train_dir):
os.path.splitext(ファイル)[1] .lower()= IF = '.JPG'またはos.path.splitext(ファイル).lower()== ".JPEG" [1]:
RET = self.check_img(ファイル)
RET IF:
。self.completeFile + 1 =
他:
self.incompleteFile self.incompleteFile + = 1
#self.img_remove(ファイル)#削除不完全な絵
デフimg_remove(自己、ファイル):
"" "删除图片" ""
os.remove(self.train_dir +ファイル)
check_img DEF(セルフ、img_file):
"" "" "画像の整合性を検出するには、絵の完全Trueを返し、絵はFalseを返します不完全である"
checkImageを返す(self.train_dir + img_file).check_jpg_jpeg()
RUN DEF(自己):
"" "実行可能ファイル" ""
self.get_imgs()
印刷( '不完全な画像:%d個の数ヶ月は' %self.incompleteFile)
印刷( '完全な画像:%d個の数ヶ月は' %self.completeFile)
__name__ == IF '__main__':
train_dir = 'C:/ユーザー/ 79993 /デスクトップ/ BrockImg / TextImg /' #検知フォルダ
IMGS = CheckBrockImage(train_dir)
imgs.run()
不完全な画像JPGをスキップ
オープンで(os.path.join(パス、ファイル名)、 'RB')としてf:
check_chars = f.read()[ - 2:]
!もしcheck_chars = B '\ XFF \ XD9':
引き続き
他:
IMG = cv2.imread(os.path.join(パス、ファイル名)、1)