【深度学习】yolov 图片训练的时候的遇到的warning: corrupt JPEG restored and saved

报错原因

是图片在dataset.py 走验证时报的错误。


if im.format.lower() in ('jpg', 'jpeg'):with open(im_file, 'rb') as f:f.seek(-2, 2)if f.read() != b'\xff\xd9':  # corrupt JPEGImageOps.exif_transpose(Image.open(im_file)).save(im_file, 'JPEG', subsampling=0, quality=100)msg = f'{prefix}WARNING: {im_file}: corrupt JPEG restored and saved'

ref:https://huggingface.co/spaces/nakamura196/yolov5-ndl-layout/blob/447b47ec77e6ea46fef0abba2594b11de7874676/ultralytics/yolov5/utils/datasets.py

在这里插入图片描述
f.seek(-2, 2) 是2是从尾部开始,offset=2个,也就是找到文件结尾的最后两个字符。
在Python中,f.seek(offset, from_what)是一个文件对象的方法,用于在文件中移动读取/写入位置。其中,offset表示要移动的字节偏移量,from_what表示起始位置。
具体地,from_what可以取以下三个值:
0:从文件开头开始计算偏移量(默认值)。
1:从当前位置开始计算偏移量。
2:从文件末尾开始计算偏移量。
在给定的代码示例中,f.seek(-2, 2)表示从文件末尾开始向前移动2个字节的位置。也就是说,读取/写入操作将在文件的倒数第二个字节处进行。

ref:https://github.com/ultralytics/yolov5/issues/916

这里也有人提bug了,但作者说是告诉的info不是个bug,他说的也对,又不是人家的问题造成的。

那么,其实就需要我们在数据集处理的时候,提早发现,并修复它。

可以看到这个不是错误,当

 if f.read() != b'\xff\xd9':  # corrupt JPEGImageOps.exif_transpose(Image.open(im_file)).save(im_file, 'JPEG', subsampling=0, quality=100)msg = f'{prefix}WARNING: {im_file}: corrupt JPEG restored and saved'

读取的文件结尾不是预期的时候,会

如何检查和修复

--------待定--------------------------------

import os
import re
from pathlib import Path
import shutil
from PIL import Imagesource_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"images")
dst_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"res_images")def image_to_jpg():"""使用Pillow将图片文件转换为.jpg文件"""img_name_list = os.listdir(dst_path)for img_name in img_name_list:image_path =  os.path.join(dst_path,img_name)path = Path(image_path)print(path.parent, path.stem)exit("-==---")# Image.open(image_path).convert('RGB').save(image_path)def mv_pic():img_name_list = os.listdir(source_path)for img_name in img_name_list:shutil.copy(os.path.join(source_path,img_name), os.path.join(dst_path,img_name))
def check_pic(im_file):try:# verify imagesim = Image.open(im_file)im.verify()  # PIL verifyif im.format.lower() in ('jpg', 'jpeg'):with open(im_file, 'rb') as f:f.seek(-2, 2)if f.read() != b'\xff\xd9':  # corrupt JPEG# ImageOps.exif_transpose(Image.open(im_file)).save(im_file, 'JPEG', subsampling=0, quality=100)msg = f'WARNING: {im_file}: corrupt JPEG restored and saved'else:print(im_file,"okkkk----------")except Exception as e:msg = f'WARNING: {im_file}: ignoring corrupt image/label: {e}'print(msg)if __name__ == "__main__":# mv_pic()# image_to_jpg()img_name_list = os.listdir(dst_path)for img_name in img_name_list:image_path =  os.path.join(dst_path,img_name)check_pic(image_path)

这是解决方案,其实解不解决都行,训练过程中,它会自己给你解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/8731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 九种数据类型的基本操作

一、redis9种数据类型的基本操作 ①key操作 #查找所有的key 127.0.0.1:6379> keys * 1) "pop" 2) "mylist" 3) "lpl" 4) "myset" #设置key的过期时间 返回1表示执行成功,0表示失败,出现问题 127.0.0.1:6379…

Qt Creator mainwindow.obj:-1: error: LNK2019

构建的时候报错: mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 "public: __thiscall mynotedig::mynotedig(class QWidget *)" (??0mynotedigQAEPAVQWidgetZ),该符号在函数 "public: void __thiscall MainWindow::mynoteab…

VMPWN的入门级别题目详解(一)

实验一 VMPWN1 题目简介 这是一道基础的VM相关题目,VMPWN的入门级别题目。前面提到VMPWN一般都是接收字节码然后对字节码进行解析,但是这道题目不接受字节码,它接收字节码的更高一级语言:汇编。程序直接接收类似”mov”、”add”…

前端面试题:探索前沿技术与知识深度的关键

在前端开发领域,面试是评估候选人技能和知识水平的重要环节。面试题涵盖了各个方面的前端知识,旨在考察候选人的理解能力和解决问题的能力。本文将介绍一些常见的前端面试题,并结合具体实例说明,帮助读者更好地理解和准备前端面试…

Dockerfile 创建镜像,构建LNMP+wordpress架构

目录 一、Dockerfile 构建镜像 1.Dockerfile 构建 nginx镜像 1.1创建 nginx Dockerfile 目录 1.2编写 Dockerfile 文件 1.3构建nginx镜像 2.Dockerfile 构建 mysql 镜像 2.1创建 mysql Dockerfile 目录 2.2修改mysql配置文件 2.3编写 Dockerfile 文件 2.4构建mysql镜…

[论文笔记] LLM数据集——金融数据集

一、chatglm_金融 ModelScope 魔搭社区 请将modelscope sdk升级到v1.7.2rc0,执行: ​ pip3 install "modelscope1.7.2rc0" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html # 方式1 git clone http://www.modelscope…

Cesium态势标绘专题-圆角矩形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

[RabbitMQ] RabbitMQ简单概述,用法和交换机模型

MQ概述: Message Queue(消息队列),实在消息的传输过程中保存消息的容器,都用于分布式系统之间进行通信 分布式系统通信的两种方式:直接远程调用 和 借助第三昂 完成间接通信 发送方称谓生产者,接收方称为消费者 MQ优…

JMeter基础入门教程之CSV数据文件设置CSV Data Set Config

最近在做压力测试,登录功能用到了配置元件:CSV 数据文件设置,可以将登录用户名和密码放在一个csv文件中,然后通过CSV数据文件设置元件读取出来,用来做压测。 一、CSV文件 CSV文件小知识分享:是指"逗号…

POC CPU 单核性能基准测试 Linux bash 下的简单测试用例 bc计算兀

指令 time echo "scale5000;4*a(1)" | bc -l -q 通过耗时简单评估CPU单核性能 测试环境一 yeqiangyeqiang-MS-7B23:/opt/cpu2006$ cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.2 LTS" NAME"Ubuntu" VERSION_ID"22.04" VERSION&…

leetcode 620. 有趣的电影

# Write your MySQL query statement below select * from Cinema where id%21 and description !boring order by rating descid%21是筛选奇数的条件description !‘boring’ 是筛选不无聊的条件order by rating desc 按评分由大到小排序

Ubuntu 下安装软件,卸载,查看已经安装的软件

参考网址:http://wiki.ubuntu.org.cn/UbuntuSkills 一般的安装程序用三种: .deb 和.rpm 这两种安装文件 .bundle 这是二进制的安装文件  而 tar.gz 这类的只是压缩包(相当于 .rar,.zip 压缩包一样),如果此类文件是程序的话&a…

BP神经网络数据分类——语音特征信号分类(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 BP神经网络是一种常见的人工神经网络,用于数据分类和回归等任务。在语音特征信号分类中,BP神经网络可…

qt画图大卫三角形电力

直接上code void paintEvent(QPaintEvent *event) {Q_UNUSED(event); QPainter painter(this); QRect rect0 = QRect(0,0,500,500);painter.drawRect(rect0);QRect rectB = QRect(-1,-1,501,501);painter.drawRect(rectB);//画三角形QLine line1 = QLine(QPoint(250.0f,80.0f),…

Android11 相机拍照权限,以及解决resolveActivity返回null

一、配置拍照和读写权限 <uses-permission android:name"android.permission.CAMERA"/> <uses-feature android:name"android.hardware.camera" /><uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/&…

通过RPM方式安装,升级,卸载,以及配置使用MySQL

通过RPM方式安装&#xff0c;升级&#xff0c;卸载&#xff0c;以及配置使用MySQL 一、下载 MySQL是一种开源的关系数据库管理系统&#xff0c;被广泛应用于各种业务应用中。本文将讲解如何下载和安装MySQL的rpm安装包。下载rmp安装包有多种方式&#xff1a; 1、可以到MySQL的…

嵌入式C常用关键字解析

1、static关键字的作用 修饰局部变量 作用域&#xff1a;无变化 生命周期&#xff1a;函数--->程序&#xff08;数据段&#xff09; 特点&#xff1a;只初始化一次 修饰全局变量 作用域&#xff1a;整个工程----->本模块 生命周期&#xff1a;无变化 修饰函数 作…

【C++初阶】 priority_queue(优先级队列)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C初阶 ⭐代码仓库&#xff1a;C初阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

python简单入门

python简单入门 文章目录 python简单入门0. 地址链接1. 官网2.2. 下载地址3. 官方文档 1. 第一章1.1 python解释器1.2 基础语法1.2.1 常见数据类型1.2.2 强制类型转换1.2.3 注释1.2.4 运算符1.2.5 字符串1.2.5.1 字符串的定义1.2.5.2 字符串拼接1.2.5.3 格式化字符串1.2.5.3 精…

vue指令-插值表达式

vue指令-插值表达式 1、什么是插值表达式2、Vue变量声明在哪里 1、什么是插值表达式 双大括号&#xff0c;可以把vue数据变量直接显示在标签内 2、Vue变量声明在哪里 data函数返回对象上&#xff0c;用key属性声明 示例&#xff1a; <template><div id"app&…