mirror of
https://github.com/azaion/autopilot.git
synced 2026-04-22 22:36:34 +00:00
45c19baa45
- autopilot -> drone_controller - rtsp_ai_player -> ai_controller - added top level qmake project file - updated documentation - moved small demo applications from tmp/ to misc/
68 lines
2.4 KiB
C++
68 lines
2.4 KiB
C++
#include <QDebug>
|
|
#include <QThread>
|
|
#include "aiengineinferenceopencvonnx.h"
|
|
|
|
|
|
AiEngineInferenceOpencvOnnx::AiEngineInferenceOpencvOnnx(QString modelPath, QObject *parent)
|
|
: AiEngineInference{modelPath, parent},
|
|
mInference(modelPath.toStdString(), cv::Size(640, 640), "classes.txt")
|
|
{
|
|
//qDebug() << "TUOMAS test mModelPath=" << mModelPath;
|
|
//mEngine = new InferenceEngine(modelPath.toStdString());
|
|
//mInference = new Inference(modelPath.toStdString(), cv::Size(INFERENCE_SQUARE_WIDTH, INFERENCE_SQUARE_HEIGHT), "classes.txt");
|
|
}
|
|
|
|
|
|
void AiEngineInferenceOpencvOnnx::performInferenceSlot(cv::Mat frame)
|
|
{
|
|
try {
|
|
qDebug() << "performInferenceSlot() in thread: " << QThread::currentThreadId();
|
|
|
|
mActive = true;
|
|
|
|
cv::Mat scaledImage = resizeAndPad(frame);
|
|
//cv::imwrite("/tmp/frame.png", scaledImage);
|
|
std::vector<Detection> detections = mInference.runInference(scaledImage);
|
|
AiEngineInferenceResult result;
|
|
|
|
qDebug() << "performInferenceSlot() found " << detections.size() << " objects";
|
|
|
|
for (uint i = 0; i < detections.size(); ++i) {
|
|
const Detection &detection = detections[i];
|
|
|
|
// Add detected objects to the results
|
|
AiEngineObject object;
|
|
object.classId = detection.class_id;
|
|
object.propability = detection.confidence;
|
|
object.rectangle.top = detection.box.y;
|
|
object.rectangle.left = detection.box.x;
|
|
object.rectangle.bottom = detection.box.y + detection.box.height;
|
|
object.rectangle.right = detection.box.x + detection.box.width;
|
|
result.objects.append(object);
|
|
|
|
//qDebug() << "performInferenceSlot()" << object.rectangle.top << object.rectangle.left << "and" << object.rectangle.bottom << object.rectangle.right;
|
|
}
|
|
|
|
auto end = std::remove_if(detections.begin(), detections.end(), [](const Detection& detection) {
|
|
return detection.class_id != 0;
|
|
});
|
|
detections.erase(end, detections.end());
|
|
|
|
if (result.objects.empty() == false) {
|
|
result.frame = mInference.drawLabels(scaledImage, detections);
|
|
emit resultsReady(result);
|
|
}
|
|
|
|
mActive = false;
|
|
}
|
|
catch (const cv::Exception& e) {
|
|
std::cerr << "performInferenceSlot() Error: " << e.what() << std::endl;
|
|
}
|
|
}
|
|
|
|
|
|
void AiEngineInferenceOpencvOnnx::initialize(int number)
|
|
{
|
|
(void)number;
|
|
}
|