14#ifndef OBJECT_DETECTION_UTILITY_HPP
15#define OBJECT_DETECTION_UTILITY_HPP
17#include "../../AutonomyConstants.h"
18#include "../../AutonomyLogging.h"
19#include "../GeospatialOperations.hpp"
22#include <opencv2/opencv.hpp>
76 std::shared_ptr<cv::Rect2d> pBoundingBox = std::make_shared<cv::Rect2d>();
77 double dConfidence = 0.0;
78 double dStraightLineDistance = 0.0;
79 double dYawAngle = 0.0;
80 std::string szClassName =
"";
81 std::chrono::system_clock::time_point tmCreation = std::chrono::system_clock::now();
85 double dHorizontalFOV = 0.0;
100 return *pBoundingBox == *stOther.pBoundingBox && dConfidence == stOther.dConfidence && dStraightLineDistance == stOther.dStraightLineDistance &&
101 dYawAngle == stOther.dYawAngle && szClassName == stOther.szClassName && tmCreation == stOther.tmCreation &&
102 eDetectionMethod == stOther.eDetectionMethod && eDetectionType == stOther.eDetectionType && cvImageResolution == stOther.cvImageResolution &&
103 dHorizontalFOV == stOther.dHorizontalFOV && stGeolocatedPosition == stOther.stGeolocatedPosition;
130 if (
this != &stOther)
133 pBoundingBox = stOther.pBoundingBox;
136 dConfidence = stOther.dConfidence;
137 dStraightLineDistance = stOther.dStraightLineDistance;
138 dYawAngle = stOther.dYawAngle;
139 szClassName = stOther.szClassName;
140 tmCreation = stOther.tmCreation;
141 eDetectionMethod = stOther.eDetectionMethod;
142 eDetectionType = stOther.eDetectionType;
143 cvImageResolution = stOther.cvImageResolution;
144 dHorizontalFOV = stOther.dHorizontalFOV;
145 stGeolocatedPosition = stOther.stGeolocatedPosition;
163 return cv::Point2f(stObject.pBoundingBox->x + stObject.pBoundingBox->width / 2, stObject.pBoundingBox->y + stObject.pBoundingBox->height / 2);
179 double dDegreesPerPixel = stTag.dHorizontalFOV / stTag.cvImageResolution.
width;
181 double dTagErrorX = (stTag.pBoundingBox->x + stTag.pBoundingBox->width / 2) - (stTag.cvImageResolution.
width / 2);
183 double dTagAngleX = dTagErrorX * dDegreesPerPixel;
185 stTag.dYawAngle = dTagAngleX;
188 stTag.dStraightLineDistance = (stTag.pBoundingBox->area() / (stTag.cvImageResolution.
width * stTag.cvImageResolution.
height)) * 100.0;
Namespace containing functions to assist in object detection.
Definition ObjectDetectionUtility.hpp:36
void EstimatePoseFromCameraFrame(Object &stTag)
Estimate the pose of a tag from a camera frame.
Definition ObjectDetectionUtility.hpp:176
ObjectDetectionType
Enum class to define the different object detection types available.
Definition ObjectDetectionUtility.hpp:58
cv::Point2f FindObjectCenter(const Object &stObject)
Find the center of an object.
Definition ObjectDetectionUtility.hpp:160
ObjectDetectionMethod
Enum class to define the different object detection methods available.
Definition ObjectDetectionUtility.hpp:45
This struct is used by the WaypointHandler class to store location, size, and type information about ...
Definition GeospatialOperations.hpp:392
Represents a single detected object. Combines attributes from TorchObject and TensorflowObject struct...
Definition ObjectDetectionUtility.hpp:73
bool operator==(const Object &stOther) const
Overridden operator equals for Object struct.
Definition ObjectDetectionUtility.hpp:98
Object & operator=(const Object &stOther)
Overload the assignment operator for the Object struct to perform a deep copy.
Definition ObjectDetectionUtility.hpp:127
bool operator!=(const Object &stOther) const
Overridden operator equals for Object struct.
Definition ObjectDetectionUtility.hpp:116