数据集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)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: “invalid byte sequence for encoding” 的意思是编码中存在无效的字节序列。这通常是由于使用了不兼容的编码方式或者数据中包含了不支持的字符造成的。解决方法是使用正确的编码方式或者对数据进行清洗和转换。 ### 回答2: "invalid byte sequence for encoding" 是一个编码错误。这个错误通常出现在字符编码处理时,表示输入字符无法正确地被编码为所指定的编码格式。 在计算机中,字符通常被以数字的形式表示和处理。多种编码方案被用于给字符分配唯一的数字标识,这样计算机可以识别和处理这些字符。然而,有时候输入的字符包含不能被当前编码方案表示的字节序列,这就导致了"invalid byte sequence for encoding"错误。 这个错误通常出现在处理非ASCII字符或者多字节字符时。比如,如果使用UTF-8编码方式处理一段包含非UTF-8字符的文本数据,就有可能出现这个错误。同样地,如果将一个以UTF-8编码的文本以ASCII编码方式进行处理,也可能引发这个错误。 要解决这个问题,通常需要确保输入的字符与所选择的编码方式相匹配。可以尝试更换编码方式或者使用更高级的编码方案来处理特殊字符。另外,也需要确保在编码和解码过程中使用正确的编码方法,以便正确地转换字符。 总之,"invalid byte sequence for encoding"错误意味着输入的字节序列无法被正确编码,通常需要检查数据的编码方式或者处理方法,以确保正确处理字符。 ### 回答3: "Invalid byte sequence for encoding"是一个数据库错误,通常出现在从一个字符编码转换为另一个字符编码时。这个错误意味着在源字符编码中存在一个或多个无效字节序列。 造成这个错误的原因可能有多种,例如: 1. 输入的数据包含了不兼容的字符或特殊字符,无法在目标编码中正确表示。 2. 数据库连接字符集配置不正确,导致无法正确转换字符编码。 3. 数据库的字符编码与应用程序或数据源的字符编码不匹配。 解决这个问题可以尝试以下方法: 1. 检查输入数据是否包含特殊字符或不兼容的字符,可以使用字符转义或过滤来处理。 2. 检查数据库连接字符集配置是否正确,确保数据库连接使用正确的字符编码。 3. 检查数据库的字符编码设置,与应用程序或数据源的字符编码设置是否匹配。 在处理字符编码时,建议使用标准的UTF-8字符编码,因为它可以支持世界上几乎所有的字符。确保所有的输入数据和数据库连接都使用相同的字符编码,以避免"invalid byte sequence for encoding"错误的发生。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值