数据集Invalid SOS parameters for sequential JPEG

报错如下图所示,虽然不影响模型训练,但最终还是想办法来解决它。
在这里插入图片描述
目前网上关于这个报错的说法不一,很多说是OOM(out of memory),但是经过实验,调整了batch_size之后还是会出现一样的报错。
最终在github上找到了问题所在:https://github.com/lovell/sharp/issues/1578
在这里插入图片描述
意思是这个是三星手机拍摄图片的一个bug。可以用python脚本查看图片信息:

import os
from PIL import Image

dir_path = r'F:\pycharm-workspace\selfCreateDataset_\normal'

for filename in os.listdir(dir_path):
    if filename.endswith('.jpg') or filename.endswith('.jpeg') or filename.endswith('.png'):
        image_path = os.path.join(dir_path, filename)
        with Image.open(image_path) as img:
            exif_data = img._getexif()
            if exif_data and 271 in exif_data:
                make = exif_data[271]
                if 'samsung' in make.lower():
                    print(f"{filename} was taken with a Samsung device.")
                else:
                    print(f"{filename} was not taken with a Samsung device.")
            else:
                print(f"{filename} has no EXIF data.")

上述代码主要是检测图片的EXIF信息,EXIF指的是 Exchangeable Image File Format,是一种存储在数字图像文件中的元数据标准,它可以记录拍摄日期、时间、地点、相机型号、曝光参数、ISO等拍摄信息。一些图片处理软件可以读取和修改EXIF信息,方便用户管理和查看照片信息。
通过比对可以找出哪些图片是三星手机拍摄的,如果图片不多的话,可以手动用电脑的画图打开,重新保存。如果图片较多的话,可以直接使用cv2读取图片,然后再保存,代码如下:

import os
import cv2
# 定义要读取的文件夹路径和保存的文件夹路径
src_folder = r'C:\Users\xiaohaha\Desktop\questionImage'
dst_folder = r'C:\Users\xiaohaha\Desktop\questionImage2'
# 创建保存图片的文件夹
if not os.path.exists(dst_folder):
    os.makedirs(dst_folder)
# 遍历读取文件夹中的图片文件
for file_name in os.listdir(src_folder):
    # 判断文件是否是图片文件(这里仅判断后缀名)
    if file_name.endswith('.jpg') or file_name.endswith('.png'):
        # 构造完整路径
        file_path = os.path.join(src_folder, file_name)
        # 使用cv2读取图片
        img = cv2.imread(file_path)
        # 保存图片到目标文件夹中
        save_path = os.path.join(dst_folder, file_name)
        cv2.imwrite(save_path, img)

猜你喜欢

转载自blog.csdn.net/qq_41318914/article/details/130523020
SOS
今日推荐