【PyTorch】crnn-json格式解析与图片子框获取

解析标注的集装箱数据,根据坐标获取其中的子框与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()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值