SOMHunter Core
query-types.h
Go to the documentation of this file.
1 /* This file is part of SOMHunter.
2  *
3  * Copyright (C) 2021 Frantisek Mejzlik <frankmejzlik@protonmail.com>
4  * Mirek Kratochvil <exa.exa@gmail.com>
5  * Patrik Vesely <prtrikvesely@gmail.com>
6  * Vit Skrhak <v.skrhak@gmail.com>
7  *
8  * SOMHunter is free software: you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License as published by the Free
10  * Software Foundation, either version 2 of the License, or (at your option)
11  * any later version.
12  *
13  * SOMHunter is distributed in the hope that it will be useful, but WITHOUT ANY
14  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU General Public License along with
19  * SOMHunter. If not, see <https://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef QUERY_TYPES_H_
23 #define QUERY_TYPES_H_
24 
25 #include <array>
26 #include <sstream>
27 #include <variant>
28 
29 #include <cereal/types/array.hpp>
30 #include <cereal/types/set.hpp>
31 #include <cereal/types/variant.hpp>
32 #include <json11.hpp>
33 
34 #include "common.h"
35 
36 #include "dataset-frames.h"
37 #include "utils.hpp"
38 
39 namespace sh {
42  std::array<bool, 7> _days;
43 
44 public:
46  WeekDaysFilter() { _days.fill(true); }
47 
49  WeekDaysFilter(uint8_t mask) {
50  // Set the according days, ignore the last 2 bits
51  for (size_t i{ 0 }; i < 7; ++i) {
52  _days[i] = utils::is_set(mask, i);
53  }
54  }
55 
56  const bool& operator[](size_t i) const { return _days[i]; }
57 
58  bool& operator[](size_t i) { return _days[i]; }
59 
60  bool operator==(const WeekDaysFilter& other) const { return (_days == other._days); }
61 
62  template <class Archive>
63  void serialize(Archive& archive) {
64  archive(_days);
65  }
66 };
67 
69 struct TimeFilter {
72 
74  TimeFilter() : from(0), to(24){};
76 
77  bool operator==(const TimeFilter& other) const { return (from == other.from && to == other.to); }
78 
79  template <class Archive>
80  void serialize(Archive& archive) {
81  archive(from, to);
82  }
83 };
84 
86 struct YearFilter {
89 
91  YearFilter() : from(2000), to(2021){};
93 
94  bool operator==(const YearFilter& other) const { return (from == other.from && to == other.to); }
95 
96  template <class Archive>
97  void serialize(Archive& archive) {
98  archive(from, to);
99  }
100 };
101 
103 struct Filters {
107  std::vector<bool> dataset_parts{ true, true };
108 
109  bool operator==(const Filters& other) const {
110  return (time == other.time && days == other.days && dataset_parts == other.dataset_parts &&
111  years == other.years);
112  }
113 
114  bool operator!=(const Filters& other) const { return !((*this) == other); }
115 
116  bool is_default() const {
117  return years == YearFilter{} && time == TimeFilter{} && days == WeekDaysFilter{} &&
118  dataset_parts == std::vector<bool>{ true, true };
119  }
120 
122  std::pair<FrameId, FrameId> get_dataset_parts_valid_interval(std::size_t num_total_frames) const {
123  std::size_t num_parts{ dataset_parts.size() };
124  do_assert(num_parts == 2, "Must be 2 intervals.");
125  do_assert(num_total_frames >= 2, "At least 2 frames to it.");
126 
127  auto base_size{ num_total_frames / num_parts };
128  auto rem{ num_total_frames % num_parts };
129 
130  return std::pair{ (dataset_parts[0] ? 0 : base_size + rem),
131  (dataset_parts[1] ? num_total_frames : base_size + rem) };
132  }
133 
134  template <class Archive>
135  void serialize(Archive& archive) {
136  archive(time, days, years);
137  }
138 };
139 
141  std::string _username;
142  std::string screenshot_filepath;
143  size_t srd_search_ctx_ID{ 0 };
144  std::string time_label;
145 
146  template <class Archive>
147  void serialize(Archive& archive) {
148  // Some of these dont matter in the future
149  archive(_username);
150  }
151 };
152 
154 
155 using TextualQuery = std::string;
156 
158 
159 struct RelativeRect {
161  float left, top, right, bottom;
162 
164  void to_full() {
165  left = 0;
166  top = 0;
167  right = 0;
168  left = 0;
169  }
170 
171  float width_norm() const {
172  do_assert_debug(right >= right, "");
173  return right - left;
174  };
175 
176  float height_norm() const {
177  do_assert_debug(bottom >= top, "");
178  return bottom - top;
179  };
180 
181  template <class Archive>
182  void serialize(Archive& archive) {
183  archive(left, top, right, bottom);
184  }
185 
186  bool operator==(const RelativeRect& b) const {
187  return left == b.left && top == b.top && right == b.right && bottom == b.bottom;
188  }
189 };
190 
192 protected:
194 
195 public:
196  CanvasSubqueryBase() = default;
198  // ---
200  void unposition() { _rect.to_full(); }
201  // ---
202  const RelativeRect& rect() const { return _rect; };
203 };
204 
207  size_t _width;
208  size_t _height;
209  std::vector<uint8_t> _data_int;
210 
211  // Unique prefix right here!
212  std::string jpeg_filename{ "canvas-query-bitmap_" + std::to_string(utils::irand(0, 1000)) + "_" +
213  std::to_string(utils::irand(0, 1000)) + "_" + std::to_string(utils::timestamp()) +
214  ".jpg" };
215 
216 public:
217  CanvasSubqueryBitmap() = default;
218  CanvasSubqueryBitmap(const RelativeRect& rect, size_t bitmap_w, size_t bitmap_h, size_t num_channels,
219  std::vector<std::uint8_t>&& _data)
222  _width{ bitmap_w },
223  _height{ bitmap_h },
224  _data_int{ std::move(_data) } {
225 
226  };
227 
228  size_t num_channels() const { return _num_channels; };
229  size_t width_pixels() const { return _width; };
230  size_t height_pixels() const { return _height; };
231  std::vector<uint8_t>& data() { return _data_int; };
232  const std::vector<uint8_t>& data() const { return _data_int; };
233  bool empty() const { return _data_int.empty(); }
234 
235  std::vector<uint8_t> get_scaled_bitmap(size_t w, size_t h) const;
236 
237  bool operator!=(const CanvasSubqueryBitmap& b) const { return !((*this) == b); }
238 
239  bool operator==(const CanvasSubqueryBitmap& b) const {
240  return _num_channels == b._num_channels && _width == b._width && _height == b._height &&
241  _data_int == b._data_int && _rect == b._rect;
242  }
243 
244  nlohmann::json to_JSON() const {
245  nlohmann::json res = { { "rect", nlohmann::json::array({ _rect.left, _rect.top, _rect.right, _rect.bottom }) },
246  { "bitmap_filename", jpeg_filename },
247  { "width_pixels", static_cast<int>(_width) },
248  { "height_pixels", static_cast<int>(_height) } };
249 
250  return res;
251  }
252 
253  template <class Archive>
254  void serialize(Archive& archive) {
256  }
257 
258  friend std::ostream& operator<<(std::ofstream& os, CanvasSubqueryBitmap x);
259 };
260 
261 inline std::ostream& operator<<(std::ofstream& os, CanvasSubqueryBitmap x) {
262  os << "---------------------------------" << std::endl;
263  os << "CanvasSubqueryBitmap: " << std::endl;
264  os << "---" << std::endl;
265 
266  os << "\t"
267  << "._rect = (" << x._rect.left << ", " << x._rect.top << ", " << x._rect.right << ", " << x._rect.bottom << ")"
268  << std::endl;
269  os << "\t"
270  << "._height = (" << x._height << std::endl;
271  os << "\t"
272  << "._width = (" << x._width << std::endl;
273 
274  return os;
275 }
276 
279 
280 public:
281  CanvasSubqueryText() = default;
283  : CanvasSubqueryBase{ rect }, _text_query{ utils::trim(query) } {}
284  // ---
285  const TextualQuery& query() const { return _text_query; };
286  bool empty() const { return _text_query.empty(); }
287 
288  nlohmann::json to_JSON() const {
289  nlohmann::json res = { { "rect", nlohmann::json::array({ _rect.left, _rect.top, _rect.right, _rect.bottom }) },
290  { "text_query", _text_query } };
291 
292  return res;
293  }
294  template <class Archive>
295  void serialize(Archive& archive) {
296  archive(_rect, _text_query);
297  }
298 
299  bool operator!=(const CanvasSubqueryText& b) const { return !((*this) == b); }
300 
301  bool operator==(const CanvasSubqueryText& b) const { return _text_query == b._text_query && _rect == b._rect; }
302 
303  friend std::ostream& operator<<(std::ofstream& os, CanvasSubqueryText x);
304 };
305 
306 inline std::ostream& operator<<(std::ofstream& os, CanvasSubqueryText x) {
307  os << "---------------------------------" << std::endl;
308  os << "CanvasSubqueryText: " << std::endl;
309  os << "---" << std::endl;
310 
311  os << "\t"
312  << "._rect = (" << x._rect.left << ", " << x._rect.top << ", " << x._rect.right << ", " << x._rect.bottom << ")"
313  << std::endl;
314  os << "\t"
315  << "._text_query = (" << x._text_query << std::endl;
316 
317  return os;
318 }
319 
320 using CanvasSubquery = std::variant<CanvasSubqueryBitmap, CanvasSubqueryText>;
321 
325 class CanvasQuery {
326  // *** METHODS ***
327 public:
329  void emplace_back(const RelativeRect& rect, const std::string& text_query);
330 
333  void emplace_back(const RelativeRect& rect, size_t bitmap_w, size_t bitmap_h, size_t num_channels,
334  uint8_t* bitmap_RGBA_data);
335 
336  size_t size() const { return _subqueries.size(); }
337  bool empty() const {
338  if (size() == 0)
339  return true;
340  else {
341  for (auto&& q : _subqueries) {
342  auto r = std::visit(overloaded{ [](auto q) { return q.empty(); } }, q);
343  if (r) return true;
344  }
345  }
346  return false;
347  }
348  const std::vector<CanvasSubquery>& subqueries() const { return _subqueries; };
349  std::vector<CanvasSubquery>& subqueries() { return _subqueries; };
350 
358  template <class Archive>
359  void serialize(Archive& archive) {
360  archive(_subqueries);
361  }
362 
363  nlohmann::json to_JSON() const;
364 
365  CanvasSubquery& operator[](size_t idx) { return _subqueries[idx]; }
366  const CanvasSubquery& operator[](size_t idx) const { return _subqueries[idx]; }
367 
369  static std::vector<CanvasQuery> parse_json(const std::string& filepath);
370 
372  static std::vector<CanvasQuery> parse_json_contents(const std::string& contents,
373  const std::filesystem::path parentPath);
374 
375  bool operator==(const CanvasQuery& b) const {
376  if (b.size() != size()) return false;
377 
378  for (size_t i = 0; i < size(); ++i) {
379  auto&& s1 = _subqueries[i];
380  auto&& s2 = b._subqueries[i];
381 
382  if (std::holds_alternative<CanvasSubqueryText>(s1) && std::holds_alternative<CanvasSubqueryText>(s2)) {
383  auto&& s1t = std::get<CanvasSubqueryText>(s1);
384  auto&& s2t = std::get<CanvasSubqueryText>(s2);
385  if (s1t != s2t) return false;
386  } else if (std::holds_alternative<CanvasSubqueryBitmap>(s1) &&
387  std::holds_alternative<CanvasSubqueryBitmap>(s2)) {
388  auto&& s1b = std::get<CanvasSubqueryBitmap>(s1);
389  auto&& s2b = std::get<CanvasSubqueryBitmap>(s2);
390  if (s1b != s2b) return false;
391  } else {
392  return false;
393  }
394  }
395 
396  return true;
397  }
398  // *** MEMBER VARIABLES ***
399 private:
401  std::vector<CanvasSubquery> _subqueries;
402 };
403 
405  // *** METHODS ***
406 public:
412  : textual{ tq }, canvas{ cq }, relocation{ rq } {}
413  // ---
414  bool score_secondary() const { return _score_secondary; }
415  void score_secondary(bool new_value) { _score_secondary = new_value; }
416  const bool is_relocation() const { return relocation != ERR_VAL<FrameId>(); }
417  const bool is_canvas() const { return !canvas.empty(); }
418  const bool is_text() const { return !is_relocation() && !textual.empty(); }
419  const bool empty() const {
420  return (relocation == ERR_VAL<RelocationQuery>()) && (utils::trim(textual).empty()) && canvas.empty();
421  }
422  const bool is_bitmap_canvas() const {
423  if (!is_canvas()) return false;
424 
425  const auto& sqs{ canvas.subqueries() };
426  return std::holds_alternative<CanvasSubqueryBitmap>(sqs.front());
427  }
428  const bool is_text_canvas() const {
429  if (!is_canvas()) return false;
430 
431  const auto& sqs{ canvas.subqueries() };
432  return std::holds_alternative<CanvasSubqueryText>(sqs.front());
433  }
434 
435  template <class Archive>
436  void serialize(Archive& archive) {
437  archive(textual, canvas, relocation);
438  }
439  // ---
440  // bool operator!=(const TemporalQuery& b) const { return !((*this) == b); }
441  bool operator==(const TemporalQuery& b) const {
442  return textual == b.textual && canvas == b.canvas && relocation == b.relocation &&
444  }
445 
446  nlohmann::json to_JSON() const {
447  nlohmann::json o = nlohmann::json::object();
448 
449  o["textual"] = textual;
450  o["canvas"] = canvas.to_JSON();
451 
452  if (relocation != ERR_VAL<RelocationQuery>()) {
453  o["relocation"] = relocation;
454  } else {
455  o["relocation"] = nullptr;
456  }
457 
458  return o;
459  }
460 
461  // *** MEMBER VARIABLES ***
462 public:
466  bool _score_secondary{ false };
467 };
468 
470 struct Query {
471  // *** METHODS ***
472 public:
473  Query() = default;
474  template <typename QueryType>
475  Query(const std::vector<QueryType>& temp_queries) : metadata{}, filters{}, relevance_feeedback{} {
476  for (auto&& q : temp_queries) {
477  auto& item{ temporal_queries.emplace_back(q) };
478  // Make sure correct scoring is set
479  item.score_secondary(_score_secondary);
480  }
481  }
482 
483  // ---
484 
485  const bool is_relocation() const {
486  for (auto&& t : temporal_queries) {
487  if (t.is_relocation()) return true;
488  }
489 
490  return false;
491  }
492  const bool score_secondary() const { return _score_secondary; }
493  void score_secondary(bool new_value) {
494  _score_secondary = new_value;
495  for (auto&& q : temporal_queries) {
496  q.score_secondary(new_value);
497  }
498  }
499  const bool is_canvas() const { return temporal_queries.front().is_canvas(); }
500  const bool is_bitmap_canvas() const { return temporal_queries.front().is_bitmap_canvas(); }
501  const bool is_text_canvas() const { return temporal_queries.front().is_text_canvas(); }
502  const bool is_temporal_text() const { return !is_relocation() && is_text() && temporal_queries.size() > 1; }
503  const bool is_text() const { return temporal_queries.front().is_text(); }
504  const bool empty() const {
505  for (auto&& q : temporal_queries) {
506  if (q.empty()) return true;
507  }
508  return false;
509  }
510 
511  const std::vector<TemporalQuery>& queries() const { return temporal_queries; }
512 
513  void set_targets(const std::vector<VideoFrame>& ts) {
514  targets.clear();
515  for (auto&& t : ts) {
516  targets.emplace_back(t.frame_ID);
517  }
518  }
519 
520  std::string get_plain_text_query() const {
521  std::string text2;
522 
523  for (auto&& tq : temporal_queries) {
524  TextualQuery new_query;
525 
526  const auto& sqs{ tq.canvas.subqueries() };
527  std::string text{ tq.textual };
528  for (size_t idx{ 0 }; idx < sqs.size(); ++idx) {
529  const auto& sq{ sqs[idx] };
530 
531  if (!std::holds_alternative<CanvasSubqueryText>(sq)) {
532  continue;
533  }
534 
535  const CanvasSubqueryText& s{ std::get<CanvasSubqueryText>(sq) };
536  text.append(" [").append(s.query()).append("] ");
537  }
538  if (!text.empty()) {
539  text2.append(text).append(" >> ");
540  }
541  }
542 
543  if (text2.length() > 0) {
544  text2.pop_back();
545  text2.pop_back();
546  text2.pop_back();
547  text2.pop_back();
548  }
549 
550  return text2;
551  }
552 
554  if (is_temporal_text()) {
555  std::cout << ">>> DECAY TEMPORAL TEXT: " << std::endl;
556  temporal_queries.erase(temporal_queries.begin() + 1);
557  do_assert(temporal_queries.size() == 1, "Must have 1 item.");
558  } else if (is_text_canvas()) {
559  std::cout << ">>> DECAY TEXT CANVAS: " << std::endl;
560  for (auto&& tq : temporal_queries) {
561  TextualQuery new_query;
562 
563  const auto& sqs{ tq.canvas.subqueries() };
564  std::string text;
565  for (size_t idx{ 0 }; idx < sqs.size(); ++idx) {
566  const auto& sq{ sqs[idx] };
567 
568  const CanvasSubqueryText& s{ std::get<CanvasSubqueryText>(sq) };
569  text.append(s.query()).append(" ");
570  }
571  tq.textual = text;
572  tq.canvas = CanvasQuery{}; //< Empty canvas query
573  }
574  } else if (is_bitmap_canvas()) {
575  std::cout << ">>> DECAY BITMAP CANVAS: " << std::endl;
576  for (auto&& tq : temporal_queries) {
577  auto& sqs{ tq.canvas.subqueries() };
578  for (size_t idx{ 0 }; idx < sqs.size(); ++idx) {
579  auto& sq{ sqs[idx] };
580 
581  CanvasSubqueryBitmap& s{ std::get<CanvasSubqueryBitmap>(sq) };
582  s.unposition();
583  }
584  }
585  } else if (is_relocation()) {
586  std::cout << ">>> DECAY RELOCATION: " << std::endl;
587  for (auto&& tq : temporal_queries) {
588  tq.relocation = ERR_VAL<FrameId>();
589  }
590  }
591  }
592 
593  // --- Helper methods ---
594  nlohmann::json to_JSON() const;
595 
596  template <class Archive>
597  void serialize(Archive& archive) {
599  }
600 
601  // --- Operators ---
602  // bool operator==(const TemporalQuery& other) const { return (*this) == other; }
603 
604  // *** MEMBER VARIABLES ***
605 public:
609  std::vector<TemporalQuery> temporal_queries;
610  std::vector<FrameId> targets;
611 
612  bool is_save{ false };
613  bool _score_secondary{ false };
614 };
615 
617  std::vector<FrameId> targets;
618 };
619 
621  std::vector<TextualQuery> text_query;
622 };
623 
625  std::vector<CanvasQuery> canvas_query;
626 };
627 
628 using BenchmarkQuery = std::variant<PlainTextBenchmarkQuery>;
629 }; // namespace sh
630 
631 #endif // QUERY_TYPES_H_
Type representing query related to the canvas (atm text & bitmap) rectangles.
Definition: query-types.h:325
static std::vector< CanvasQuery > parse_json(const std::string &filepath)
Parses JSON file created by to_JSON.
Definition: query-types.cpp:115
const CanvasSubquery & operator[](size_t idx) const
Definition: query-types.h:366
CanvasSubquery & operator[](size_t idx)
Definition: query-types.h:365
void emplace_back(const RelativeRect &rect, const std::string &text_query)
Emplace new subregion TEXT query.
Definition: query-types.cpp:123
std::vector< CanvasSubquery > _subqueries
Subregion queries.
Definition: query-types.h:401
const std::vector< CanvasSubquery > & subqueries() const
Definition: query-types.h:348
void serialize(Archive &archive)
This allows portable binary serialization of Collage instances to files.
Definition: query-types.h:359
bool empty() const
Definition: query-types.h:337
std::vector< CanvasSubquery > & subqueries()
Definition: query-types.h:349
size_t size() const
Definition: query-types.h:336
nlohmann::json to_JSON() const
Definition: query-types.cpp:67
bool operator==(const CanvasQuery &b) const
Definition: query-types.h:375
static std::vector< CanvasQuery > parse_json_contents(const std::string &contents, const std::filesystem::path parentPath)
Parses JSON string created by to_JSON.
Definition: query-types.cpp:79
Definition: query-types.h:191
CanvasSubqueryBase()=default
CanvasSubqueryBase(const RelativeRect &rect)
Definition: query-types.h:197
const RelativeRect & rect() const
Definition: query-types.h:202
RelativeRect _rect
Definition: query-types.h:193
void unposition()
Set canvas positioned query as if they were across the whole canvas.
Definition: query-types.h:200
Definition: query-types.h:205
size_t _width
Definition: query-types.h:207
const std::vector< uint8_t > & data() const
Definition: query-types.h:232
CanvasSubqueryBitmap(const RelativeRect &rect, size_t bitmap_w, size_t bitmap_h, size_t num_channels, std::vector< std::uint8_t > &&_data)
Definition: query-types.h:218
friend std::ostream & operator<<(std::ofstream &os, CanvasSubqueryBitmap x)
Definition: query-types.h:261
nlohmann::json to_JSON() const
Definition: query-types.h:244
std::string jpeg_filename
Definition: query-types.h:212
std::vector< uint8_t > & data()
Definition: query-types.h:231
size_t height_pixels() const
Definition: query-types.h:230
bool empty() const
Definition: query-types.h:233
size_t width_pixels() const
Definition: query-types.h:229
std::vector< uint8_t > _data_int
Definition: query-types.h:209
size_t _height
Definition: query-types.h:208
std::vector< uint8_t > get_scaled_bitmap(size_t w, size_t h) const
Definition: query-types.cpp:63
size_t num_channels() const
Definition: query-types.h:228
bool operator==(const CanvasSubqueryBitmap &b) const
Definition: query-types.h:239
size_t _num_channels
Definition: query-types.h:206
bool operator!=(const CanvasSubqueryBitmap &b) const
Definition: query-types.h:237
void serialize(Archive &archive)
Definition: query-types.h:254
Definition: query-types.h:277
bool operator!=(const CanvasSubqueryText &b) const
Definition: query-types.h:299
const TextualQuery & query() const
Definition: query-types.h:285
friend std::ostream & operator<<(std::ofstream &os, CanvasSubqueryText x)
Definition: query-types.h:306
void serialize(Archive &archive)
Definition: query-types.h:295
CanvasSubqueryText(const RelativeRect &rect, const TextualQuery &query)
Definition: query-types.h:282
bool operator==(const CanvasSubqueryText &b) const
Definition: query-types.h:301
bool empty() const
Definition: query-types.h:286
TextualQuery _text_query
Definition: query-types.h:278
CanvasSubqueryText()=default
nlohmann::json to_JSON() const
Definition: query-types.h:288
Container for information about days filtering.
Definition: query-types.h:41
bool & operator[](size_t i)
Definition: query-types.h:58
WeekDaysFilter()
Default state is all dayes.
Definition: query-types.h:46
void serialize(Archive &archive)
Definition: query-types.h:63
bool operator==(const WeekDaysFilter &other) const
Definition: query-types.h:60
std::array< bool, 7 > _days
Definition: query-types.h:42
WeekDaysFilter(uint8_t mask)
Construct from the bit mask.
Definition: query-types.h:49
const bool & operator[](size_t i) const
Definition: query-types.h:56
std::string trim(const std::string &s)
Trim.
Definition: utils.hpp:350
T_ irand(T_ from, T_ to)
Returns a pseudorandom integral number sampled from the uniform distribution [from,...
Definition: utils.hpp:170
int64_t timestamp()
Returns the actual UNIX timestamp (ms).
Definition: utils.hpp:87
bool is_set(T_ mask, size_t i)
Tests whether the i-th lowest significant bit is set.
Definition: utils.hpp:221
Definition: common-types.h:33
std::variant< PlainTextBenchmarkQuery > BenchmarkQuery
Definition: query-types.h:628
std::ostream & operator<<(std::ofstream &os, CanvasSubqueryBitmap x)
Definition: query-types.h:261
uint8_t Hour
Definition: common-types.h:243
FrameId RelocationQuery
Definition: query-types.h:157
uint16_t Year
Definition: common-types.h:244
constexpr T_ ERR_VAL()
Value indicating error/invalid/"NULL" value for the given type.
Definition: common-types.h:98
std::set< FrameId > LikesCont
Definition: common-types.h:86
std::string TextualQuery
Definition: query-types.h:155
LikesCont RelevanceFeedbackQuery
Definition: query-types.h:153
std::variant< CanvasSubqueryBitmap, CanvasSubqueryText > CanvasSubquery
Definition: query-types.h:320
unsigned long FrameId
Definition: common-types.h:75
#define do_assert_debug(assertion, msg)
Assert execuded only if RUN_ASSERTS is true.
Definition: static-logger.hpp:225
#define do_assert(assertion, msg)
Assert execuded at all times.
Definition: static-logger.hpp:210
Definition: common.h:48
Definition: query-types.h:616
std::vector< FrameId > targets
Definition: query-types.h:617
Definition: query-types.h:624
std::vector< CanvasQuery > canvas_query
Definition: query-types.h:625
Container for all the available filters for the rescore.
Definition: query-types.h:103
std::pair< FrameId, FrameId > get_dataset_parts_valid_interval(std::size_t num_total_frames) const
Based on dataset_parts it returns the allowed frame IDs.
Definition: query-types.h:122
void serialize(Archive &archive)
Definition: query-types.h:135
WeekDaysFilter days
Definition: query-types.h:106
bool operator!=(const Filters &other) const
Definition: query-types.h:114
bool is_default() const
Definition: query-types.h:116
std::vector< bool > dataset_parts
Definition: query-types.h:107
YearFilter years
Definition: query-types.h:105
TimeFilter time
Definition: query-types.h:104
bool operator==(const Filters &other) const
Definition: query-types.h:109
Definition: query-types.h:620
std::vector< TextualQuery > text_query
Definition: query-types.h:621
The type representing the whole query.
Definition: query-types.h:470
nlohmann::json to_JSON() const
Definition: query-types.cpp:34
std::vector< FrameId > targets
Definition: query-types.h:610
void serialize(Archive &archive)
Definition: query-types.h:597
const std::vector< TemporalQuery > & queries() const
Definition: query-types.h:511
void set_targets(const std::vector< VideoFrame > &ts)
Definition: query-types.h:513
void score_secondary(bool new_value)
Definition: query-types.h:493
const bool is_temporal_text() const
Definition: query-types.h:502
RelevanceFeedbackQuery relevance_feeedback
Definition: query-types.h:608
Filters filters
Definition: query-types.h:607
void transform_to_no_pos_queries()
Definition: query-types.h:553
const bool is_canvas() const
Definition: query-types.h:499
bool is_save
Definition: query-types.h:612
const bool is_text_canvas() const
Definition: query-types.h:501
std::string get_plain_text_query() const
Definition: query-types.h:520
const bool empty() const
Definition: query-types.h:504
const bool is_bitmap_canvas() const
Definition: query-types.h:500
std::vector< TemporalQuery > temporal_queries
Definition: query-types.h:609
RescoreMetadata metadata
Definition: query-types.h:606
const bool is_text() const
Definition: query-types.h:503
const bool score_secondary() const
Definition: query-types.h:492
Query()=default
bool _score_secondary
Definition: query-types.h:613
Query(const std::vector< QueryType > &temp_queries)
Definition: query-types.h:475
const bool is_relocation() const
Definition: query-types.h:485
Definition: query-types.h:159
float left
Distances from the given edge (e.g.
Definition: query-types.h:161
bool operator==(const RelativeRect &b) const
Definition: query-types.h:186
float width_norm() const
Definition: query-types.h:171
float height_norm() const
Definition: query-types.h:176
void serialize(Archive &archive)
Definition: query-types.h:182
void to_full()
Set rectangle to cover everything.
Definition: query-types.h:164
float top
Definition: query-types.h:161
float bottom
Definition: query-types.h:161
float right
Definition: query-types.h:161
Definition: query-types.h:140
std::string _username
Definition: query-types.h:141
size_t srd_search_ctx_ID
Definition: query-types.h:143
std::string time_label
Definition: query-types.h:144
std::string screenshot_filepath
Definition: query-types.h:142
void serialize(Archive &archive)
Definition: query-types.h:147
Definition: query-types.h:404
const bool is_text() const
Definition: query-types.h:418
TemporalQuery(TextualQuery tq, CanvasQuery cq, RelocationQuery rq)
Definition: query-types.h:411
RelocationQuery relocation
Definition: query-types.h:465
CanvasQuery canvas
Definition: query-types.h:464
const bool is_bitmap_canvas() const
Definition: query-types.h:422
void serialize(Archive &archive)
Definition: query-types.h:436
void score_secondary(bool new_value)
Definition: query-types.h:415
const bool is_text_canvas() const
Definition: query-types.h:428
bool _score_secondary
Definition: query-types.h:466
nlohmann::json to_JSON() const
Definition: query-types.h:446
const bool is_relocation() const
Definition: query-types.h:416
TextualQuery textual
Definition: query-types.h:463
TemporalQuery(CanvasQuery cq)
Definition: query-types.h:409
TemporalQuery(RelocationQuery rq)
Definition: query-types.h:410
const bool empty() const
Definition: query-types.h:419
bool operator==(const TemporalQuery &b) const
Definition: query-types.h:441
bool score_secondary() const
Definition: query-types.h:414
const bool is_canvas() const
Definition: query-types.h:417
TemporalQuery()
Definition: query-types.h:407
TemporalQuery(TextualQuery tq)
Definition: query-types.h:408
Container for information about time filtering.
Definition: query-types.h:69
Hour to
Definition: query-types.h:71
Hour from
Definition: query-types.h:70
TimeFilter(Hour from, Hour to)
Definition: query-types.h:75
void serialize(Archive &archive)
Definition: query-types.h:80
TimeFilter()
Default state is the whole day.
Definition: query-types.h:74
bool operator==(const TimeFilter &other) const
Definition: query-types.h:77
Container for information about time filtering.
Definition: query-types.h:86
YearFilter()
Default state is interval [2000, 2021].
Definition: query-types.h:91
bool operator==(const YearFilter &other) const
Definition: query-types.h:94
void serialize(Archive &archive)
Definition: query-types.h:97
Year from
Definition: query-types.h:87
Year to
Definition: query-types.h:88
YearFilter(Year from, Year to)
Definition: query-types.h:92