Camera.cpp
Go to the documentation of this file.
2 
3 // std
4 #include <cmath>
5 #include <fstream>
6 
7 // libraries
8 #include "spdlog/fmt/fmt.h"
9 
10 namespace dai {
11 namespace node {
12 
13 Camera::Camera(const std::shared_ptr<PipelineImpl>& par, int64_t nodeId) : Camera(par, nodeId, std::make_unique<Camera::Properties>()) {}
14 Camera::Camera(const std::shared_ptr<PipelineImpl>& par, int64_t nodeId, std::unique_ptr<Properties> props)
15  : NodeCRTP<Node, Camera, CameraProperties>(par, nodeId, std::move(props)), rawControl(std::make_shared<RawCameraControl>()), initialControl(rawControl) {
19  properties.interleaved = true;
22  properties.fps = 30.0;
24 
27 }
28 
31  return properties;
32 }
33 
34 // Set board socket to use
36  properties.boardSocket = boardSocket;
37 }
38 
39 // Get current board socket
41  return properties.boardSocket;
42 }
43 
44 void Camera::setCamera(std::string name) {
45  properties.cameraName = name;
46 }
47 
48 std::string Camera::getCamera() const {
49  return properties.cameraName;
50 }
51 
52 // Set camera image orientation
54  properties.imageOrientation = imageOrientation;
55 }
56 
57 // Get camera image orientation
59  // TODO: in case of AUTO, see if possible to return actual value determined by device?
61 }
62 
63 // set preview output size
64 void Camera::setPreviewSize(int width, int height) {
65  properties.previewWidth = width;
66  properties.previewHeight = height;
67 }
68 
69 void Camera::setPreviewSize(std::tuple<int, int> size) {
70  setPreviewSize(std::get<0>(size), std::get<1>(size));
71 }
72 
73 // set video output size
74 void Camera::setVideoSize(int width, int height) {
75  properties.videoWidth = width;
76  properties.videoHeight = height;
77 }
78 
79 void Camera::setVideoSize(std::tuple<int, int> size) {
80  setVideoSize(std::get<0>(size), std::get<1>(size));
81 }
82 
83 // set still output size
84 void Camera::setSize(int width, int height) {
87 }
88 
89 void Camera::setSize(std::tuple<int, int> size) {
90  setSize(std::get<0>(size), std::get<1>(size));
91 }
92 
93 // set still output size
94 void Camera::setStillSize(int width, int height) {
95  properties.stillWidth = width;
96  properties.stillHeight = height;
97 }
98 
99 void Camera::setStillSize(std::tuple<int, int> size) {
100  setStillSize(std::get<0>(size), std::get<1>(size));
101 }
102 
103 // void Camera::setIspScale(int horizNum, int horizDenom, int vertNum, int vertDenom) {
104 // properties.ispScale.horizNumerator = horizNum;
105 // properties.ispScale.horizDenominator = horizDenom;
106 // properties.ispScale.vertNumerator = vertNum;
107 // properties.ispScale.vertDenominator = vertDenom;
108 // }
109 
110 // void Camera::setIspScale(int numerator, int denominator) {
111 // setIspScale(numerator, denominator, numerator, denominator);
112 // }
113 
114 // void Camera::setIspScale(std::tuple<int, int> scale) {
115 // setIspScale(std::get<0>(scale), std::get<1>(scale));
116 // }
117 
118 // void Camera::setIspScale(std::tuple<int, int> horizScale, std::tuple<int, int> vertScale) {
119 // setIspScale(std::get<0>(horizScale), std::get<1>(horizScale), std::get<0>(vertScale), std::get<1>(vertScale));
120 // }
121 
122 // void Camera::setResolution(CameraProperties::SensorResolution resolution) {
123 // properties.resolution = resolution;
124 // }
125 // CameraProperties::SensorResolution Camera::getResolution() const {
126 // return properties.resolution;
127 // }
128 
129 void Camera::setFps(float fps) {
130  properties.fps = fps;
131 }
132 
133 void Camera::setIsp3aFps(int isp3aFps) {
134  properties.isp3aFps = isp3aFps;
135 }
136 
137 float Camera::getFps() const {
138  // if AUTO
140  return 30.0f;
141  }
142 
143  // else return fps
144  return properties.fps;
145 }
146 
147 // Returns preview size
148 std::tuple<int, int> Camera::getPreviewSize() const {
150 }
151 
153  return properties.previewWidth;
154 }
155 
157  return properties.previewHeight;
158 }
159 
160 // Returns video size
161 std::tuple<int, int> Camera::getVideoSize() const {
162  // TODO(themarpe) - revisit
164 }
165 
167  return std::get<0>(getVideoSize());
168 }
169 
171  return std::get<1>(getVideoSize());
172 }
173 
174 // Returns still size
175 std::tuple<int, int> Camera::getStillSize() const {
176  // TODO(themarpe) - revisit
177  // Else return size set
179 }
180 
182  return std::get<0>(getStillSize());
183 }
184 
186  return std::get<1>(getStillSize());
187 }
188 
189 // Returns sensor size
190 std::tuple<int, int> Camera::getSize() const {
191  // TODO(themarpe) - revisit
193 }
194 
195 int Camera::getWidth() const {
196  return std::get<0>(getSize());
197 }
198 
199 int Camera::getHeight() const {
200  return std::get<1>(getSize());
201 }
202 
203 // void Camera::sensorCenterCrop() {
204 // properties.sensorCropX = CameraProperties::AUTO;
205 // properties.sensorCropY = CameraProperties::AUTO;
206 // }
207 
208 // void Camera::setSensorCrop(float x, float y) {
209 // if(x < 0 || x >= 1) {
210 // throw std::invalid_argument("Sensor crop x must be specified as normalized value [0:1)");
211 // }
212 // if(y < 0 || y >= 1) {
213 // throw std::invalid_argument("Sensor crop y must be specified as normalized value [0:1)");
214 // }
215 // properties.sensorCropX = x;
216 // properties.sensorCropY = y;
217 // }
218 
219 // std::tuple<float, float> Camera::getSensorCrop() const {
220 // return {properties.sensorCropX, properties.sensorCropY};
221 // }
222 
223 // float Camera::getSensorCropX() const {
224 // return std::get<0>(getSensorCrop());
225 // }
226 
227 // float Camera::getSensorCropY() const {
228 // return std::get<1>(getSensorCrop());
229 // }
230 
232  properties.warpMeshSource = source;
233 }
235  return properties.warpMeshSource;
236 }
237 
238 void Camera::loadMeshData(span<const std::uint8_t> data) {
239  if(data.size() <= 0) {
240  throw std::runtime_error("Camera | mesh data must not be empty");
241  }
242 
243  Asset meshAsset;
244  std::string assetKey;
245  meshAsset.alignment = 64;
246 
247  meshAsset.data = std::vector<uint8_t>(data.begin(), data.end());
248  assetKey = "warpMesh";
249  properties.warpMeshUri = assetManager.set(assetKey, meshAsset)->getRelativeUri();
250 }
251 
252 void Camera::loadMeshFile(const dai::Path& warpMesh) {
253  std::ifstream streamMesh(warpMesh, std::ios::binary);
254  if(!streamMesh.is_open()) {
255  throw std::runtime_error(fmt::format("Camera | Cannot open mesh at path: {}", warpMesh.u8string()));
256  }
257  std::vector<std::uint8_t> data = std::vector<std::uint8_t>(std::istreambuf_iterator<char>(streamMesh), {});
258 
260 }
261 
262 void Camera::setMeshStep(int width, int height) {
265 }
266 std::tuple<int, int> Camera::getMeshStep() const {
268 }
269 
270 void Camera::setCalibrationAlpha(float alpha) {
271  properties.calibAlpha = alpha;
272 }
273 
275  return properties.calibAlpha;
276 }
277 
278 void Camera::setRawOutputPacked(bool packed) {
279  properties.rawPacked = packed;
280 }
281 
282 } // namespace node
283 } // namespace dai
dai::NodeCRTP< Node, Camera, CameraProperties >::properties
Properties & properties
Underlying properties.
Definition: Node.hpp:346
dai::CameraBoardSocket::AUTO
@ AUTO
dai::CameraProperties::stillWidth
int32_t stillWidth
Definition: CameraProperties.hpp:90
dai::Path::u8string
std::string u8string() const
Get path in utf-8.
Definition: Path.hpp:164
dai::node::Camera::Camera
Camera(const std::shared_ptr< PipelineImpl > &par, int64_t nodeId)
Definition: Camera.cpp:13
dai::node::Camera::getMeshSource
Properties::WarpMeshSource getMeshSource() const
Gets the source of the warp mesh.
Definition: Camera.cpp:234
dai::node::Camera::setBoardSocket
void setBoardSocket(CameraBoardSocket boardSocket)
Definition: Camera.cpp:35
dai::RawCameraControl
RawCameraControl structure.
Definition: RawCameraControl.hpp:12
dai::node::Camera::setVideoSize
void setVideoSize(int width, int height)
Set video output size.
Definition: Camera.cpp:74
dai::node::Camera::setCamera
void setCamera(std::string name)
Definition: Camera.cpp:44
dai::Asset::alignment
std::uint32_t alignment
Definition: AssetManager.hpp:20
dai::node::Camera::getStillSize
std::tuple< int, int > getStillSize() const
Get still size as tuple.
Definition: Camera.cpp:175
dai::node::Camera::raw
Output raw
Definition: Camera.hpp:92
dai::CameraImageOrientation
CameraImageOrientation
Definition: shared/depthai-shared/include/depthai-shared/common/CameraImageOrientation.hpp:11
dai::node::Camera::isp
Output isp
Definition: Camera.hpp:85
dai::CameraProperties::resolutionHeight
int32_t resolutionHeight
Definition: CameraProperties.hpp:104
dai::CameraProperties::warpMeshStepWidth
int warpMeshStepWidth
Definition: CameraProperties.hpp:164
dai::Node::setInputRefs
void setInputRefs(std::initializer_list< Input * > l)
dai::CameraProperties::imageOrientation
CameraImageOrientation imageOrientation
Definition: CameraProperties.hpp:50
fps
static constexpr int fps
Definition: rgb_depth_aligned.cpp:12
dai::Node
Abstract Node.
Definition: Node.hpp:29
dai::node::Camera::setImageOrientation
void setImageOrientation(CameraImageOrientation imageOrientation)
Set camera image orientation.
Definition: Camera.cpp:53
dai::CameraBoardSocket
CameraBoardSocket
Definition: shared/depthai-shared/include/depthai-shared/common/CameraBoardSocket.hpp:9
dai::node::Camera::setIsp3aFps
void setIsp3aFps(int isp3aFps)
Definition: Camera.cpp:133
dai::CameraProperties::ColorOrder::BGR
@ BGR
dai::CameraProperties::resolutionWidth
int32_t resolutionWidth
Definition: CameraProperties.hpp:100
dai::node::Camera::preview
Output preview
Definition: Camera.hpp:71
dai::CameraProperties::warpMeshSource
WarpMeshSource warpMeshSource
Definition: CameraProperties.hpp:153
dai::CameraProperties::interleaved
bool interleaved
Definition: CameraProperties.hpp:59
dai::node::Camera::getPreviewHeight
int getPreviewHeight() const
Get preview height.
Definition: Camera.cpp:156
dai::Node::assetManager
AssetManager assetManager
Definition: Node.hpp:291
dai::Asset::data
std::vector< std::uint8_t > data
Definition: AssetManager.hpp:19
dai::node::Camera::loadMeshData
void loadMeshData(span< const std::uint8_t > warpMesh)
Definition: Camera.cpp:238
dai::NodeCRTP
Definition: Node.hpp:342
dai::node::Camera::getSize
std::tuple< int, int > getSize() const
Get sensor resolution as size.
Definition: Camera.cpp:190
DAI_SPAN_NAMESPACE_NAME::detail::data
constexpr auto data(C &c) -> decltype(c.data())
Definition: span.hpp:177
dai::node::Camera::getProperties
Properties & getProperties()
Definition: Camera.cpp:29
dai::CameraProperties::calibAlpha
tl::optional< float > calibAlpha
Definition: CameraProperties.hpp:163
dai::node::Camera::rawControl
std::shared_ptr< RawCameraControl > rawControl
Definition: Camera.hpp:26
dai::CameraImageOrientation::AUTO
@ AUTO
dai::node::Camera::frameEvent
Output frameEvent
Definition: Camera.hpp:102
dai::CameraProperties::boardSocket
CameraBoardSocket boardSocket
Definition: CameraProperties.hpp:40
dai::CameraProperties::initialControl
RawCameraControl initialControl
Definition: CameraProperties.hpp:35
dai::Asset
Asset is identified with string key and can store arbitrary binary data.
Definition: AssetManager.hpp:15
dai::node::Camera::getBoardSocket
CameraBoardSocket getBoardSocket() const
Definition: Camera.cpp:40
dai::node::Camera::getHeight
int getHeight() const
Get sensor resolution height.
Definition: Camera.cpp:199
dai::node::Camera::getPreviewWidth
int getPreviewWidth() const
Get preview width.
Definition: Camera.cpp:152
dai::node::Camera::getPreviewSize
std::tuple< int, int > getPreviewSize() const
Get preview size as tuple.
Definition: Camera.cpp:148
DAI_SPAN_NAMESPACE_NAME::detail::size
constexpr auto size(const C &c) -> decltype(c.size())
Definition: span.hpp:167
dai::node::Camera::getStillHeight
int getStillHeight() const
Get still height.
Definition: Camera.cpp:185
dai::CameraProperties::cameraName
std::string cameraName
Definition: CameraProperties.hpp:45
dai::CameraProperties::colorOrder
ColorOrder colorOrder
Definition: CameraProperties.hpp:55
dai::CameraProperties
Definition: CameraProperties.hpp:15
dai::AssetManager::set
std::shared_ptr< dai::Asset > set(Asset asset)
Definition: AssetManager.cpp:15
dai::CameraProperties::warpMeshStepHeight
int warpMeshStepHeight
Definition: CameraProperties.hpp:165
dai::node::Camera::setRawOutputPacked
void setRawOutputPacked(bool packed)
Definition: Camera.cpp:278
dai::node::Camera::getWidth
int getWidth() const
Get sensor resolution width.
Definition: Camera.cpp:195
dai::node::Camera::getCamera
std::string getCamera() const
Definition: Camera.cpp:48
dai::Properties
Base Properties structure.
Definition: Properties.hpp:8
dai::node::Camera::setFps
void setFps(float fps)
Definition: Camera.cpp:129
dai::CameraProperties::AUTO
static constexpr int AUTO
Definition: CameraProperties.hpp:16
dai::node::Camera::getCalibrationAlpha
tl::optional< float > getCalibrationAlpha() const
Get calibration alpha parameter that determines FOV of undistorted frames.
Definition: Camera.cpp:274
dai::Node::setOutputRefs
void setOutputRefs(std::initializer_list< Output * > l)
dai::node::Camera::loadMeshFile
void loadMeshFile(const dai::Path &warpMesh)
Definition: Camera.cpp:252
dai::CameraProperties::previewHeight
uint32_t previewHeight
Definition: CameraProperties.hpp:71
dai::CameraProperties::isp3aFps
int isp3aFps
Definition: CameraProperties.hpp:119
dai::CameraProperties::warpMeshUri
std::string warpMeshUri
Definition: CameraProperties.hpp:154
dai::node::Camera::getMeshStep
std::tuple< int, int > getMeshStep() const
Gets the distance between mesh points.
Definition: Camera.cpp:266
dai::CameraProperties::videoWidth
int32_t videoWidth
Definition: CameraProperties.hpp:80
dai::node::Camera::setMeshSource
void setMeshSource(Properties::WarpMeshSource source)
Set the source of the warp mesh or disable.
Definition: Camera.cpp:231
tl::optional< float >
dai::node::Camera::setCalibrationAlpha
void setCalibrationAlpha(float alpha)
Set calibration alpha parameter that determines FOV of undistorted frames.
Definition: Camera.cpp:270
std
Definition: Node.hpp:366
dai::node::Camera::setMeshStep
void setMeshStep(int width, int height)
Definition: Camera.cpp:262
dai::node::Camera::setSize
void setSize(std::tuple< int, int > size)
Set desired resolution. Sets sensor size to best fit.
Definition: Camera.cpp:89
dai::node::Camera::getVideoWidth
int getVideoWidth() const
Get video width.
Definition: Camera.cpp:166
dai::CameraProperties::WarpMeshSource
WarpMeshSource
Definition: CameraProperties.hpp:152
dai::CameraProperties::previewKeepAspectRatio
bool previewKeepAspectRatio
Definition: CameraProperties.hpp:130
dai::node::Camera::setPreviewSize
void setPreviewSize(int width, int height)
Set preview output size.
Definition: Camera.cpp:64
dai::CameraProperties::videoHeight
int32_t videoHeight
Definition: CameraProperties.hpp:85
dai::node::Camera::getStillWidth
int getStillWidth() const
Get still width.
Definition: Camera.cpp:181
dai::node::Camera::video
Output video
Definition: Camera.hpp:64
dai::Path
Represents paths on a filesystem; accepts utf-8, Windows utf-16 wchar_t, or std::filesystem::path.
Definition: Path.hpp:27
dai::node::Camera::getImageOrientation
CameraImageOrientation getImageOrientation() const
Get camera image orientation.
Definition: Camera.cpp:58
dai::node::Camera::still
Output still
Definition: Camera.hpp:78
dai::CameraProperties::fps
float fps
Definition: CameraProperties.hpp:109
dai::node::Camera::getVideoSize
std::tuple< int, int > getVideoSize() const
Get video size as tuple.
Definition: Camera.cpp:161
dai::CameraProperties::stillHeight
int32_t stillHeight
Definition: CameraProperties.hpp:95
dai
Definition: CameraExposureOffset.hpp:6
dai::CameraProperties::rawPacked
tl::optional< bool > rawPacked
Definition: CameraProperties.hpp:176
dai::node::Camera::getFps
float getFps() const
Definition: Camera.cpp:137
dai::CameraProperties::previewWidth
uint32_t previewWidth
Definition: CameraProperties.hpp:75
dai::node::Camera::inputConfig
Input inputConfig
Definition: Camera.hpp:50
dai::node::Camera
Camera node. Experimental node, for both mono and color types of sensors.
Definition: Camera.hpp:18
dai::node::Camera::setStillSize
void setStillSize(int width, int height)
Set still output size.
Definition: Camera.cpp:94
dai::node::Camera::getVideoHeight
int getVideoHeight() const
Get video height.
Definition: Camera.cpp:170
Camera.hpp
dai::node::Camera::inputControl
Input inputControl
Definition: Camera.hpp:57


depthai
Author(s): Martin Peterlin
autogenerated on Sat Mar 22 2025 02:58:18