HoviTron Video Pipeline
PoseTraces.cpp
1/* The copyright in this software is being made available under the BSD
2* License, included below. This software may be subject to other third party
3* and contributor rights, including patent rights, and no such rights are
4* granted under this license.
5*
6* Copyright (c) 2010-2018, ITU/ISO/IEC
7* All rights reserved.
8*
9* Redistribution and use in source and binary forms, with or without
10* modification, are permitted provided that the following conditions are met:
11*
12* * Redistributions of source code must retain the above copyright notice,
13* this list of conditions and the following disclaimer.
14* * Redistributions in binary form must reproduce the above copyright notice,
15* this list of conditions and the following disclaimer in the documentation
16* and/or other materials provided with the distribution.
17* * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
18* be used to endorse or promote products derived from this software without
19* specific prior written permission.
20*
21* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
25* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31* THE POSSIBILITY OF SUCH DAMAGE.
32*/
33
34/*
35Original authors:
36
37Universite Libre de Bruxelles, Brussels, Belgium:
38 Sarah Fachada, Sarah.Fernandes.Pinto.Fachada@ulb.ac.be
39 Daniele Bonatto, Daniele.Bonatto@ulb.ac.be
40 Arnaud Schenkel, arnaud.schenkel@ulb.ac.be
41
42Koninklijke Philips N.V., Eindhoven, The Netherlands:
43 Bart Kroon, bart.kroon@philips.com
44 Bart Sonneveldt, bart.sonneveldt@philips.com
45*/
46
47#include "../include/PoseTraces.h"
48
49#include <fstream>
50#include <regex>
51
52namespace rvs
53{
54 PoseTrace PoseTrace::loadFrom(std::istream & stream)
55 {
56 std::string line;
57 std::getline(stream, line);
58
59 std::regex re_header("\\s*X\\s*,\\s*Y\\s*,\\s*Z\\s*,\\s*Yaw\\s*,\\s*Pitch\\s*,\\s*Roll\\s*");
60 if (!std::regex_match(line, re_header)) {
61 throw std::runtime_error("Format error in the pose trace header");
62 }
63
64 PoseTrace trace;
65 std::regex re_row("([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)");
66 std::regex re_empty("\\s*");
67 bool trailing_empty_lines = false;
68
69 while (std::getline(stream, line)) {
70 std::smatch match;
71 if (!trailing_empty_lines && std::regex_match(line, match, re_row)) {
72 trace.push_back({
73 cv::Vec3f(
74 std::stof(match[1].str()),
75 std::stof(match[2].str()),
76 std::stof(match[3].str())),
77 cv::Vec3f(
78 std::stof(match[4].str()),
79 std::stof(match[5].str()),
80 std::stof(match[6].str()))
81 });
82 }
83 else if (std::regex_match(line, re_empty)) {
84 trailing_empty_lines = true;
85 }
86 else {
87 throw std::runtime_error("Format error in a pose trace row");
88 }
89 }
90
91 return trace;
92 }
93
94 PoseTrace PoseTrace::loadFromFile(std::string const& filename)
95 {
96 std::ifstream stream(filename);
97 if (!stream.good()) {
98 throw std::runtime_error("Failed to load pose trace");
99 }
100 return loadFrom(stream);
101 }
102}
static PoseTrace loadFrom(std::istream &stream)
Definition: PoseTraces.cpp:54
static PoseTrace loadFromFile(std::string const &filename)
Definition: PoseTraces.cpp:94