处理Flickr8k数据集
数据集下载链接:https://www.kaggle.com/datasets/adityajn105/flickr8k?resource=download
包括8091张图像,1个文本文件包含对每张图像的5个描述。
目的:只是借此数据集记录一下文本处理基础方法,如果开展相应的项目,应该参考官方的数据集处理和数据集分割方式。
流程如下:
0、数据集情况
文本存储在 captions.txt 中,记录方式如下: 第一行给出的表示方式为 “image, caption”。
图像数据:
1、读取文本并将每张图像的caption group到一起
import os
import json
import random
from collections import defaultdict, Counter
from PIL import Image
from matplotlib import pyplot as plt
import string
### 读取文件为list
def read_txt_as_list(txt_path):
f = open(txt_path)
f_list = []
for line in f:
f_list.append(line.strip())
return f_list
caption_path = './flickr8k/captions.txt'
caption_txt = read_txt_as_list(caption_path)
### 创建一个字典,key为img_name,value为5个对应的caption
flickr8k_dict = defaultdict(list) # 用defaultdict的好处是值默认初始化
for i in range(1, len(caption_txt)): # 从1开始因为第一行为标识表示
comma_pos = caption_txt[i].find(',') # 第一个逗号分隔name和caption
img_name = caption_txt[i][:comma_pos]
img_caption = caption_txt[i][comma_pos+1:]
flickr8k_dict[img_name].append(img_caption)
2、随机分割数据集
### 获得所有的图像名称即keys
all_img_names = list(flickr8k_dict.keys(