目录
- 最近帮朋友做一个图片数据分类的项目,借鉴了大佬的代码,修修改改,话不多说直接上代码!
一、图片转batch文件
import numpy as np
from PIL import Image
import operator
from os import listdir
import sys
import pickle
import random
data = {
}
list1 = []
list2 = []
list3 = []
def img_tra():
for k in range(0, num):
currentpath = folder + "/" + imglist[k]
im = Image.open(currentpath)
x_s = 32
y_s = 32
out = im.resize((x_s, y_s), Image.ANTIALIAS)
out.save(folder_ad + "/" + str(imglist[k]))
def addWord(theIndex, word, adder):
theIndex.setdefault(word, []).append(adder)
def seplabel(fname):
filestr = fname.split(".")[0]
label = int(filestr.split("_")[0])
return fname
def mkcf():
global data
global list1
global list2
global list3
for k in range(0, num):
currentpath = folder_ad + "/" + imglist[k]
im = Image.open(currentpath)
im = im.convert('L')
with open(binpath, 'a') as f:
for i in range(0, 32):
for j in range(0, 32):
cl = im.getpixel((i, j))
print(cl)
list1.append(cl[0])
for i in range(0, 32):
for j in range(0, 32):
cl = im.getpixel((i, j))
list1.append(cl[1])
for i in range(0, 32):
for j in range(0, 32):
cl = im.getpixel((i, j))
list1.append(cl[2])
list2.append(list1)
list1 = []
f.close()
print("image" + str(k + 1) + "saved.")
list3.append(imglist[k].encode('utf-8'))
arr2 = np.array(list2, dtype=np.uint8)
data['batch_label'.encode('utf-8')] = 'batch_1'.encode('utf-8')
data.setdefault('labels'.encode('utf-8'), label)
data.setdefault('data'.encode('utf-8'), arr2)
data.setdefault('filenames'.encode('utf-8'), list3)
output = open(binpath, 'wb')
pickle.dump(data, output)
output.close()
name = 'test'
folder_ad = r"D:\lhh\python\demo\图片制作数据集\shujuji\size54_50pics\{}".format(name)
imglist = listdir(folder_ad)
num = len(imglist)
label = []
for i in range(0, num):
label.append(seplabel(imglist[i]))
binpath = r"D:\lhh\python\demo\图片制作数据集\{}batch".format(name)
mkcf()
- 生成batch文件
二、batch文件转json对应图片
- 读取batch文件,做成对应的json文件导入
import torch
import torchvision
import numpy as np
import cv2
import os
import json
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
dict = pickle.load(fo, encoding='bytes')