-
Notifications
You must be signed in to change notification settings - Fork 36
/
aer_viewer.cpp
85 lines (72 loc) · 3.17 KB
/
aer_viewer.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
(C) Copyright 2012 CEA LIST. All Rights Reserved.
Contributor(s): Olivier BICHLER ([email protected])
This software is governed by the CeCILL-C license under French law and
abiding by the rules of distribution of free software. You can use,
modify and/ or redistribute the software under the terms of the CeCILL-C
license as circulated by CEA, CNRS and INRIA at the following URL
"http://www.cecill.info".
As a counterpart to the access to the source code and rights to copy,
modify and redistribute granted by the license, users are provided only
with a limited warranty and the software's author, the holder of the
economic rights, and the successive licensors have only limited
liability.
The fact that you are presently reading this means that you have had
knowledge of the CeCILL-C license and that you accept its terms.
*/
#include "N2D2.hpp"
#include "Xnet/Aer.hpp"
#include "Xnet/Environment.hpp"
#include "Xnet/Network.hpp"
#include "Transformation/FilterTransformation.hpp"
#include "utils/ProgramOptions.hpp"
using namespace N2D2;
int main(int argc, char* argv[])
{
// Program command line options
ProgramOptions opts(argc, argv);
const unsigned int sizeX
= opts.parse("-sx", 128U, "environment input width");
const unsigned int sizeY
= opts.parse("-sy", 128U, "environment input height");
const bool dvs128
= opts.parse("-dvs128", true, "AER file is in DVS128 format");
const std::string outputVideo = opts.parse<std::string>(
"-o", "", "save AER sequence to output video");
const bool accDiff
= opts.parse("-diff", true, "conversion difference accumulation");
const double threshold = opts.parse("-thres", 0.01, "conversion threshold");
const unsigned int fps
= opts.parse("-fps", 25, "conversion frame per second (fps)");
const std::string videoFile = opts.grab<std::string>(
"<video file>", "AER file to read or video file to convert to AER");
opts.done();
Network net;
std::shared_ptr
<Environment> env(new Environment(net, EmptyDatabase,
{sizeX, sizeY, 1}));
if (accDiff) {
env->addChannelTransformation(FilterTransformationAerPositive);
env->addChannelTransformation(FilterTransformationAerNegative);
} else {
env->addChannelTransformation(FilterTransformationLaplacian);
env->addChannelTransformation(-FilterTransformationLaplacian);
}
// Fix issue "Cannot run aer_viewer #33"
fedisableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW);
Aer aer(env);
if (Utils::fileExtension(videoFile) != "dat") {
aer.loadVideo(videoFile,
fps,
threshold,
(accDiff) ? Aer::AccumulateDiff : Aer::Accumulate);
const std::string aerFile = Utils::fileBaseName(videoFile) + ".dat";
aer.viewer(aerFile, AerEvent::N2D2Env, "", 0, outputVideo);
} else
aer.viewer(videoFile,
(dvs128) ? AerEvent::Dvs128 : AerEvent::N2D2Env,
"",
0,
outputVideo);
return 0;
}