深度学习图像处理准备工作之通过json截取指定区域

利用json截取图像指定区域

由于深度学习之图像处理工作需要先进行数据制作,其中不免会框图来形成训练数据,而往往我们需要在原始数据上进行区域标注,截取标注区域来进行目标标记

通俗一点来说就是在我们需要的目标在原图中某一个部件上,而用原图来训练效果不好,此时我们会将目标所在的部件截取出来,然后在这个部件上进行数据的标注工作,形成训练数据集

这个工作就是解决这一问题的,工作流程如下:

  1. 在原图像中框选目标所在的部件(也就是某一区域),此时会根据原始图像生成对应的json文件
  2. 然后将原始图像与框图产生的json文件,通过程序来对json文件所标注的位置进行截取出来。
  3. 无须担心一张图片中标记了多个区域。
import numpy as np
import cv2
import os
import json
import xml.etree.cElementTree as ET

def drawxml(xmlpath,im):
    tree = ET.ElementTree(file=xmlpath)
    print("resoluting...")
    root = tree.getroot()
    for obj in root:
        if obj.tag == 'object':
            objectname = obj[0].text  # object name
            box = []
            print('name:' + objectname)
            for bndbox in obj:
                for sub in bndbox:
                    box.append(int(sub.text))  # bndbox
                    box = np.array(box)
                    # print(box)
                    cv2.rectangle(im,(box[0],box[1]),(box[2],box[3]),(0,255,0),2)
                    font = cv2.FONT_HERSHEY_SIMPLEX
                    cv2.putText(im,objectname,(box[0],box[1]),font,0.8,(255,255,255),2,cv2.LINE_AA)
    return im



def drawjson(jsonpath, im):
    xList=[]
    yList=[]
    jsonobj = json.load(open(jsonpath))
    hats = jsonobj['shapes']
    for hat in hats:
        boxes = hat['points']
        pts = np.array(boxes, np.int32)
        pts = pts.reshape((-1, 1, 2))
        # print(pts)
        objectname = hat['label']
        print(jsonpath)
        print(objectname)
        cv2.polylines(im, [pts], True, (0, 0, 255), 2)
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.putText(im, objectname, (pts[0][0][0], pts[0][0][1]), font, 0.5, (255, 255, 255), 2, cv2.LINE_AA)
        print(len(pts))
        xlist=[]
        ylist=[]
        for i in range(len(pts)):
            xlist.append(pts[i][0][0])
            ylist.append(pts[i][0][1])
        xList.append(xlist)
        yList.append(ylist)
        #print('xList',xList)
        #print('yList',yList)
    return im,xList,yList
if __name__ == '__main__':
    #通过json或xml对原图进行标记需要填写savepath,通过json截取不用填写
    imgpath = "/media/chase/SONG/xd/jinjucut/" #图片路径
    xmlpath = ""                               #xml路径
    savepath = ""                              #画图路径(截取不用填写)
    cutsavepath="/home/chase/tmp/xiaodingcut/" #存放裁剪后的路径
    jsonpath = "/home/chase/tmp/jinjucutres/"  #图片对应的json路径
    imgnum = 0
    xmlnum = 0
    jsonnum = 0
    for f in os.listdir(imgpath):
        ifdraw = False
        imgnum += 1
        im = cv2.imread(imgpath + f)
        origin=cv2.imread(imgpath + f)
        xmlname = xmlpath + f.replace('.jpg', '.xml')
        if (xmlpath!='' and os.path.exists(xmlname)):
            ifdraw = True
            im = drawxml(xmlname, im)
            xmlnum += 1
        jsonname = jsonpath + f.replace('.jpg', '.json')
        if (jsonpath!='' and os.path.exists(jsonname)):
            ifdraw = True
            im,xList,yList = drawjson(jsonname, im)
            jsonnum += 1
            print('xList',xList)
            print('yList',yList)
            print(len(xList))
            for i in range(len(xList)):
                img_cut=origin[min(yList[i]):max(yList[i]),min(xList[i]):max(xList[i])]
                print(img_cut)
                if os.path.exists(cutsavepath+f):
                    cut_img_name=cutsavepath+'cutted-'+ str(i)+'-'+f
                else: cut_img_name=cutsavepath+f
                print(cut_img_name)
                cv2.imwrite(cut_img_name,img_cut)
        if ifdraw and savepath!='':
            cv2.imwrite(savepath + f, im)
    print("imgnum:", imgnum)
    print("xmlnum:", xmlnum)
    print("jsonnum", jsonnum)
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 深度学习是一种机器学习的方法,它可以通过大量的数据和神经网络模型来进行模式识别和特征提取。而JSON是一种轻量级的数据交换格式,它在现代互联网应用中被广泛使用。 深度学习和JSON之间的转化需要注意以下几点: 1. 数据准备:首先,需要将原始数据准备成适合深度学习模型的格式。在处理文本数据时,可以将文本内容转化为向量或矩阵表示,以便输入到深度学习模型中。可以使用词袋模型、词嵌入等技术进行文本向量化。对于图像数据,可以将图像转化为像素矩阵或使用卷积神经网络提取图像特征。 2. JSON数据加载:将JSON数据加载到程序中,可以使用现有的JSON库来进行解析和处理。常见的JSON库有jsoncpp、json-c、rapidjson等。这些库可以实现JSON数据的解析、读取和写入操作,提供了方便的API。 3. 数据转换:根据具体的深度学习任务,可以将JSON数据转化为适用于深度学习模型的输入格式。例如,可以将JSON中的标签信息转化为独热编码、数值特征等形式,以便输入到深度学习模型中进行训练。 4. 深度学习模型训练和预测:根据处理好的数据,可以利用深度学习框架(如TensorFlow、PyTorch)来构建、训练和评估模型。深度学习模型的训练过程一般包括前向传播、计算损失、反向传播等步骤。模型训练完成后,可以使用该模型对新的JSON数据进行预测和分类。 总之,深度学习和JSON的结合可以帮助我们更好地进行数据处理和模型训练。合理地转化JSON数据,将其应用于深度学习模型中,可以提高模型的效果和应用的可行性。 ### 回答2: 深度学习是一种机器学习的方法,它通过构建具有多个隐藏层的神经网络来模拟人类大脑的工作方式。Json是一种常用的数据格式,用于存储和传输结构化的数据。将Json标签转化为深度学习模型可以通过以下步骤实现: 首先,需要将Json数据转化为可以被深度学习模型处理的数据格式。可以使用Python中的json库来读取Json文件,并将其转化为可用于输入神经网络的数据结构,例如NumPy数组或Pandas DataFrame。 接下来,需要将Json标签进行编码。对于分类问题,可以使用独热编码或标签编码。独热编码将每个标签编码为一个二进制向量,其中只有一个元素为1,其余元素均为0。标签编码将每个标签编码为一个整数值。可以使用scikit-learn库中的LabelEncoder类来进行标签编码。 然后,需要将编码后的标签与相应的数据样本一起输入深度学习模型进行训练。可以使用各种深度学习框架,例如TensorFlow或PyTorch,来构建和训练深度学习模型。 在模型训练完成后,可以使用模型对新的Json标签进行预测。将新的Json数据转化为可用于输入模型的数据格式,并使用已经训练好的模型进行预测。预测结果可以是分类标签或概率值,取决于具体的深度学习模型和任务。 总而言之,深度学习可以通过将Json标签转化为可用于模型训练和预测的数据格式,来解决各种与Json数据相关的问题。这种转化过程可以通过适当的编码方法和深度学习框架来实现。 ### 回答3: 深度学习中,常常需要将数据以某种格式进行标签化,以便机器能够理解和处理。而JSON(JavaScript Object Notation)是一种常用的数据交换格式,它具有结构清晰、易于阅读和编写的特点,因此在深度学习中往往选择使用JSON进行数据标签转化。 在深度学习中,将数据转化为JSON标签可以按照以下步骤进行: 1. 确定数据的标签结构:根据数据的特点和需求,确定数据应该包含哪些标签和标签的层次结构。例如,对于图像数据,可以包含图像的类别、尺寸、通道等标签。 2. 使用编程语言解析数据:根据数据的格式,选择合适的编程语言和库来解析数据。常用的编程语言有Python和JavaScript,常用的库如jsonjsonlib等。 3. 将数据转化为JSON格式:根据标签结构和编程语言的语法,将数据转化为JSON格式。可以使用编程语言提供的函数和方法来实现这一步骤。一般来说,可以将数据转化为JSON对象或JSON数组的形式。 4. 验证JSON格式的正确性:在转化完成后,需要验证生成的JSON格式是否正确。可以使用在线的JSON格式验证工具或编程语言提供的JSON验证函数来进行验证。 5. 存储和使用JSON数据:将生成的JSON数据存储到文件或数据库中,以便之后的使用。在深度学习中,可以将JSON数据用作训练数据、验证数据或测试数据。 总之,深度学习中的JSON标签转化是将数据转化为JSON格式的一种方法,它可以方便地表示和传递复杂的数据结构,为机器学习算法提供输入。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值