el-upload上传多条一次性上传

el-upload上传多条一次性上传,第1张

<el-upload

              class="specialinput"

              ref="毕前薯upload"

              multiple

              :limit="4"

              :on-preview="handlePreview"

              :on-change="handleChange"

              :on-remove="handleRemove"

              :on-exceed="handleExceed"

              :file-list="imgList"

               list-type="picture-card"

              :http-request="uploadFile"

              :auto-upload="false">

              <i class="el-icon-plus"></i>

            </el-upload>

      // 上传文件

      uploadFile(file) {

         this.fileData.append('files', file.file)// append增加数据

      },

    // 上传到服务器

    submitUpload() {

      if (this.imgList.length === 0) {

        this.$message({

        message: '请先选择文件',

        type: 'warning'

        })

      } else {

      const isLt100M = this.imgList.every(file =>file.size / 1024 / 1024 <100)

      if (!isLt100M) {

        this.$message.error('请检查,上传文件大小不能超过100MB!')

      } else {

        this.fileData = new FormData()// new formData对象

        this.$refs.upload.submit()// 提交调用uploadFile函数

        this.$axiosPost(

          this.paidanurl + this.paidanport + '/api/Dispatch/UploadImage?flowid='+ this.operaInfo.flowid + '&recordid=' +  this.recordid,this.fileData,function(data) {

            if (data.Code == 1) {

                this.imgList = []

                this.$message.success(data.Message)

            } else {

              this.$message.error(data.Message)

            }

          },

          function(error) {

          }

        )

        }

 手者     }

    },

    //移除

    handleRemove(file, imgList) {

      this.imgList = imgList

    },

    // 选取文件超过数量提示

    handleExceed(files, imgList) {

      this.$message.warning(`当前限制选择 4 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + imgList.length} 个文件`)

    },

    //监控上传文件列表

    handleChange(file, imgList) {

      let existFile = imgList.slice(0, imgList.length - 1).find(f =>f.name === file.name)

      if (existFile) {

 悔知     this.$message.error('当前文件已经存在!')

      imgList.pop()

      }

      this.imgList = imgList

      }

    }

ToolBar中各激旦州功能键需要用到的 图片,是通过ImgList 控件加载和管理的 。

如:在ToolBar 中增加 两个按钮,该按钮需要图像显示

首先在ImgList 控件中添加需要的 图像文件(最好是ICO文件或小的BMP文件)

在ToolBar 控件属性中关联ImgList 控件

然后在 ToolBar 中添加按钮,在迟历 该按钮属性(激活,非激活状态分别选择需要显示的图像,这里明蔽只选择图像的 索引编号,即 0,1,2,3...)

确认后,运行,就可以看到,鼠标移动到 该按钮和 离开时图像的 变化了 。

          1. 读取图片和标注后的xml文件,将标注信息写到txt文件中。生成的txt文件在txt文件夹下面,可以直接用于yolo3等目标检测算法的训练。

            2. txt文件包含图片的路径,标注框的位置和大小,以及标注的类别。

            3. 分割标注的图片,可以用于行人属性识别。分割的图片保存在segmentation文件夹下。

           1. 需要将数据集放在dataset路径下。

            2. Annotations存放的是xml文件,JPEGImages存放的是图片。

修改:需要针对需要进行适当的修改。下面进行说明:

第一:

class_tab={

"human":1  ##这个是类别,如果有多个类别,可以添加多条

}

第二:

params={"xml_prefix":"./dataset/Annotations/", ##这个是xml源文件的路径前缀,注意末尾要有“/”

        "img_prefix":"./dataset/JPEGImages/",##这个是图片源文件的路径前缀,注意末尾要有“/”

        "seg_prefix":"./segmentation/",##这个是分割后图片存放的位置前缀,注意末尾要有“/”

      }

第三:

f = open('手祥./txt/train.txt','a')##这个是生成的txt文件的路径。

import sys

#sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

import cv2

import os

from readxml import *

class_tab={

"humanimport sys

#sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

import cv2

import os

from readxml import *

class_tab={

"human":1

}

params={"xml_prefix":"./dataset/Annotations/",

        "img_prefix":"./dataset/JPEGImages/",

        "seg_prefix":"./segmentation/",

      }

def write_line(f, img_path, boxes):

    f.write("%s "%(img_path))

    for box in boxes:

      f.write(str(box['cls'])+",")

      f.write(str(box['xmin']+","))

      f.write(str(box['ymin']+","))

      f.write(str(box['xmax']+","))

      f.write(str(box['ymax']))

      f.write(" ")

    f.write("\n")

    f.flush()

def segment(img_path, imgname, boxes):

    img=cv2.imread(img_path, cv2.IMREAD_COLOR)

    cnt=0

    for box in boxes:

          seg=img[int(box['ymin']):int(box["ymax"]), int(box["xmin"]):int(box["xmax"]),:]

          cv2.imwrite(params["seg_prefix"]+imgname+"_"+str(cnt)+".jpg", seg)

          cnt=cnt+1

def main():

    f = open('./txt/train.txt','a')

 毕薯滚   img_list=os.listdir(params["img_prefix"])

    for il in img_list:

        img_path=params["img_prefix"]+il

        tokens=il.split(".")

        xml_path=params["xml_prefix"]+tokens[0]+"手余.xml"

        if os.path.isfile(img_path)==False:

            raise ValueError("%s does not exits!"%img_path)

        else:

            print("reading:", img_path)

            boxes=xml_reader(xml_path, class_tab)

            write_line(f,img_path,boxes)

            segment(img_path, tokens[0], boxes)

    f.close()

if __name__ == '__main__':

    main()

":1

}

params={"xml_prefix":"./dataset/Annotations/",

        "img_prefix":"./dataset/JPEGImages/",

        "seg_prefix":"./segmentation/",

      }

def write_line(f, img_path, boxes):

    f.write("%s "%(img_path))

    for box in boxes:

      f.write(str(box['cls'])+",")

      f.write(str(box['xmin']+","))

      f.write(str(box['ymin']+","))

      f.write(str(box['xmax']+","))

      f.write(str(box['ymax']))

      f.write(" ")

    f.write("\n")

    f.flush()

def segment(img_path, imgname, boxes):

    img=cv2.imread(img_path, cv2.IMREAD_COLOR)

    cnt=0

    for box in boxes:

          seg=img[int(box['ymin']):int(box["ymax"]), int(box["xmin"]):int(box["xmax"]),:]

          cv2.imwrite(params["seg_prefix"]+imgname+"_"+str(cnt)+".jpg", seg)

          cnt=cnt+1

def main():

    f = open('./txt/train.txt','a')

    img_list=os.listdir(params["img_prefix"])

    for il in img_list:

        img_path=params["img_prefix"]+il

        tokens=il.split(".")

        xml_path=params["xml_prefix"]+tokens[0]+".xml"

        if os.path.isfile(img_path)==False:

            raise ValueError("%s does not exits!"%img_path)

        else:

            print("reading:", img_path)

            boxes=xml_reader(xml_path, class_tab)

            write_line(f,img_path,boxes)

            segment(img_path, tokens[0], boxes)

    f.close()

if __name__ == '__main__':

    main()

from xml.dom.minidom import Document

import xml.etree.ElementTree as ET

def xml_reader(fname, cls_tab):###, classes_merge_list,classes_merged_name):

    in_file = open(fname)

    tree=ET.parse(in_file)

    root = tree.getroot()

    boxes=[]

    for item in root.iter('item'):

        cls = item.find('name').text

        if cls in cls_tab:

            bndbox = item.find('bndbox')

            b={

                "xmin": str(int(bndbox.find('xmin').text)),

                "ymin": str(int(bndbox.find('ymin').text)),

                "xmax": str(int(bndbox.find('xmax').text)),

                "ymax": str(int(bndbox.find('ymax').text)),

                "cls": cls_tab[cls]

                }

            boxes.append(b)

        else:

            continue

    return boxes

if __name__ == '__main__':

  cls_tab={"human":1}

  fname="/home/ta/Downloads/liqiming_label/dataset/Annotations/sa341.xml"

  box=xml_reader(fname, cls_tab)

  print(box)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12135304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存