blob: cd3ec4657c93cfe32d76074a3a7629aa2cec4d25 [file] [log] [blame]
Parker Schuhf2a34932019-02-16 20:39:19 -08001#include "aos/vision/image/image_dataset.h"
2
3#include <fstream>
4
5#include "aos/vision/image/image_types.h"
6
7namespace aos {
8namespace vision {
9
10namespace {
11std::string GetFileContents(const std::string &filename) {
12 std::ifstream in(filename, std::ios::in | std::ios::binary);
13 if (in) {
14 std::string contents;
15 in.seekg(0, std::ios::end);
16 contents.resize(in.tellg());
17 in.seekg(0, std::ios::beg);
18 in.read(&contents[0], contents.size());
19 in.close();
20 return (contents);
21 }
22 fprintf(stderr, "Could not read file: %s\n", filename.c_str());
23 exit(-1);
24}
25
26std::vector<std::string> Split(DataRef inp, char delim) {
27 size_t i = 0;
28 std::vector<size_t> pos;
29 while (i < inp.size()) {
30 i = inp.find(delim, i);
31 if (i == std::string::npos) break;
32 // fprintf(stderr, "k=%d, i=%d\n", k, (int)i);
33 pos.emplace_back(i);
34 i = i + 1;
35 }
36 std::vector<std::string> res;
37 res.reserve(pos.size() + 1);
38 i = 0;
39 for (auto p : pos) {
40 res.emplace_back(inp.substr(i, p - i).to_string());
41 i = p + 1;
42 }
43 res.emplace_back(inp.substr(i).to_string());
44 return res;
45}
46} // namespace
47
48std::vector<DatasetFrame> LoadDataset(const std::string &jpeg_list_filename) {
49 std::vector<DatasetFrame> images;
50 auto contents = GetFileContents(jpeg_list_filename);
51
52 std::string basename;
53 auto it = jpeg_list_filename.find_last_of('/');
54 if (it != std::string::npos) {
55 basename = jpeg_list_filename.substr(0, it + 1);
56 }
57
58 for (const auto &jpeg_filename : Split(contents, '\n')) {
59 [&]() {
60 if (jpeg_filename.empty()) return;
61 for (std::size_t i = 0; i < jpeg_filename.size(); ++i) {
62 if (jpeg_filename[i] == '#') return;
63 if (jpeg_filename[i] != ' ') break;
64 }
65 bool is_jpeg = true;
66 size_t l = jpeg_filename.size();
67 if (l > 4 && jpeg_filename[l - 1] == 'v') {
68 is_jpeg = false;
69 }
70 if (jpeg_filename[0] == '/') {
71 images.emplace_back(
72 DatasetFrame{is_jpeg, GetFileContents(jpeg_filename)});
73 } else {
74 images.emplace_back(
75 DatasetFrame{is_jpeg, GetFileContents(basename + jpeg_filename)});
76 }
77 }();
78 }
79
80 return images;
81}
82
83} // namespace vision
84} // namespace aos