一.问题描述:
在ubuntu20.04运行LabelImg软件想标注从网上下载的数据集,发现打不开,报错:Error opening file。如图(借鉴网图LabelImg打开图片错误_labelimg打不开图片-CSDN博客):
二.问题排查:
1.问题定位
不仅LabelImg软件打不开图片,ubuntu自带的图片查看器和网页都打不开。
2.网上查阅
在csdn看到前辈写的这篇文章:LabelImg打开图片错误_labelimg打不开图片-CSDN博客
自己运行时后发现没有解决,修改完代码如下:
import os from PIL import Image dir_origin_path = "/home/tao/dataset_ws/TIB-Net/images/train" # 直接指向 train/ dir_save_path = "/home/tao/dataset_ws/TIB/train/images" os.makedirs(dir_save_path, exist_ok=True) IMG_EXTS = {'.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff'} count = 0 skip = 0 for file in os.listdir(dir_origin_path): if file.lower().endswith(tuple(IMG_EXTS)): image_path = os.path.join(dir_origin_path, file) try: image = Image.open(image_path).convert('RGB') image.save(os.path.join(dir_save_path, file)) count += 1 except Exception as e: print(f" 跳过 {file}: {e}") skip += 1 print(f"完成! 成功保存 {count} 张图片, 跳过 {skip} 张")目录文件夹并没有出现处理后的图片。且报错:
ython exchange_jpg.py
跳过 001929.jpg: cannot identify image file '/home/tao/dataset_ws/TIB-Net/images/train/001929.jpg'
跳过 000609.jpg: cannot identify image file '/home/tao/dataset_ws/TIB-Net/images/train/000609.jpg'
跳过 001201.jpg: cannot identify image file
PIL 报cannot identify image file。这说明 这些文件虽然后缀是.jpg,但实际上不是 JPEG 图片文件。
3.后排查文件格式和大小
(1)看文件大小:
终端下输入命令:ls -lh /home/tao/dataset_ws/TIB-Net/images/train/001929.jpg
终端输出:ls -lh /home/tao/dataset_ws/TIB-Net/images/train/001929.jpg
131 字节 —— 这个文件不可能是正常的 JPEG 图片。一张哪怕是 100×100 的 JPEG 图片,通常也要几千到几万字节。131 字节说明这些文件要么是:
- 空占位文件
- 软链接指向了不存在的位置,实际内容为空
- 文件内容只是某种文本(比如错误信息、HTML 404 页面
(2)确认一下这个文件里到底写了什么:
终端下输入命令:cat /home/tao/dataset_ws/TIB-Net/images/train/001929.jpg
终端输出:version https://git-lfs.github.com/spec/v1 oid sha256:21c00b61c861de0317931239be29755953e0520f77d15b302793ef8963f28abf size 743355
显然,cat 出来的内容就是典型的 Git LFS 指针文件(pointer)。
size 743355 说明真实图片是 743 KB,但你本地只有 131 字节的指针文本。
之前 PIL 报 cannot identify image file,就是因为读到的不是 JPEG 数据,而是这段文本。
这个 TIB-Net 仓库是用 Git LFS 管理图片的,但克隆/下载时只拿到了指针,没把真实二进制拉下来。
4.解决方法:在仓库根目录拉取 LFS 真实文件
(1)进到你的 git 仓库根(不是 images/train,而是有.git的那一层):
终端下输入:cd /home/tao/dataset_ws/TIB-Net
(2)确认 git-lfs 已安装:
终端下输入:git lfs version
我这边报错:
git:'lfs' 不是一个 git 命令。参见 'git --help'。
最相似的命令是
log
这段输出表示:git-lfs 没装
(3)安装 git-lfs :
终端下输入:
sudo apt update
sudo apt install git-lfs
装完之后初始化(每台机器只需一次):git lfs install
(4)然后回到仓库目录拉取真实图片:
cd /home/tao/dataset_ws/TIB-Net
git lfs pull
重新下载源图片后,发现能够使用LabelImg软件、ubuntu自带的图片查看器和网页打开图片。