解决Corrupt JPEG data: premature end of data segment

本文不生产技术,只做技术的搬运工!!!

前言

最近在训练yolo的过程中发现大批量警告Corrupt JPEG data: premature end of data segment,之前也出现过,但一直没当回事,但这次数量较大,已经严重影响到模型指标,因此决心解决它。

解决过程

1. 这个问题其实是由于jpg图像损坏导致的,网上有人通过jpg图像的16进制文件来进行分析。判断文件头和文件尾的特征,但是在我这里没有用

2.通过询问大模型,给出的代码都是获取警告等途径,但是该问题并不属于python警告或者错误,而是c++代码中的警告,因此无法抓取

3.使用PIL也无法校验

解决思路

通过pycharm的打印结果来定位图像

1.在pycharm里新建test.py文件,编写代码

import os
import cv2
import time
def getFileList(dir, Filelist, ext=None):
    """
    获取文件夹及其子文件夹中文件列表
    输入 dir:文件夹根目录
    输入 ext: 扩展名
    返回: 文件路径列表
    """
    newDir = dir
    if os.path.isfile(dir):
        if ext is None:
            Filelist.append(dir)
        else:
            if ext in dir:
                Filelist.append(dir)

    elif os.path.isdir(dir):
        for s in os.listdir(dir):
            newDir = os.path.join(dir, s)
            getFileList(newDir, Filelist, ext)

    return Filelist

path = r'/home/workspace/temp/images'
img_list = []
img_list = getFileList(path,img_list,ext='.jpg')
corrupted_images = []
with open('/home/workspace/temp/images/break/test.log','r') as f:
    lines = f.readlines()
    count_lines_old = len(lines)
old_img_path = ""
for img_path in img_list:
    img = cv2.imread(img_path)
    time.sleep(0.01) #这段代码的灵魂在这里,不要删除,不然拿到的图像路径不对
    with open('/home/workspace/temp/images/break/test.log', 'r') as f:
        lines = f.readlines()
        count_lines = len(lines)
        if count_lines != count_lines_old:
            count_lines_old=count_lines
            corrupted_images.append(img_path)
print(corrupted_images)

2.点击右上角,切换文件至test

3.点击菜单栏运行(run),找到编辑配置

4.点击日志,勾选保存到文件,填写日志路径,注意,这个路径一定要和代码里的路径保持一致

设置完成后右键执行,日志文件里就可以拿到所有的问题图像路径了,然后大家就可以编写脚本根据这些图像路径将问题图像剔除出去。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值