Tensorflow 去除 JFIF
Tensorflow Removing JFIF
我是tensorflow的新手,想清楚地知道下面的命令是做什么的?
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import os
num_skipped = 0
for folder_name in ("Cat", "Dog"):
print("folder_name:",folder_name) #folder_name: Cat
folder_path = os.path.join("Dataset/PetImages", folder_name)
print("folder_path:",folder_path) #folder_path: Dataset/PetImages/Cat
for fname in os.listdir(folder_path):
print("fname:",fname) #fname: 5961.jpg
fpath = os.path.join(folder_path, fname)
print("fpath:", fpath) #fpath: Dataset/PetImages/Cat/10591.jpg
try:
fobj = open(fpath, "rb")
is_jfif = tf.compat.as_bytes("JFIF") in fobj.peek(10)
finally:
fobj.close()
if not is_jfif:
num_skipped += 1
# Delete corrupted image
os.remove(fpath)
print("Deleted %d images" % num_skipped)
Keras网站对以上代码的评论:
当处理大量 real-world 图像数据时,损坏的图像很常见。让我们过滤掉在 header.
中不包含字符串 "JFIF" 的 badly-encoded 个图像
我想具体知道下面的命令是做什么的,它是怎么做的?
is_jfif = tf.compat.as_bytes("JFIF") in fobj.peek(10)
我检查了 API 但不是很清楚。
更好的解释会很有帮助。
谢谢
该命令将给定字符串 (JFIF
) 转换为字节,并检查它是否存在于文件 object 的字节 10
处。快速验证 header.
的内容
在处理 "corrupted data" 时,这不是我的第一选择,通常您会将其留给对图像处理了解更多的模块。不过这是一个教程,所以重点在于简洁和突出问题,而不是提供全面的解决方案。
Wikipedia 说明 JPG 文件在文件开头包含字符串 "JFIF",编码为字节:
所以:
tf.compat.as_bytes("JFIF")
将字符串 "JFIF" 转换为字节。您也可以只使用 b"JFIF"
,尽管 TensorFlow 实现可能有一些我不知道的优化。
fobj.peek(10)
理论上是returns文件的前10个字节,但在实践中往往是returnsentire file.
is_jfif
然后只检查转换后的 "JFIF" 字符串是否在 fobj.peek
. 的结果中
我是tensorflow的新手,想清楚地知道下面的命令是做什么的?
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import os
num_skipped = 0
for folder_name in ("Cat", "Dog"):
print("folder_name:",folder_name) #folder_name: Cat
folder_path = os.path.join("Dataset/PetImages", folder_name)
print("folder_path:",folder_path) #folder_path: Dataset/PetImages/Cat
for fname in os.listdir(folder_path):
print("fname:",fname) #fname: 5961.jpg
fpath = os.path.join(folder_path, fname)
print("fpath:", fpath) #fpath: Dataset/PetImages/Cat/10591.jpg
try:
fobj = open(fpath, "rb")
is_jfif = tf.compat.as_bytes("JFIF") in fobj.peek(10)
finally:
fobj.close()
if not is_jfif:
num_skipped += 1
# Delete corrupted image
os.remove(fpath)
print("Deleted %d images" % num_skipped)
Keras网站对以上代码的评论:
当处理大量 real-world 图像数据时,损坏的图像很常见。让我们过滤掉在 header.
中不包含字符串 "JFIF" 的 badly-encoded 个图像我想具体知道下面的命令是做什么的,它是怎么做的?
is_jfif = tf.compat.as_bytes("JFIF") in fobj.peek(10)
我检查了 API 但不是很清楚。
更好的解释会很有帮助。
谢谢
该命令将给定字符串 (JFIF
) 转换为字节,并检查它是否存在于文件 object 的字节 10
处。快速验证 header.
在处理 "corrupted data" 时,这不是我的第一选择,通常您会将其留给对图像处理了解更多的模块。不过这是一个教程,所以重点在于简洁和突出问题,而不是提供全面的解决方案。
Wikipedia 说明 JPG 文件在文件开头包含字符串 "JFIF",编码为字节:
所以:
tf.compat.as_bytes("JFIF")
将字符串 "JFIF" 转换为字节。您也可以只使用b"JFIF"
,尽管 TensorFlow 实现可能有一些我不知道的优化。fobj.peek(10)
理论上是returns文件的前10个字节,但在实践中往往是returnsentire file.is_jfif
然后只检查转换后的 "JFIF" 字符串是否在fobj.peek
. 的结果中