为何无法用Image.open打开Hugging Face数据集里的PIL图像?
问题:加载Hugging Face音乐风格数据集后无法显示图像
代码示例
import datasets import PIL from PIL import Image from datasets import load_dataset dataset = load_dataset("ccmusic-database/music_genre", split="test") output = dataset im = Image.open(output[0]) im.show()
报错信息
Traceback (most recent call last): File "/Users/abc/Desktop/Project Python Audio/.venv/lib/python3.11/site-packages/PIL/Image.py", line 3247, in open fp.seek(0) ^^^^^^^ AttributeError: 'dict' object has no attribute 'seek' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/abc/Desktop/Project Python Audio/loading_dataset.py", line 8, in im = Image.open(output[0]) ^^^^^^^^^^^^^^^^^^^^^ File "/Users/abc/Desktop/Project Python Audio/.venv/lib/python3.11/site-packages/PIL/Image.py", line 3249, in open fp = io.BytesIO(fp.read()) ^^^^^^^ AttributeError: 'dict' object has no attribute 'read'
打印output[0]的结果
{'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=476x349 at 0x101BE6E10>, 'fst_level_label': 1, 'sec_level_label': 6, 'thr_level_label': 6, 'duration': 416.0533106575964}
原因
Image.open() 仅能处理文件路径、字节流或类文件对象,用来创建新的PIL图像实例。但你传入的output[0]是一个字典,不符合该函数的输入要求,因此触发报错。实际上这个字典的image字段已经是一个现成的PIL图像对象,无需再次调用Image.open()处理。
解决方法
直接提取字典中的image字段,调用其show()方法即可显示图像:
import datasets from PIL import Image from datasets import load_dataset dataset = load_dataset("ccmusic-database/music_genre", split="test") im = dataset[0]['image'] im.show()
内容的提问来源于stack exchange,提问作者Laulito
相关产品推荐
相关产品推荐

