widerface数据库转voc2007数据集(python/matlab实现)

python实现基本需求,可以在此基础上修改

import h5py
from skimage import io
import shutil
import random

headstr = """<annotation>
    <folder>VOC2007</folder>
    <filename>%06d.jpg</filename>
    <source>
        <database>My Database</database>
        <annotation>PASCAL VOC2007</annotation>
        <image>flickr</image>
        <flickrid>NULL</flickrid>
    </source>
    <owner>
        <flickrid>NULL</flickrid>
        <name>facevise</name>
    </owner>
    <size>
        <width>%d</width>
        <height>%d</height>
        <depth>%d</depth>
    </size>
    <segmented>0</segmented>
"""
objstr = """    <object>
        <name>%s</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>%d</xmin>
            <ymin>%d</ymin>
            <xmax>%d</xmax>
            <ymax>%d</ymax>
        </bndbox>
    </object>
"""

tailstr =‘‘‘</annotation>
‘‘‘
def writexml(idx, head, objs, tail):
    filename = "Annotations/%06d.xml" % (idx)
    f = open(filename, "w")
    f.write(head)
    f.write(objs)
    f.write(tail)
    f.close()

def clear_dir():
    if shutil.os.path.exists(‘Annotations‘):
        shutil.rmtree(‘Annotations‘)
    if shutil.os.path.exists(‘ImageSets‘):
        shutil.rmtree(‘ImageSets‘)
    if shutil.os.path.exists(‘JPEGImages‘):
        shutil.rmtree(‘JPEGImages‘)

    shutil.os.mkdir(‘Annotations‘)
    shutil.os.makedirs(‘ImageSets/Main‘)
    shutil.os.mkdir(‘JPEGImages‘)

def excute_datasets(idx, datatype):
    f = open(‘ImageSets/Main/‘+datatype+‘.txt‘, ‘a‘)
    mat = h5py.File(‘wider_face_split/wider_face_‘+datatype+‘.mat‘, ‘r‘)
    file_list = mat[‘file_list‘][:]
    event_list = mat[‘event_list‘][:]
    bbx_list = mat[‘face_bbx_list‘][:]
    for i in range(file_list.size):
        file_list_sub = mat[file_list[0,i]][:]
        bbx_list_sub = mat[bbx_list[0, i]][:]
        event_value = ‘‘.join(chr(x) for x in mat[event_list[0,i]][:])
        for j in range(file_list_sub.size):
            root = ‘WIDER_‘+datatype+‘/images/‘+event_value+‘/‘
            filename = root + ‘‘.join([chr(x) for x in mat[file_list_sub[0, j]][:]])+‘.jpg‘
            im = io.imread(filename)
            head = headstr % (idx, im.shape[1], im.shape[0], im.shape[2])
            bboxes = mat[bbx_list_sub[0, j]][:]
            objs = ‘‘.join([objstr % (‘face‘,                    bboxes[0,k],bboxes[1,k], bboxes[0,k]+bboxes[2,k]-1,bboxes[1,k]+bboxes[3,k]-1)                    for k in range(bboxes.shape[1])])
            writexml(idx, head, objs, tailstr)
            shutil.copyfile(filename, ‘JPEGImages/%06d.jpg‘ % (idx))
            f.write(‘%06d\n‘ % (idx))
            idx +=1
    f.close()
    return idx
#打乱样本
def shuffle_file(filename):
    f = open(filename, ‘r+‘)
    lines = f.readlines()
    random.shuffle(lines)
    f.seek(0)
    f.truncate()
    f.writelines(lines)
    f.close()

if __name__ == ‘__main__‘:
    clear_dir()
    idx = 1
    idx = excute_datasets(idx, ‘train‘)
    idx = excute_datasets(idx, ‘val‘)

matlab实现

function WiderFace2VOC()
%% wider face
% The corresponding annotations are in the following format:
% Here, each face bounding boxe is denoted by:
% <x_left y_top width height>.

%% voc
% 000001.jpg car 44 28 132 121
%前面是图片名,中间是目标类别,最后是目标的包围框坐标(左上角和右下角坐标)。

%%
clc;
clear;
fclose all;
[~, ~, ~] = rmdir(‘Annotations‘, ‘s‘);
[~, ~, ~] = rmdir(‘ImageSets‘, ‘s‘);
[~, ~, ~] = rmdir(‘JPEGImages‘, ‘s‘);

[~, ~, ~] = mkdir(‘Annotations‘);
[~, ~, ~] = mkdir(‘ImageSets/Main‘);
[~, ~, ~] = mkdir(‘JPEGImages‘);

train_root = ‘WIDER_train/images‘;
split_file = ‘wider_face_split/wider_face_train‘;
data = load(split_file);

headXml = fopen(‘head.xml‘, ‘r‘);
headXmlFormat = fread(headXml, Inf, ‘*char‘);
fclose(headXml);

objectXml = fopen(‘object.xml‘, ‘r‘);
objectXmlFormat = fread(objectXml, Inf, ‘*char‘);
fclose(objectXml);

tailXml = fopen(‘tail.xml‘, ‘r‘);
tailXmlFormat = fread(tailXml, Inf, ‘*char‘);
fclose(tailXml);

trainID =  fopen(‘ImageSets/Main/train.txt‘, ‘w‘);
trainvalID =  fopen(‘ImageSets/Main/trainval.txt‘, ‘w‘);
valID =  fopen(‘ImageSets/Main/val.txt‘, ‘w‘);
testID =  fopen(‘ImageSets/Main/test.txt‘, ‘w‘);

idx = 1;
for i=1:numel(data.event_list)
    for j=1:numel(data.file_list{i})
        imagename = fullfile(train_root, data.event_list{i}, strcat(data.file_list{i}{j}, ‘.jpg‘));
        sz = size(imread(imagename));
        AnnotationsXml = fopen(sprintf(‘Annotations/%06d.xml‘, idx), ‘w‘);
        fprintf(AnnotationsXml, headXmlFormat, idx, sz(2), sz(1),sz(3));
        for k = 1:size(data.face_bbx_list{i}{j}, 1)
            rc = data.face_bbx_list{i}{j}(k, :);
            rc = round([rc(1), rc(2), rc(1)+rc(3)-1, rc(2)+rc(4)-1]);
            fprintf(AnnotationsXml, objectXmlFormat, ‘face‘, rc(1), rc(2), rc(3), rc(4));
        end
        fprintf(AnnotationsXml, tailXmlFormat);
        fprintf(trainID, ‘%06d\n‘, idx);
        fprintf(trainvalID, ‘%06d\n‘, idx);
        fclose(AnnotationsXml);
        copyfile(imagename, sprintf(‘JPEGImages/%06d.jpg‘, idx));
        idx = idx + 1;
    end
    disp(i);
end

train_root = ‘WIDER_val/images‘;
split_file = ‘wider_face_split/wider_face_val‘;
data = load(split_file);

for i=1:numel(data.event_list)
    for j=1:numel(data.file_list{i})
        imagename = fullfile(train_root, data.event_list{i}, strcat(data.file_list{i}{j}, ‘.jpg‘));
        sz = size(imread(imagename));
        AnnotationsXml = fopen(sprintf(‘Annotations/%06d.xml‘, idx), ‘w‘);
        fprintf(AnnotationsXml, headXmlFormat, idx, sz(2), sz(1),sz(3));
        for k = 1:size(data.face_bbx_list{i}{j}, 1)
            rc = data.face_bbx_list{i}{j}(k, :);
            rc = round([rc(1), rc(2), rc(1)+rc(3)-1, rc(2)+rc(4)-1]);
            fprintf(AnnotationsXml, objectXmlFormat, ‘face‘, rc(1), rc(2), rc(3), rc(4));
        end
        fprintf(AnnotationsXml, tailXmlFormat);
        if mod(idx, 2)
            fprintf(valID, ‘%06d\n‘, idx);
            fprintf(trainvalID, ‘%06d\n‘, idx);
        else
            fprintf(testID, ‘%06d\n‘, idx);
        end
        fclose(AnnotationsXml);
        copyfile(imagename, sprintf(‘JPEGImages/%06d.jpg‘, idx));
        idx = idx+1;
    end
    disp(i);
end
fclose(trainID);
fclose(trainvalID);
fclose(valID);
fclose(testID);
fclose all;
时间: 2024-12-17 13:42:37

widerface数据库转voc2007数据集(python/matlab实现)的相关文章

【转载】 Faster-RCNN+ZF用自己的数据集训练模型(Matlab版本)

说明:本博文假设你已经做好了自己的数据集,该数据集格式和VOC2007相同.下面是训练前的一些修改. (做数据集的过程可以看http://blog.csdn.net/sinat_30071459/article/details/50723212) Faster-RCNN源码下载地址: Matlab版本:https://github.com/ShaoqingRen/faster_rcnn Python版本:https://github.com/rbgirshick/py-faster-rcnn 本

Python/matlab实现KNN算法

Python 算法伪码: 对未知类别属性的数据集中的每个点依次执行以下操作: 1)计算已知类别数据集中的点与当前点之间的距离: 2)按照距离递增次序排序: 3)选取与当前点距离最小的k个点: 4)确定前k个点所在类别的出现频率: 5)返回前k个点出现频率最高的类别作为当前点的预测分类. 欧氏距离计算: (1)二维平面上两点xA(x1,y1)与xB(x2,y2)间的欧氏距离: (2)三维空间两点xA(x1,y1,z1)与xB(x2,y2,z2)间的欧氏距离: (3)两个n维向量xA(x11,x12

MySQL---连接器(python如何操作数据库媒介,基于python语言)

MySQL — 连接器 连接器的概念 它们往往是一类Python包,或者是一类已经写好的Python库.这些库提供了我们Python去连接数据库服务器的基本功能. ? 既然它是一个包,那么我们首先学会导入这个包 #! /usr/bin/env python3 # coding: utf-8 ? from mysql import connector print('导入成功') 执行以上代码 $ python3 test_connector.py 导入成功 表示我们成功导入了相关的包或者模块 连接

数据库大作业--由python+flask

这个是项目一来是数据库大作业,另一方面也算是再对falsk和python熟悉下,好久不用会忘很快. 界面相比上一个项目好看很多,不过因为时间紧加上只有我一个人写,所以有很多地方逻辑写的比较繁琐,如果是想学习flask还是推荐之前的项目,地址:http://www.cnblogs.com/INnoVationv2/p/5837495.html 寒假回去我会重构下代码,然后再po出来. 不知道怎么做数据库大作业的也可以参考: 所有功能: 三类用户模式: 一.管理员 1.查看所有档案 2.修改档案信息

[python][matlab]使用python调用matlab程序

问题引入 在做实验的时候,需要用到python和matlab工具来进行不同的处理,比如在run神经网络的时候,需要使用pytorch框架得到网络的各个参数,在得到参数后需要使用matlab进行聚类规划.之前的做法是用python脚本耦合其联系,两者通信的方式是通过文件.后来发现matlab有针对于python的api引擎,瞬间感觉打开了新世界的大门,只需要在python中调用相关的api,就可以完成matlab的工作,再也不用一个一个复制文件了. 解决思路 首先,我安装的是matlab R201

非链接方式访问数据库--查询的数据集用Dataset来存储。

private void Button_Click_1(object sender, RoutedEventArgs e) { //非链接方式访问数据库, //1创建连接对象(连接字符串) using (SqlConnection conn = new SqlConnection(SQLHelper.ConnectionString)) { //2.创建数据适配器对象 using (SqlDataAdapter sda = new SqlDataAdapter("select * from St

分类之数据集导入matlab方法

读取UCI数据集iris.data中数据: >> [attrib1, attrib2, attrib3, attrib4, class] = textread('data\iris.data', '%f%f%f%f%s', 'delimiter', ','); >> attrib = [attrib1'; attrib2'; attrib3'; attrib4']'; >> a = zeros(150, 1); >> a(strcmp(class, 'Iri

关于spring jdbc 查询mysql数据库时,数据集字段名有别名返回的不是别名而是原始字段名

select语句字段含有别名 eg:select xm fullname from t_user; JdbcTemplate查询返回的结果集 xm '张三' 'xxx' 'xxxx' 期待结果是: fullname '张三' 'xxx' 'xxx' 解决办法:在数据库链接url后面跟上?useOldAliasMetadataBehavior=true

Faster-RCNN+ZF用自己的数据集训练模型(Python版本)

说明:本博文假设你已经做好了自己的数据集,该数据集格式和VOC2007相同.下面是训练前的一些修改. (做数据集的过程可以看这里) Faster-RCNN源码下载地址: Matlab版本:https://github.com/ShaoqingRen/faster_rcnn Python版本:https://github.com/rbgirshick/py-faster-rcnn 本文用到的是Python版本,在Linux下运行. 准备工作: 1.配置caffe 这个不多说,网上教程很多. 2.其