提取xml文件中某个特征对应的图片

"""
 提取xml文件中某个特征对应的图片
    分标签写入txt
    分标签存图
"""
import os
import xml.etree.ElementTree as ET
import shutil


# 查询xml文件中的类别 和 对应的路径
def find_label_path(path, label_list):
    """
    :param path:        xml文件路径
    :param label_list:  标签列表
    :return:            {标签1:[图片路径1...],标签2:[图片路径2...]}
    """
    label_path_dict = {}  # 存储类别,路径字典
    for c in label_list:
        label_path_dict[c] = []
    file_list = os.listdir(path)
    for file in file_list:
        if file.split('.')[1] == 'xml':  # 筛选xml文件
            in_file = open(path + file)  # 读取xml
            tree = ET.parse(in_file)  # 创建xml文件的ET对象
            root = tree.getroot()
            for obj in root.iter('object'):
                label = obj.find('name').text  # 查找类别
                if label in label_list:  # 判断类别
                    for i in root.iter('path'):  # 查找图片路径
                        img_path = i.text
                        label_path_dict[label].append(img_path)
    return label_path_dict


# 根据类别和路径字典  # 把路径写入对应txt文件
def run_txt(path, label_list, save_path):
    """
    :param path:        xml文件路径
    :param label_list:  标签列表
    :param save_path:   文件存储路径
    """
    label_path_dict = find_label_path(path, label_list)
    for label in label_list:  # 重新打开文件并格式化文件
        if os.path.exists(os.getcwd() + f'/{save_path}/{label}' + '.txt'):
            with open(os.getcwd() + f'/{save_path}/{label}' + '.txt', 'w') as f:
                pass
    for label, path_list in label_path_dict.items():
        for path in path_list:
            with open(os.getcwd() + f'/{save_path}/{label}' + '.txt', 'a') as f:
                f.write(f'{label},{path}' + '\n')
            print(f'{label}中写入{path}')


# 根据类别和路径字典 # 把不同类别图片放入各类别文件夹
def run_dir(path, label_list, save_path):
    """
    :param path:        xml文件路径
    :param label_list:  标签列表
    :param save_path:   文件存储路径
    """
    cls_path_dict = find_label_path(path, label_list)
    # for cls in cls_path_dict.keys():
    #     shutil.rmtree(f'./divided_images/{cls}')  # 删除
    for label, img_path_list in cls_path_dict.items():
        os.makedirs(f'./{save_path}/{label}', exist_ok=True)  # 生成文件夹
        label_path = f'./{save_path}/' + label
        for img_path in img_path_list:
            # shutil.move(img_path, cls_path)   # 移动图片
            shutil.copy(img_path, label_path)  # 复制图片
            print(f'{label}中存入{img_path}')


# 计算列表数量,以及多标签的图片
def find_dul_labels(path, label_list):
    """
    :param path:        xml文件路径
    :param label_list:  标签列表
    """
    label_path_dict = find_label_path(path, label_list)
    dict_path = {}  # 以路径为键,标签为值创建字典
    print('**' * 40)
    print('Labels Numbers:')
    total = 0
    for k, v in label_path_dict.items():
        print(k, len(v))
        total += len(v)
        for path in v:
            if path in dict_path:
                dict_path[path].append(k)  # 路径存在则说明多标签
            else:
                dict_path[path] = [k]
    print('Total Labels:', total)
    print('Actual XML Label Files:', len(dict_path.keys()))
    print('Images Dulplicate Labels:')
    for k, v in dict_path.items():
        if len(v) > 1:
            print(k, v)


if __name__ == '__main__':
    path = './test/xml/'  # xml所在文件夹 # 末尾的/不要忘记
    label_list = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']  # 类别列表
    save_path = './divided_images'  # 创建文件存储路径
    os.makedirs(save_path, exist_ok=True)
    run_txt(path, label_list, save_path)  # 路径存入对应txt
    run_dir(path, label_list, save_path)  # 图片存入对应文件夹
    find_dul_labels(path, label_list)  # 计数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最近的项目要用到全国省市数据,于是到网上找了一些。可是下载下来看一下,格式都不是我想要的。基本上都是分表的,省、市分开保存,有的还有地区表。而自己想要一个表的,或者是一个xml,或者是一个Json。 搜索过程,找到了国家统计局的省市数据,看页面简单,正好最近在弄数据采集。以其下载别人的,还要扣金币、不如自己采集吧,一方面练习,另一方面也上传供下载,赚些金币,嘿嘿。 好了,牢骚说完了,说正事。 数据来源与国家统计局网站,网址是:http://www.stats.gov.cn/tjbz/xzqhdm/t20090626_402568086.htm (这些数据还包含了行政区域代码,就是身份证号码前6位,可以用来查询身份证归属地^_^) 这个页面数据是有规律的,每个省份包含在 标签内,而城市和地区则用分隔 我是的采集正则表达式是:(|)(\d{6})(\s*)([^<]*) 这里有几个地方需要注意,其实是他们发布数据时的一点点不规则的地方: 1.宁夏回族自治区, 开始时多了个 。上面说了省份是包含在 标签内,所以这个情况如果想只找出省份的话,用 是匹配不到的 2.有些地方的空格是用  ,有的地方是全角空格,有的地方是用半角空格,如果有用到空格的地方就注意一下咯,我在保存 xml 和 Json 时,就用到了空格,所以我都做替换了 要注意的就这两点而已,好了,我会把这段文字和 xml、Json 一起打包上传。 压缩包里面是全部写好的,可以直接用。 评论返还全部分数哦。
自动提取国知网文章信息,导入服务器数据库。 鉴于多数文期刊网用户朋友对文文献的使用习惯,致力于帮助用户们更加方便的管理机器上的CNKI文献,该文献的特点是: a) CAJViewer软件能打开的文献格式,包括以nh/caj/kdh等后缀结尾的文件格式。 b) 文件本身以包含文章唯一标识符DOI信息结尾的XML的ASCII字符串,通过Editplus等文本查看软件可以验证。 c) 这类文章通过用户的甄别应该归属于同一个专题,这个专题可以是某一个用户关心的研究热点,也可以是某个学科的大牛们做的文章,文章获取的方式可以是多样的,只要按照逻辑关系放到一个署名的文件夹之即可。 比如作者对《GIS矢量数据质量检查》方面的问题比较感兴趣,可能在国知网下按照关键词查询到相关文献,并通过引用追踪,下载了几百篇文献,置于一个《GIS矢量数据质量检查论文集》文件,即属于该种类型的文献管理问题。 针对该类文献管理问题,作者设计了从文献抽取DOI标识符,通过国知网数据库文献检索入口,传入DOI信息定位到该文献的元数据页面,也即详细说明页面,该页面如图1所示,其地址是:http://rss.cnki.net/rss/Getinfobydoi.aspx?doi=CNKI:SUN:CHKD.0.2007-06-011 通过一定的过滤方法将文献的基本信息提取如下: 【标 题】:DEM空间数据抗差内插模型及其分析 【作 者】:张菊清 陈再辉 魏建忠 【关键词】:加权平均法 抗差内插法 DEM 【单 位】:长安大学地质与测绘学院 长安大学地质与测绘学院 三明市国土资源规划所 【标识符】:CNKI:SUN:CHKD.0.2007-06-011 【摘 要】:DEM格网数据的生成一般采用加权平均法,但当采样点数据受异常误差污染时,加权平均法将严重弯曲DEM格网成果。基于抗差估计原理的DEM格网生成方法能够有效地抵制异常误差的影响。本文讨论了抗差内插法,并与常规的加权平均法进行了比较分析,通过实例验证了该方法的抗差能力,证明了新方法的有效性。 提取后的信息被传送到对应的数据库里边,以备查询和浏览之用,展示界面如图2所示。目前采用的数据库是开源数据库PostgresSQL,通过扩展可以支持更多的数据库,这个视需求而定,该数据库即可满足个人文献管理和局域网小组文献管理需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值