Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv_contrib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv_contrib
Commits
071092d9
Commit
071092d9
authored
Aug 20, 2015
by
Vladimir
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added VOT2015 Dataset interface + VOT2015 sample cpp
parent
44e790b8
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
204 additions
and
202 deletions
+204
-202
track_vot.hpp
modules/datasets/include/opencv2/datasets/track_vot.hpp
+16
-10
track_vot.cpp
modules/datasets/samples/track_vot.cpp
+7
-5
track_vot.cpp
modules/datasets/src/track_vot.cpp
+181
-187
No files found.
modules/datasets/include/opencv2/datasets/track_vot.hpp
View file @
071092d9
...
...
@@ -44,9 +44,15 @@
#include <string>
#include <vector>
#include <map>
#include <iostream>
#include "opencv2/datasets/dataset.hpp"
#include "opencv2/datasets/util.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <sys/stat.h>
using
namespace
std
;
...
...
@@ -62,30 +68,30 @@ struct TRACK_votObj : public Object
{
int
id
;
std
::
string
imagePath
;
vector
<
Point2d
>
gtbb
;
vector
<
Point2d
>
gtbb
;
};
class
CV_EXPORTS
TRACK_vot
:
public
Dataset
{
public
:
static
Ptr
<
TRACK_vot
>
create
();
static
Ptr
<
TRACK_vot
>
create
();
virtual
void
load
(
const
std
::
string
&
path
)
=
0
;
virtual
int
getDatasetsNum
()
=
0
;
virtual
int
getDatasetsNum
()
=
0
;
virtual
int
getDatasetLength
(
int
id
)
=
0
;
virtual
int
getDatasetLength
(
int
id
)
=
0
;
virtual
bool
initDataset
(
int
id
)
=
0
;
virtual
bool
initDataset
(
int
id
)
=
0
;
virtual
bool
getNextFrame
(
Mat
&
frame
)
=
0
;
virtual
bool
getNextFrame
(
Mat
&
frame
)
=
0
;
virtual
vector
<
Point2d
>
getGT
()
=
0
;
virtual
vector
<
Point2d
>
getGT
()
=
0
;
protected
:
vector
<
vector
<
Ptr
<
TRACK_votObj
>
>
>
data
;
int
activeDatasetID
;
int
frameCounter
;
vector
<
vector
<
Ptr
<
TRACK_votObj
>
>
>
data
;
int
activeDatasetID
;
int
frameCounter
;
};
//! @}
...
...
modules/datasets/samples/track_vot.cpp
View file @
071092d9
...
...
@@ -55,6 +55,8 @@ using namespace std;
using
namespace
cv
;
using
namespace
cv
::
datasets
;
#define DATASET_ID 1
int
main
(
int
argc
,
char
*
argv
[])
{
const
char
*
keys
=
...
...
@@ -72,18 +74,18 @@ int main(int argc, char *argv[])
}
Ptr
<
TRACK_vot
>
dataset
=
TRACK_vot
::
create
();
dataset
->
load
(
path
);
dataset
->
load
(
"D:/opencv/VOT 2015"
);
printf
(
"Datasets number: %d
\n
"
,
dataset
->
getDatasetsNum
());
for
(
int
i
=
1
;
i
<=
dataset
->
getDatasetsNum
();
i
++
)
printf
(
"
\t
Dataset #%d size: %d
\n
"
,
i
,
dataset
->
getDatasetLength
(
i
));
dataset
->
initDataset
(
dataset
ID
);
dataset
->
initDataset
(
DATASET_
ID
);
for
(
int
i
=
0
;
i
<
dataset
->
getDatasetLength
(
dataset
ID
);
i
++
)
for
(
int
i
=
0
;
i
<
dataset
->
getDatasetLength
(
DATASET_
ID
);
i
++
)
{
Mat
frame
;
if
(
!
dataset
->
getNextFrame
(
frame
))
break
;
dataset
->
getNextFrame
(
frame
);
//Draw Ground Truth BB
vector
<
Point2d
>
gtPoints
=
dataset
->
getGT
();
for
(
int
j
=
0
;
j
<
(
int
)(
gtPoints
.
size
()
-
1
);
j
++
)
...
...
modules/datasets/src/track_vot.cpp
View file @
071092d9
...
...
@@ -41,196 +41,191 @@
#include "opencv2/datasets/track_vot.hpp"
#include <sys/stat.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using
namespace
std
;
namespace
cv
{
namespace
datasets
{
class
TRACK_votImpl
:
public
TRACK_vot
{
public
:
//Constructor
TRACK_votImpl
()
{
activeDatasetID
=
1
;
frameCounter
=
0
;
}
//Destructor
virtual
~
TRACK_votImpl
()
{}
//Load Dataset
virtual
void
load
(
const
string
&
path
);
protected
:
virtual
int
getDatasetsNum
();
virtual
int
getDatasetLength
(
int
id
);
virtual
bool
initDataset
(
int
id
);
virtual
bool
getNextFrame
(
Mat
&
frame
);
virtual
vector
<
Point2d
>
getGT
();
void
loadDataset
(
const
string
&
path
);
string
numberToString
(
int
number
);
};
void
TRACK_votImpl
::
load
(
const
string
&
path
)
{
loadDataset
(
path
);
}
string
TRACK_votImpl
::
numberToString
(
int
number
)
{
string
out
;
char
numberStr
[
9
];
sprintf
(
numberStr
,
"%u"
,
number
);
for
(
unsigned
int
i
=
0
;
i
<
8
-
strlen
(
numberStr
);
++
i
)
{
out
+=
"0"
;
}
out
+=
numberStr
;
return
out
;
}
inline
bool
fileExists
(
const
std
::
string
&
name
)
{
struct
stat
buffer
;
return
(
stat
(
name
.
c_str
(),
&
buffer
)
==
0
);
}
void
TRACK_votImpl
::
loadDataset
(
const
string
&
rootPath
)
{
string
nameListPath
=
rootPath
+
"/list.txt"
;
ifstream
namesList
(
nameListPath
.
c_str
());
vector
<
int
>
datasetsLengths
;
string
datasetName
;
if
(
namesList
.
is_open
())
{
int
currDatasetID
=
0
;
//All datasets/folders loop
while
(
getline
(
namesList
,
datasetName
))
{
currDatasetID
++
;
vector
<
Ptr
<
TRACK_votObj
>
>
objects
;
//All frames/images loop
Ptr
<
TRACK_votObj
>
currDataset
(
new
TRACK_votObj
);
//Open dataset's ground truth file
string
gtListPath
=
rootPath
+
"/"
+
datasetName
+
"/groundtruth.txt"
;
ifstream
gtList
(
gtListPath
.
c_str
());
if
(
!
gtList
.
is_open
())
printf
(
"Error to open groundtruth.txt!!!"
);
//Make a list of datasets lengths
int
currFrameID
=
1
;
if
(
currDatasetID
==
0
)
printf
(
"VOT 2015 Dataset Initialization...
\n
"
);
bool
trFLG
=
true
;
do
{
currFrameID
++
;
string
fullPath
=
rootPath
+
"/"
+
datasetName
+
"/"
+
numberToString
(
currFrameID
)
+
".jpg"
;
if
(
!
fileExists
(
fullPath
))
break
;
//Make VOT Object
Ptr
<
TRACK_votObj
>
currObj
(
new
TRACK_votObj
);
currObj
->
imagePath
=
fullPath
;
currObj
->
id
=
currFrameID
;
//Get Ground Truth data
double
x1
=
0
,
y1
=
0
,
x2
=
0
,
y2
=
0
,
x3
=
0
,
y3
=
0
,
x4
=
0
,
y4
=
0
;
string
tmp
;
getline
(
gtList
,
tmp
);
sscanf
(
tmp
.
c_str
(),
"%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf"
,
&
x1
,
&
y1
,
&
x2
,
&
y2
,
&
x3
,
&
y3
,
&
x4
,
&
y4
);
currObj
->
gtbb
.
push_back
(
Point2d
(
x1
,
y1
));
currObj
->
gtbb
.
push_back
(
Point2d
(
x2
,
y2
));
currObj
->
gtbb
.
push_back
(
Point2d
(
x3
,
y3
));
currObj
->
gtbb
.
push_back
(
Point2d
(
x4
,
y4
));
//Add object to storage
objects
.
push_back
(
currObj
);
}
while
(
trFLG
);
datasetsLengths
.
push_back
(
currFrameID
-
1
);
data
.
push_back
(
objects
);
}
}
else
{
printf
(
"Couldn't find a *list.txt* in VOT 2015 folder!!!"
);
}
namesList
.
close
();
return
;
}
int
TRACK_votImpl
::
getDatasetsNum
()
{
return
(
int
)(
data
.
size
());
}
int
TRACK_votImpl
::
getDatasetLength
(
int
id
)
{
if
(
id
>
0
&&
id
<=
(
int
)
data
.
size
())
return
(
int
)(
data
[
id
-
1
].
size
());
else
{
printf
(
"Dataset ID is out of range...
\n
Allowed IDs are: 1~%d
\n
"
,
(
int
)
data
.
size
());
return
-
1
;
}
}
bool
TRACK_votImpl
::
initDataset
(
int
id
)
{
if
(
id
>
0
&&
id
<=
(
int
)
data
.
size
())
{
activeDatasetID
=
id
;
return
true
;
}
else
{
printf
(
"Dataset ID is out of range...
\n
Allowed IDs are: 1~%d
\n
"
,
(
int
)
data
.
size
());
return
false
;
}
}
bool
TRACK_votImpl
::
getNextFrame
(
Mat
&
frame
)
{
if
(
frameCounter
>=
(
int
)
data
[
activeDatasetID
-
1
].
size
())
return
false
;
string
imgPath
=
data
[
activeDatasetID
-
1
][
frameCounter
]
->
imagePath
;
frame
=
imread
(
imgPath
);
frameCounter
++
;
return
!
frame
.
empty
();
}
Ptr
<
TRACK_vot
>
TRACK_vot
::
create
()
{
return
Ptr
<
TRACK_votImpl
>
(
new
TRACK_votImpl
);
}
vector
<
Point2d
>
TRACK_votImpl
::
getGT
()
{
Ptr
<
TRACK_votObj
>
currObj
=
data
[
activeDatasetID
-
1
][
frameCounter
-
1
];
return
currObj
->
gtbb
;
}
namespace
datasets
{
class
TRACK_votImpl
:
public
TRACK_vot
{
public
:
//Constructor
TRACK_votImpl
()
{
activeDatasetID
=
1
;
frameCounter
=
0
;
}
//Destructor
virtual
~
TRACK_votImpl
()
{}
//Load Dataset
virtual
void
load
(
const
string
&
path
);
virtual
int
getDatasetsNum
();
virtual
int
getDatasetLength
(
int
id
);
virtual
bool
initDataset
(
int
id
);
virtual
bool
getNextFrame
(
Mat
&
frame
);
virtual
vector
<
Point2d
>
getGT
();
private
:
void
loadDataset
(
const
string
&
path
);
string
numberToString
(
int
number
);
};
void
TRACK_votImpl
::
load
(
const
string
&
path
)
{
loadDataset
(
path
);
}
string
TRACK_votImpl
::
numberToString
(
int
number
)
{
string
out
;
char
numberStr
[
9
];
sprintf
(
numberStr
,
"%u"
,
number
);
for
(
unsigned
int
i
=
0
;
i
<
8
-
strlen
(
numberStr
);
++
i
)
{
out
+=
"0"
;
}
}
\ No newline at end of file
out
+=
numberStr
;
return
out
;
}
inline
bool
fileExists
(
const
std
::
string
&
name
)
{
struct
stat
buffer
;
return
(
stat
(
name
.
c_str
(),
&
buffer
)
==
0
);
}
void
TRACK_votImpl
::
loadDataset
(
const
string
&
rootPath
)
{
ifstream
namesList
(
rootPath
+
"/list.txt"
);
//ifstream lengthsList(rootPath + "/lengths.txt");
vector
<
int
>
datasetsLengths
;
string
datasetName
;
if
(
namesList
.
is_open
())
{
int
currDatasetID
=
0
;
//All datasets/folders loop
while
(
getline
(
namesList
,
datasetName
))
{
currDatasetID
++
;
vector
<
Ptr
<
TRACK_votObj
>
>
objects
;
//All frames/images loop
Ptr
<
TRACK_votObj
>
currDataset
(
new
TRACK_votObj
);
//Open dataset's ground truth file
ifstream
gtList
(
rootPath
+
"/"
+
datasetName
+
"/groundtruth.txt"
);
if
(
!
gtList
.
is_open
())
cout
<<
"Error to open groundtruth.txt!!!"
;
//Make a list of datasets lengths
int
currFrameID
=
1
;
if
(
currDatasetID
==
0
)
cout
<<
"VOT 2015 Dataset Initialization...
\n
"
;
do
{
currFrameID
++
;
string
fullPath
=
rootPath
+
"/"
+
datasetName
+
"/"
+
numberToString
(
currFrameID
)
+
".jpg"
;
if
(
!
fileExists
(
fullPath
))
break
;
//Make VOT Object
Ptr
<
TRACK_votObj
>
currObj
(
new
TRACK_votObj
);
currObj
->
imagePath
=
fullPath
;
currObj
->
id
=
currFrameID
;
//Get Ground Truth data
double
x1
=
0
,
y1
=
0
,
x2
=
0
,
y2
=
0
,
x3
=
0
,
y3
=
0
,
x4
=
0
,
y4
=
0
;
string
tmp
;
getline
(
gtList
,
tmp
);
sscanf
(
tmp
.
c_str
(),
"%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf"
,
&
x1
,
&
y1
,
&
x2
,
&
y2
,
&
x3
,
&
y3
,
&
x4
,
&
y4
);
currObj
->
gtbb
.
push_back
(
Point2d
(
x1
,
y1
));
currObj
->
gtbb
.
push_back
(
Point2d
(
x2
,
y2
));
currObj
->
gtbb
.
push_back
(
Point2d
(
x3
,
y3
));
currObj
->
gtbb
.
push_back
(
Point2d
(
x4
,
y4
));
//Add object to storage
objects
.
push_back
(
currObj
);
}
while
(
true
);
datasetsLengths
.
push_back
(
currFrameID
-
1
);
data
.
push_back
(
objects
);
}
}
else
{
cout
<<
rootPath
+
"Couldn't find a *list.txt* in VOT 2015 folder!!!"
;
}
namesList
.
close
();
return
;
}
int
TRACK_votImpl
::
getDatasetsNum
()
{
return
data
.
size
();
}
int
TRACK_votImpl
::
getDatasetLength
(
int
id
)
{
if
(
id
>
0
&&
id
<=
(
int
)
data
.
size
())
return
data
[
id
-
1
].
size
();
else
{
cout
<<
"Dataset ID is out of range...
\n
"
<<
"Allowed IDs are: 1~"
<<
(
int
)
data
.
size
()
<<
endl
;
return
-
1
;
}
}
bool
TRACK_votImpl
::
initDataset
(
int
id
)
{
if
(
id
>
0
&&
id
<=
(
int
)
data
.
size
())
{
activeDatasetID
=
id
;
return
true
;
}
else
{
cout
<<
"Dataset ID is out of range...
\n
"
<<
"Allowed IDs are: 1~"
<<
(
int
)
data
.
size
()
<<
endl
;
return
false
;
}
}
bool
TRACK_votImpl
::
getNextFrame
(
Mat
&
frame
)
{
frame
=
imread
(
data
[
activeDatasetID
-
1
][
frameCounter
]
->
imagePath
);
frameCounter
++
;
return
!
frame
.
empty
();
}
Ptr
<
TRACK_vot
>
TRACK_vot
::
create
()
{
return
Ptr
<
TRACK_votImpl
>
(
new
TRACK_votImpl
);
}
vector
<
Point2d
>
TRACK_votImpl
::
getGT
()
{
Ptr
<
TRACK_votObj
>
currObj
=
data
[
activeDatasetID
-
1
][
frameCounter
-
1
];
return
currObj
->
gtbb
;
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment