# -*- coding:utf8 -*-import osclass BatchRename():'''批量重命名文件夹中的图片文件'''def __init__(self):self.path = 'D:/素材/污损纸张'  #表示需要命名处理的文件夹 D:\素材\垃圾桶def rename(self):filelist = os.listdir(self.path) #获取文件路径total_num = len(filelist) #获取文件长度(个数)i = 1  #表示文件的命名是从1开始的for item in filelist:if item.endswith('.jpg'):  #初始的图片的格式为jpg格式的(或者源文件是png格式及其他格式,后面的转换格式就可以调整为自己需要的格式即可)src = os.path.join(os.path.abspath(self.path), item)dst = os.path.join(os.path.abspath(self.path), 'wl_stained_paper' + '0000' + format(str(i), '0>3s') + '.jpg')#处理后的格式也为jpg格式的,当然这里可以改成png格式#dst = os.path.join(os.path.abspath(self.path), '0000' + format(str(i), '0>3s') + '.jpg')    这种情况下的命名格式为0000000.jpg形式,可以自主定义想要的格式try:os.rename(src, dst)print ('converting %s to %s ...' % (src, dst))i = i + 1except:continueprint ('total %d to rename & converted %d jpgs' % (total_num, i))if __name__ == '__main__':demo = BatchRename()demo.rename()

画框

import os
import xml.dom.minidom
import cv2 as cvImgPath = '/home/liuyuankai/datasets/myNewVOC/VOC2007/JPEGImages/'  # 图片地址
AnnoPath = '/home/liuyuankai/datasets/myNewVOC/VOC2007/Annotations/'  # xml文件地址
save_path = './problem'def draw_anchor(ImgPath, AnnoPath, save_path):imagelist = os.listdir(ImgPath)for image in imagelist:image_pre, ext = os.path.splitext(image)imgfile = ImgPath + imagexmlfile = AnnoPath + image_pre + '.xml'# print(image)# 打开xml文档DOMTree = xml.dom.minidom.parse(xmlfile)# 得到文档元素对象collection = DOMTree.documentElement# 读取图片img = cv.imread(imgfile, cv.IMREAD_COLOR + cv.IMREAD_IGNORE_ORIENTATION)filenamelist = collection.getElementsByTagName("filename")filename = filenamelist[0].childNodes[0].dataprint(filename)# 得到标签名为object的信息objectlist = collection.getElementsByTagName("object")for objects in objectlist:# 每个object中得到子标签名为name的信息namelist = objects.getElementsByTagName('name')# 通过此语句得到具体的某个name的值objectname = namelist[0].childNodes[0].data# print(objectname)bndbox = objects.getElementsByTagName('bndbox')# print(bndbox)for box in bndbox:x1_list = box.getElementsByTagName('xmin')x1 = int(x1_list[0].childNodes[0].data)y1_list = box.getElementsByTagName('ymin')y1 = int(y1_list[0].childNodes[0].data)x2_list = box.getElementsByTagName('xmax')  # 注意坐标,看是否需要转换x2 = int(x2_list[0].childNodes[0].data)y2_list = box.getElementsByTagName('ymax')y2 = int(y2_list[0].childNodes[0].data)cv.rectangle(img, (x1, y1), (x2, y2), (255, 255, 255), thickness=2)cv.putText(img, objectname, (x1, y1), cv.FONT_HERSHEY_COMPLEX, 0.7, (0, 255, 0),thickness=2)# cv.imshow('head', img)cv.imwrite(save_path + '/' + image, img)  #if __name__ == "__main__":draw_anchor(ImgPath, AnnoPath, save_path)

制作coco数据集

# -*- coding=utf-8 -*-
# !/usr/bin/pythonimport os
import shutil
import numpy as np
import json
import xml.etree.ElementTree as ET
from tqdm.autonotebook import tqdm# 检测框的ID起始值
START_BOUNDING_BOX_ID = 0
# 类别列表无必要预先创建,程序中会根据所有图像中包含的ID来创建并更新
PRE_DEFINE_CATEGORIES = {}def get(root, name):vars = root.findall(name)return varsdef get_and_check(root, name, length):vars = root.findall(name)if len(vars) == 0:raise NotImplementedError('Can not find %s in %s.' % (name, root.tag))if length > 0 and len(vars) != length:raise NotImplementedError('The size of %s is supposed to be %d, but is %d.' % (name, length, len(vars)))if length == 1:vars = vars[0]return vars# 得到图片唯一标识号
def get_filename_as_int(filename):try:filename = os.path.splitext(filename)[0]return int(filename)except:raise NotImplementedError('Filename %s is supposed to be an integer.' % (filename))def convert(xml_list, xml_dir, json_file):''':param xml_list: 需要转换的XML文件列表:param xml_dir: XML的存储文件夹:param json_file: 导出json文件的路径:return: None'''ID = 0list_fp = xml_list# 标注基本结构json_dict = {"images": [],"type": "instances","annotations": [],"categories": []}categories = PRE_DEFINE_CATEGORIESbnd_id = START_BOUNDING_BOX_IDxmlHandleBar = tqdm(list_fp)for line in xmlHandleBar:xmlHandleBar.set_description("Processing %s" % line)line = line.strip()# 解析XMLxml_f = os.path.join(xml_dir, line)tree = ET.parse(xml_f)root = tree.getroot()path = get(root, 'path')# 取出图片名字filename = str(line).split('.')[0] + ".jpg"# if len(path) == 1:#     filename = get_and_check(root, 'filename', 1).text#lyk修改  old code: os.path.basename(path[0].text)# elif len(path) == 0:#     filename = get_and_check(root, 'filename', 1).text# else:#     raise NotImplementedError('%d paths found in %s'%(len(path), line))## The filename must be a numberID = ID + 1image_id = ID  # get_filename_as_int(filename)  # 图片ID# print("===>{}".format(image_id))size = get_and_check(root, 'size', 1)# 图片的基本信息width = int(get_and_check(size, 'width', 1).text)height = int(get_and_check(size, 'height', 1).text)image = {'file_name': filename,'height': height,'width': width,'id': image_id}json_dict['images'].append(image)## Cruuently we do not support segmentation#  segmented = get_and_check(root, 'segmented', 1).text#  assert segmented == '0'# 处理每个标注的检测框for obj in get(root, 'object'):# 取出检测框类别名称category = get_and_check(obj, 'name', 1).text# 更新类别ID字典if category not in categories:new_id = len(categories)categories[category] = new_idcategory_id = categories[category]bndbox = get_and_check(obj, 'bndbox', 1)xmin = int(get_and_check(bndbox, 'xmin', 1).text) - 1ymin = int(get_and_check(bndbox, 'ymin', 1).text) - 1xmax = int(get_and_check(bndbox, 'xmax', 1).text)ymax = int(get_and_check(bndbox, 'ymax', 1).text)assert (xmax > xmin)assert (ymax > ymin)o_width = abs(xmax - xmin)o_height = abs(ymax - ymin)annotation = dict()annotation['area'] = o_width * o_heightannotation['iscrowd'] = 0annotation['image_id'] = image_idannotation['bbox'] = [xmin, ymin, o_width, o_height]annotation['category_id'] = category_idannotation['id'] = bnd_idannotation['ignore'] = 0# 设置分割数据,点的顺序为逆时针方向annotation['segmentation'] = [[xmin, ymin, xmin, ymax, xmax, ymax, xmax, ymin]]json_dict['annotations'].append(annotation)bnd_id = bnd_id + 1# 写入类别ID字典for cate, cid in categories.items():cat = {'supercategory': 'none', 'id': cid, 'name': cate}json_dict['categories'].append(cat)# 导出到jsonjson_fp = open(json_file, 'w')json_str = json.dumps(json_dict, indent=4)json_fp.write(json_str)json_fp.close()if __name__ == '__main__':root_path = "/home/zhanglingyun/trainval/VOC2007/"saveto_path = "/home/zhanglingyun/retinanet/data/coco/images/"xml_dir = os.path.join(root_path, 'Annotations')xml_labels = os.listdir(os.path.join(root_path, 'Annotations'))np.random.shuffle(xml_labels)split_point = int(len(xml_labels) / 10)  # 用1/10的来做验证# validation dataprint("==========validation data===========")xml_list = xml_labels[0:split_point]json_file = '/home/zhanglingyun/retinanet/data/coco/annotations/instances_val2017.json'convert(xml_list, xml_dir, json_file)progress_bar_val = tqdm(xml_list)for xml_file in progress_bar_val:progress_bar_val.set_description("coping val  data...")img_name = xml_file[:-4] + '.jpg'shutil.copy(os.path.join(root_path, 'JPEGImages', img_name),os.path.join(saveto_path, 'val2017', img_name))# train dataprint("============train data=========")xml_list = xml_labels[split_point:]json_file = '/home/zhanglingyun/retinanet/data/coco/annotations/instances_train2017.json'convert(xml_list, xml_dir, json_file)progress_bar_train = tqdm(xml_list)for xml_file in progress_bar_train:progress_bar_train.set_description("coping train  data...")img_name = xml_file[:-4] + '.jpg'shutil.copy(os.path.join(root_path, 'JPEGImages', img_name),os.path.join(saveto_path, 'train2017', img_name))

1 图片的重命名 2 对xml文件的图片来进行画框 3 制作coco数据集相关推荐

  1. 图片批量重命名方法(超详细 无需辅助软件 本地运行)

    [检索关键词/句] 1. 按excel内容为图片批量重命名 2. bat文件运行解决 3. excel两列内容合并 6. bat文件运行中文乱码问题 5. 批量顺序重命名后阔号()问题 6. 班级资料 ...

  2. 如何对图片批量重命名?

    对于爱好摄影的朋友们来说,不管是手机还是相机拍摄的照片,在导入电脑后,它们的文件名通常都是一串长长的乱码.这不仅会导致桌面看起来杂乱无章,还会给我们查找图片带来很多不便,有时候丢失几张图片都发现不了. ...

  3. 快速收集图片并批量重命名(在线收集表、QQ收集表、腾讯收集表+方方格子)(图片批量重命名)

    很多人会遇到收集图片的问题,但是如果人数一多,工作量就特别大,每个图片重命名,会让你崩溃,因此很多人首先想到在线文档.不知道你们有没有测试过在线文档收集图片,效果真是惨不忍睹,别人的图片老是填错位置, ...

  4. 如何将图片批量重命名001开始?

    如何将图片批量重命名001开始?假设电脑里保存了很多的图片,这些图片的名称很乱,没有任何的规律,为了更好的对这些图片进行整理,也为了之后更好的查找图片,现在需要对这些文件以数字形式进行命名,如:001 ...

  5. 图片批量重命名编号,一键处理的方法!

    如果你是一名摄影师,又或者你是一名图片设计的工作人员,工作中肯定会面对很多图片文件,图片多了就需要进行整理,不然就很难区分和管理,就很不利于我们的使用.为了更好的整理往往我们就需要给图片进行重命名并且 ...

  6. OpenCV C++实现 图片批量重命名、格式转换

    方法一:以0~n数字序命名 方法二:指定字长 数字序命名 方法三:指定前缀 数字序重命名 全部源码下载 通常拍摄的一组数据集,图片命名会比较长,不方便人眼查看: 可以按照制定规则重命名, 本文方法,可 ...

  7. Ubuntu中图片批量重命名

    Ubuntu中图片批量重命名 图片后缀由jpg转png,但原文件中.jpg图片仍然存在 https://blog.csdn.net/qq_43493858/article/details/122998 ...

  8. 如何给图片批量重命名

    如何给图片批量重命名?电脑上的图片变多之后,就会杂乱无章,不能更好的保存和整理,尤其是图片的名称非常混乱的时候,丢失几张图片可能自己都不知道.如果你有点强迫症,是不能容忍这种事情发生的,必须要将所有图 ...

  9. 无法移动或重命名“Documents and Settings”文件夹

    无法移动或重命名"Documents and Settings"文件夹 察看本文应用于的产品 文章编号 : 236621 最后修改 : 2006年5月25日 修订 : 5.0 本文 ...

最新文章

  1. mac通过tree源码编译安装tree
  2. 秒杀(PHP,Redis,Lua)
  3. python怎么加图片_怎么在图片旁边加文字 python如何在图片上添加文字 - 励志 - 52资讯网...
  4. 程序无法启动ALL_BUILD 拒绝访问
  5. Mybatis实现CRUD操作
  6. W10关闭不必要的服务
  7. hbase 导入到es_HBase 实现数据同步 ElasticSearch
  8. POJ NOI MATH-7652 乘积最大的拆分
  9. openlayers之obj.js提供的功能函数
  10. 我想去做机器学习 接下来发一些机器学习实战的算法
  11. swagger连接mysql数据库_一键生成数据库文档,堪称数据库界的Swagger,有点厉害!...
  12. 规范并优化Nginx配置文件
  13. 并行计算、分布式计算、网格计算讲解
  14. python输入名字配对情侣网名_名字匹配情侣网名
  15. 前后端分离实现在线音乐网站-springboot+vue
  16. Android如何判定一张图片是不是灰度的
  17. 浅析资源调度框架YARN
  18. 根据传入日期 往前或者往后 顺延月份
  19. Java 递归算法详解
  20. 高并发秒杀系统如何设计?

热门文章

  1. Z600服务器是阵列硬盘,HP Z600 工作站 SATA硬盘AHCI配置RAID方法.doc
  2. 液晶显示器的参数说明-购买夜晶显示器指南
  3. ElasticSearch之查询性能分析
  4. kubeadm方式部署k8s集群(1.18版本,亲测可用)
  5. 债券交易日志12.24
  6. 【TASK】泰坦尼克项目
  7. PLSQL - Months_Between的理解和使用
  8. 从Discuz!NT项目文件结构看如何给系统框架分层和类库分文件夹
  9. Flutter Doctor : CocoaPods not installed
  10. 总结 SAP ERP相关概念