首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow去除JFIF

Tensorflow去除JFIF
EN

Stack Overflow用户
提问于 2020-06-05 17:18:45
回答 2查看 1.4K关注 0票数 6

我对tensorflow非常陌生,我想清楚地知道,下面的命令是做什么的?

代码语言:javascript
复制
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网站对上述代码的评论:

在处理大量真实图像数据时,损坏图像是常见的现象.让我们过滤掉编码不好的图像,这些图像的标题中没有字符串"JFIF“。

我想特别知道下面的命令是做什么的,它是怎么做的?

代码语言:javascript
复制
 is_jfif = tf.compat.as_bytes("JFIF") in fobj.peek(10)

我检查了API,但没有清楚地理解它。

一个更好的解释会有很大帮助。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-05 19:15:50

维基百科解释说,JPG文件包含文件开头的字符串"JFIF“,编码为字节:

所以:

  • tf.compat.as_bytes("JFIF")将字符串"JFIF“转换为字节。您也可以使用b"JFIF",尽管TensorFlow实现可能有一些我不知道的优化。
  • 理论上,fobj.peek(10)返回文件的前10个字节,但在实践中,它经常返回整个文件
  • 然后,is_jfif只检查转换后的"JFIF“字符串是否在fobj.peek的结果中。
票数 9
EN

Stack Overflow用户

发布于 2020-06-05 19:14:14

该命令将给定的字符串(JFIF)转换为字节,并检查它是否存在于字节10的文件对象中。它是一个验证头的内容的快速程序。

当涉及到处理“损坏的数据”时,这不是我的第一选择,通常您会把它留给一个对图像处理了解得更多的模块。这是一个教程,所以重点是简洁和突出一个问题,而不是提供一个全面的解决方案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62220855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档