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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)