Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
Overlay.h
1#pragma once
2
3#include <boost/serialization/vector.hpp>
4#include <opencv2/core/types.hpp>
5#include <opencv2/opencv.hpp>
6#include "Utils.h"
7#include "Module.h"
8
9enum Primitive
10{
11 RECTANGLE,
12 CIRCLE,
13 LINE,
14 COMPOSITE,
15 DRAWING
16};
17
18class OverlayInfo;
19
21{
22public:
24 virtual void visit(OverlayInfo* overlay) {};
25};
26
28{
29public:
30 OverlayInfo(Primitive p) : primitiveType(p) {}
32 virtual void serialize(boost::archive::binary_oarchive& oa) {}
33 virtual void deserialize(boost::archive::binary_iarchive& ia) {}
34 virtual size_t getSerializeSize() { return 0; }
35 virtual void accept(OverlayInfoVisitor* visitor) { visitor->visit(this); };
36 virtual void draw(cv::Mat matImg) {}
37 Primitive primitiveType;
38};
39
41{
42public:
43 CircleOverlay() : OverlayInfo(Primitive::CIRCLE) {}
44 void serialize(boost::archive::binary_oarchive& oa);
45 size_t getSerializeSize();
46 void deserialize(boost::archive::binary_iarchive& ia);
47 void draw(cv::Mat matImg);
48
49 float x1, y1, radius;
50private:
52 template <class Archive>
53 void save(Archive& ar, const unsigned int version /*file_version*/)
54 {
55 ar& primitiveType;
56 ar& x1& y1& radius;
57 }
58 template <class Archive>
59 void load(Archive& ar, const unsigned int version)
60 {
61 if (version > 0)
62 ar& primitiveType;
63 ar& x1& y1& radius;
64 }
65};
66
68{
69public:
70 LineOverlay() : OverlayInfo(Primitive::LINE) {}
71 void serialize(boost::archive::binary_oarchive& oa);
72 size_t getSerializeSize();
73 void deserialize(boost::archive::binary_iarchive& ia);
74 void draw(cv::Mat matImg);
75
76 float x1, y1, x2, y2;
77private:
79 template <class Archive>
80 void save(Archive& ar, const unsigned int version /*file_version*/)
81 {
82 ar& primitiveType;
83 ar& x1& y1& x2& y2;
84 }
85 template <class Archive>
86 void load(Archive& ar, const unsigned int version /*file_version*/)
87 {
88 if (version > 0)
89 ar& primitiveType;
90 ar& x1& y1& x2& y2;
91 }
92};
93
95{
96public:
97 RectangleOverlay() : OverlayInfo(Primitive::RECTANGLE) {}
98 void serialize(boost::archive::binary_oarchive& oa);
99 size_t getSerializeSize();
100 void deserialize(boost::archive::binary_iarchive& ia);
101 void draw(cv::Mat matImg);
102
103 float x1, y1, x2, y2;
104private:
106 template <class Archive>
107 void save(Archive& ar, const unsigned int version /*file_version*/)
108 {
109 ar& primitiveType;
110 ar& x1& y1& x2& y2;
111 }
112 template <class Archive>
113 void load(Archive& ar, const unsigned int version /*file_version*/)
114 {
115 if (version > 0)
116 ar& primitiveType;
117 ar& x1& y1& x2& y2;
118 }
119};
120
121// visitorsheirarchy
123{
124public:
125 OverlayInfoSerializerVisitor(boost::archive::binary_oarchive& _oa) : oa(_oa) {}
126 void visit(OverlayInfo* overlay);
127private:
128 boost::archive::binary_oarchive& oa;
129};
130
131// visitor to estimate serialize size
139
141{
142public:
144 {
146 matImg.data = static_cast<uchar*>(frame->data());
147 }
148 void visit(OverlayInfo* overlay);
149private:
150 cv::Mat matImg;
151};
152
154{
155public:
156 CompositeOverlay() : OverlayInfo(Primitive::COMPOSITE) {}
158 void add(OverlayInfo* component);
159 // used by builder
160 void deserialize(boost::archive::binary_iarchive& ia);
161 void accept(OverlayInfoVisitor* visitor);
162 vector<OverlayInfo*> getList();
163
164protected:
165 vector<OverlayInfo*> gList; // used by DrawingOverlay
166 // used by visitor
167 void serialize(boost::archive::binary_oarchive& oa);
168
169private:
171 template <class Archive>
172 void save(Archive& ar, const unsigned int version /*file_version*/)
173 {
174 ar& primitiveType;
175 ar& gList.size();
176 }
177 template <class Archive>
178 void load(Archive& ar, const unsigned int version /*file_version*/)
179 {
180 if (version > 0)
181 ar& primitiveType;
182 ar& gList.size();
183 }
184};
185
186// interface to be used externally
187// why is it required ? - put commment here
189{
190public:
191 DrawingOverlay() : CompositeOverlay(Primitive::DRAWING) {}
192 void serialize(frame_sp frame);
193 void deserialize(frame_sp frame);
194 void draw(frame_sp frame);
195 size_t mGetSerializeSize();
196};
197
198// Builder heirarchy
200{
201public:
203 virtual OverlayInfo* deserialize(boost::archive::binary_iarchive& ia) = 0;
204};
205
207{
208public:
210 OverlayInfo* deserialize(boost::archive::binary_iarchive& ia);
211
212protected:
214};
215
217{
218public:
220 OverlayInfo* deserialize(boost::archive::binary_iarchive& ia);
221
222protected:
224};
225
227{
228public:
230 OverlayInfo* deserialize(boost::archive::binary_iarchive& ia);
231
232protected:
234};
235
237{
238public:
240 OverlayInfo* deserialize(boost::archive::binary_iarchive& ia);
241
242protected:
244};
Definition Overlay.h:237
CircleOverlayBuilder()
Definition Overlay.h:239
OverlayInfo * deserialize(boost::archive::binary_iarchive &ia)
Definition Overlay.cpp:181
CircleOverlay * circleOverlay
Definition Overlay.h:243
Definition Overlay.h:41
void save(Archive &ar, const unsigned int version)
Definition Overlay.h:53
void draw(cv::Mat matImg)
Definition Overlay.cpp:19
float y1
Definition Overlay.h:49
size_t getSerializeSize()
Definition Overlay.cpp:9
void serialize(boost::archive::binary_oarchive &oa)
Definition Overlay.cpp:4
friend class boost::serialization::access
Definition Overlay.h:51
void deserialize(boost::archive::binary_iarchive &ia)
Definition Overlay.cpp:14
float radius
Definition Overlay.h:49
float x1
Definition Overlay.h:49
void load(Archive &ar, const unsigned int version)
Definition Overlay.h:59
CircleOverlay()
Definition Overlay.h:43
Definition Overlay.h:207
OverlayInfo * deserialize(boost::archive::binary_iarchive &ia)
Definition Overlay.cpp:163
CompositeOverlay * compositeOverlay
Definition Overlay.h:213
CompositeOverlayBuilder()
Definition Overlay.h:209
Definition Overlay.h:154
vector< OverlayInfo * > gList
Definition Overlay.h:165
CompositeOverlay(Primitive primitiveType)
Definition Overlay.h:157
void deserialize(boost::archive::binary_iarchive &ia)
Definition Overlay.cpp:92
void save(Archive &ar, const unsigned int version)
Definition Overlay.h:172
void load(Archive &ar, const unsigned int version)
Definition Overlay.h:178
vector< OverlayInfo * > getList()
Definition Overlay.cpp:87
void serialize(boost::archive::binary_oarchive &oa)
Definition Overlay.cpp:73
CompositeOverlay()
Definition Overlay.h:156
void accept(OverlayInfoVisitor *visitor)
Definition Overlay.cpp:78
friend class boost::serialization::access
Definition Overlay.h:170
void add(OverlayInfo *component)
Definition Overlay.cpp:68
Definition Overlay.h:200
virtual OverlayInfo * deserialize(boost::archive::binary_iarchive &ia)=0
DrawingOverlayBuilder()
Definition Overlay.h:202
Definition Overlay.h:189
void serialize(frame_sp frame)
Definition Overlay.cpp:132
void draw(frame_sp frame)
Definition Overlay.cpp:158
size_t mGetSerializeSize()
Definition Overlay.cpp:106
DrawingOverlay()
Definition Overlay.h:191
void deserialize(frame_sp frame)
Definition Overlay.cpp:113
static T * downcast(framemetadata_sp metadata)
Definition FrameMetadataFactory.h:9
Definition Overlay.h:217
LineOverlayBuilder()
Definition Overlay.h:219
OverlayInfo * deserialize(boost::archive::binary_iarchive &ia)
Definition Overlay.cpp:169
LineOverlay * lineOverlay
Definition Overlay.h:223
Definition Overlay.h:68
void load(Archive &ar, const unsigned int version)
Definition Overlay.h:86
float y2
Definition Overlay.h:76
float x1
Definition Overlay.h:76
void deserialize(boost::archive::binary_iarchive &ia)
Definition Overlay.cpp:35
void serialize(boost::archive::binary_oarchive &oa)
Definition Overlay.cpp:25
float y1
Definition Overlay.h:76
float x2
Definition Overlay.h:76
void save(Archive &ar, const unsigned int version)
Definition Overlay.h:80
friend class boost::serialization::access
Definition Overlay.h:78
LineOverlay()
Definition Overlay.h:70
size_t getSerializeSize()
Definition Overlay.cpp:30
void draw(cv::Mat matImg)
Definition Overlay.cpp:40
Definition Overlay.h:141
void visit(OverlayInfo *overlay)
Definition Overlay.cpp:153
cv::Mat matImg
Definition Overlay.h:150
OverlayInfoDrawingVisitor(frame_sp frame)
Definition Overlay.h:143
Definition Overlay.h:133
OverlayInfoSerializeSizeVisitor()
Definition Overlay.h:135
void visit(OverlayInfo *overlay)
Definition Overlay.cpp:148
size_t totalSize
Definition Overlay.h:137
Definition Overlay.h:123
void visit(OverlayInfo *overlay)
Definition Overlay.cpp:143
boost::archive::binary_oarchive & oa
Definition Overlay.h:128
OverlayInfoSerializerVisitor(boost::archive::binary_oarchive &_oa)
Definition Overlay.h:125
Definition Overlay.h:21
virtual ~OverlayInfoVisitor()
Definition Overlay.h:23
virtual void visit(OverlayInfo *overlay)
Definition Overlay.h:24
Definition Overlay.h:28
Primitive primitiveType
Definition Overlay.h:37
virtual void accept(OverlayInfoVisitor *visitor)
Definition Overlay.h:35
virtual void serialize(boost::archive::binary_oarchive &oa)
Definition Overlay.h:32
OverlayInfo(Primitive p)
Definition Overlay.h:30
OverlayInfo()
Definition Overlay.h:31
virtual size_t getSerializeSize()
Definition Overlay.h:34
virtual void draw(cv::Mat matImg)
Definition Overlay.h:36
virtual void deserialize(boost::archive::binary_iarchive &ia)
Definition Overlay.h:33
Definition Overlay.h:227
OverlayInfo * deserialize(boost::archive::binary_iarchive &ia)
Definition Overlay.cpp:175
RectangleOverlayBuilder()
Definition Overlay.h:229
RectangleOverlay * rectangleOverlay
Definition Overlay.h:233
Definition Overlay.h:95
void draw(cv::Mat matImg)
Definition Overlay.cpp:62
float x2
Definition Overlay.h:103
float y1
Definition Overlay.h:103
void serialize(boost::archive::binary_oarchive &oa)
Definition Overlay.cpp:47
void deserialize(boost::archive::binary_iarchive &ia)
Definition Overlay.cpp:57
size_t getSerializeSize()
Definition Overlay.cpp:52
void load(Archive &ar, const unsigned int version)
Definition Overlay.h:113
friend class boost::serialization::access
Definition Overlay.h:105
void save(Archive &ar, const unsigned int version)
Definition Overlay.h:107
float y2
Definition Overlay.h:103
RectangleOverlay()
Definition Overlay.h:97
float x1
Definition Overlay.h:103
static cv::Mat getMatHeader(RawImageMetadata *metadata)
Definition Utils.cpp:146