解析标注的集装箱数据,根据坐标获取其中的子框与label进行crnn训练
#-*- coding: UTF-8 -*-
import json
import os
import sys
from tqdm import tqdm
import cv2
img_path = 'C:/Users/admin/Desktop/123/jizhuangx/image/'
img_split = 'C:/Users/admin/Desktop/123/jizhuangx/splitImages/'
json_path = 'C:/Users/admin/Desktop/123/jizhuangx/json/'
def min_max_xy(points):
xlist = []
ylist = []
for list_fn in points:
xlist.append(list_fn[0])
ylist.append(list_fn[1])
#print('11111:', xlist)
#print('22222:', ylist)
xmin = min(xlist)
xmax = max(xlist)
ymin = min(ylist)
ymax = max(ylist)
#print('1111111111:', xmin, ymin, xmax, ymax)
return xmin, ymin, xmax, ymax
def resolve_json(jsonname):
with open(jsonname) as f:
data = ''
while True:
line = f.readline()
#print('1111:', line)
if not line:
break
#if 'imageData' in line:
# continue
data += line.rstrip()
data = json.loads(data)
#print('22222222:', data)
#print('222223333:', type(data)) #解析成字典对象
img_name = data['imagePath']
name, _ = os.path.splitext(img_name)
img = cv2.imread(os.path.join(img_path,img_name))
nLength = len(data['shapes'])
#for shape in data['shapes']: #每个元素是个字典对象
out = []
for i in range(nLength):
#i = 0
img_newName = name + '-%03d' % i + '.jpg'
label = data['shapes'][i]['label']
str = img_newName + ' ' +label + '\n'
out.append(str)
#points = shape['points']
points = data['shapes'][i]['points']
x_min, y_min, x_max, y_max = min_max_xy(points)
img_tmp = img[y_min:y_max, x_min:x_max]
cv2.imwrite(os.path.join(img_split, img_newName), img_tmp)
with open('C:/Users/admin/Desktop/123/jizhuangx/splitlabel.txt', 'a') as o:
o.writelines(out)
#for x, y in shape['points']:
#i += 2
#print(str(x) + " " + str(y))
#txt_file = open('label/' + bfn + '.txt', 'a')
#if i % 8 == 0:
#strResult = str(x) + ',' + str(y) + '\n'
#txt_file.write(strResult)
#else:
#strResult = str(x) + ',' + str(y) + ','
#txt_file.write(strResult)
#txt_file.close()
def main():
json_fns = os.listdir(json_path)
json_fns.sort()
#print('111111111111:', json_fns)
for json_fn in json_fns:
#try:
#_, fn = os.path.split(json_fn)
#print('111111111111:', json_fn)
bfn, ext = os.path.splitext(json_fn)
if ext.lower() not in ['.json']:
continue
resolve_json(json_path + json_fn)
#except:
# print("Error processing {}".format(json_fn))
if __name__ == '__main__':
main()