Loading...
Searching...
No Matches
CVObjectDetection.h
Go to the documentation of this file.
// Copyright (c) 2008-2019 OpenShot Studios, LLC
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#pragma once
#define int64 opencv_broken_int
#define uint64 opencv_broken_uint
#include <opencv2/dnn.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#undef uint64
#undef int64
#include "Json.h"
#include "ProcessingController.h"
#include "Clip.h"
#include "sort_filter/sort.hpp"
// Forward decl
namespace pb_objdetect {
class Frame;
}
namespace openshot
{
// Stores the detected object bounding boxes and its properties.
struct CVDetectionData{
CVDetectionData(){}
CVDetectionData(
std::vector<int> _classIds,
std::vector<float> _confidences,
std::vector<cv::Rect_<float>> _boxes,
size_t _frameId,
std::vector<int> _objectIds)
{
classIds = _classIds;
confidences = _confidences;
boxes = _boxes;
frameId = _frameId;
objectIds = _objectIds;
}
size_t frameId;
std::vector<int> classIds;
std::vector<float> confidences;
std::vector<cv::Rect_<float>> boxes;
std::vector<int> objectIds;
};
class CVObjectDetection{
private:
cv::dnn::Net net;
std::vector<std::string> classNames;
float confThreshold, nmsThreshold;
std::string classesFile;
std::string modelConfiguration;
std::string modelWeights;
std::string processingDevice;
std::string protobuf_data_path;
SortTracker sort;
uint progress;
size_t start;
size_t end;
bool error = false;
ProcessingController *processingController;
void setProcessingDevice();
// Detect onbects on a single frame
void DetectObjects(const cv::Mat &frame, size_t frame_number);
bool iou(cv::Rect pred_box, cv::Rect sort_box);
// Remove the bounding boxes with low confidence using non-maxima suppression
void postprocess(const cv::Size &frameDims, const std::vector<cv::Mat>& out, size_t frame_number);
// Get the names of the output layers
std::vector<cv::String> getOutputsNames(const cv::dnn::Net& net);
public:
std::map<size_t, CVDetectionData> detectionsData;
CVObjectDetection(std::string processInfoJson, ProcessingController &processingController);
// Iterate over a clip object and run inference for each video frame
void detectObjectsClip(openshot::Clip &video, size_t start=0, size_t end=0, bool process_interval=false);
CVDetectionData GetDetectionData(size_t frameId);
// Save protobuf file
bool SaveObjDetectedData();
// Add frame object detection data into protobuf message.
void AddFrameDataToProto(pb_objdetect::Frame* pbFrameData, CVDetectionData& dData);
// Get and Set JSON methods
void SetJson(const std::string value);
void SetJsonValue(const Json::Value root);
// Load protobuf file (ONLY FOR MAKE TEST)
bool _LoadObjDetectdData();
};
}
Clip.h
Header file for Clip class.
Json.h
Header file for JSON class.
ProcessingController.h
This is a message class for thread safe comunication between ClipProcessingJobs and OpenCV classes.
ProcessingController
Definition ProcessingController.h:20
SortTracker
Definition sort.hpp:33
openshot::CVObjectDetection
This class runs trought a clip to detect objects and returns the bounding boxes and its properties.
Definition CVObjectDetection.h:64
openshot::CVObjectDetection::SetJsonValue
void SetJsonValue(const Json::Value root)
Load Json::Value into this object.
Definition CVObjectDetection.cpp:377
openshot::CVObjectDetection::_LoadObjDetectdData
bool _LoadObjDetectdData()
Definition CVObjectDetection.cpp:423
openshot::CVObjectDetection::detectObjectsClip
void detectObjectsClip(openshot::Clip &video, size_t start=0, size_t end=0, bool process_interval=false)
Definition CVObjectDetection.cpp:46
openshot::CVObjectDetection::AddFrameDataToProto
void AddFrameDataToProto(pb_objdetect::Frame *pbFrameData, CVDetectionData &dData)
Definition CVObjectDetection.cpp:338
openshot::CVObjectDetection::GetDetectionData
CVDetectionData GetDetectionData(size_t frameId)
Definition CVObjectDetection.cpp:290
openshot::CVObjectDetection::detectionsData
std::map< size_t, CVDetectionData > detectionsData
Definition CVObjectDetection.h:105
openshot::CVObjectDetection::SetJson
void SetJson(const std::string value)
Load JSON string into this object.
Definition CVObjectDetection.cpp:359
openshot::CVObjectDetection::SaveObjDetectedData
bool SaveObjDetectedData()
Protobuf Save and Load methods.
Definition CVObjectDetection.cpp:301
openshot::Clip
This class represents a clip (used to arrange readers on the timeline)
Definition Clip.h:89
openshot
This namespace is the default namespace for all code in the openshot library.
Definition Compressor.h:29
pb_objdetect
Definition CVObjectDetection.h:30
sort.hpp
openshot::CVDetectionData
Definition CVObjectDetection.h:37
openshot::CVDetectionData::frameId
size_t frameId
Definition CVObjectDetection.h:52
openshot::CVDetectionData::CVDetectionData
CVDetectionData()
Definition CVObjectDetection.h:38
openshot::CVDetectionData::objectIds
std::vector< int > objectIds
Definition CVObjectDetection.h:56
openshot::CVDetectionData::boxes
std::vector< cv::Rect_< float > > boxes
Definition CVObjectDetection.h:55
openshot::CVDetectionData::classIds
std::vector< int > classIds
Definition CVObjectDetection.h:53
openshot::CVDetectionData::CVDetectionData
CVDetectionData(std::vector< int > _classIds, std::vector< float > _confidences, std::vector< cv::Rect_< float > > _boxes, size_t _frameId, std::vector< int > _objectIds)
Definition CVObjectDetection.h:39
openshot::CVDetectionData::confidences
std::vector< float > confidences
Definition CVObjectDetection.h:54