You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.6 KiB
C++

//
// Created by Tunm-Air13 on 2023/2/8.
//
#include <iostream>
#include "opencv2/opencv.hpp"
//#include "loader_module/all.h"
#include "nn_implementation_module/all.h"
#include "configuration.h"
using namespace hyper;
int main(int argc, char **argv) {
char *model_path = argv[1];
char *image_path = argv[2];
int input_size = 320;
std::string backbone_path = std::string(model_path) + "/" + hyper::DETECT_LOW_BACKBONE_FILENAME;
std::string head_path = std::string(model_path) + "/" + hyper::DETECT_LOW_HEAD_FILENAME;
// std::string backbone_path = std::string(model_path) + "/" + hyper::DETECT_HIGH_BACKBONE_FILENAME;
// std::string head_path = std::string(model_path) + "/" + hyper::DETECT_HIGH_HEAD_FILENAME;
// int input_size = 640;
cv::Mat image = cv::imread(image_path);
// DetBackbone backbone;
// backbone.Initialize(backbone_model);
//
// DetHeader header;
// header.Initialize(header_model);
//
//
// backbone.Inference(image);
//
// header.Inference(backbone.getMOutputTensorInfoList()[0].GetDataAsFloat(),
// backbone.getMOutputTensorInfoList()[1].GetDataAsFloat(),
// backbone.getMOutputTensorInfoList()[1].GetDataAsFloat());
// for (int i = 0; i < 20; ++i) {
// std::cout << header.getMOutputTensorInfoList()[0].GetDataAsFloat()[i] << std::endl;
// }
// float *h = header.getMOutputTensorInfoList()[0].GetDataAsFloat();
// for (int i = 0; i < 6300 * 15; ++i) {
//// std::cout << backbone.m_output_feature_map_40p_.get()[i] << std::endl;
// FILE *fp = NULL;
// fp = fopen("head.txt", "a");
// fprintf(fp, "%f\n", h[i]);
// fclose(fp);
// }
//
// float *p40 = backbone.getMOutputTensorInfoList()[0].GetDataAsFloat();
// for (int i = 0; i < 45 * 40 *40; ++i) {
//// std::cout << backbone.m_output_feature_map_40p_.get()[i] << std::endl;
// FILE *fp = NULL;
// fp = fopen("40.txt", "a");
// fprintf(fp, "%f\n", p40[i]);
// fclose(fp);
// }
//
// std::cout << std::endl;
// float *p20 = backbone.getMOutputTensorInfoList()[1].GetDataAsFloat();
// for (int i = 0; i < 45 * 20 * 20; ++i) {
//// std::cout << backbone.m_output_feature_map_20p_.get()[i] << std::endl;
// FILE *fp = NULL;
// fp = fopen("20.txt", "a");
// fprintf(fp, "%f\n", p20[i]);
// fclose(fp);
// }
// std::cout << std::endl;
// float *p10 = backbone.getMOutputTensorInfoList()[2].GetDataAsFloat();
// for (int i = 0; i < 45 * 10 * 10; ++i) {
//// std::cout << backbone.m_output_feature_map_10p_.get()[i] << std::endl;
// FILE *fp = NULL;
// fp = fopen("10.txt", "a");
// fprintf(fp, "%f\n", p10[i]);
// fclose(fp);
// }
DetArch arch;
arch.Initialize(backbone_path, head_path, input_size);
double time;
time = (double)cv::getTickCount();
arch.Detection(image, true);
time = ((double)cv::getTickCount() - time) / cv::getTickFrequency();
auto &results = arch.m_results_;
for (auto &plate : results) {
std::cout << plate.x1 << ", " << plate.y1 << std::endl;
cv::rectangle(image, cv::Point2f(plate.x1, plate.y1), cv::Point2f(plate.x2, plate.y2),
cv::Scalar(100, 100, 200), 1);
for (int i = 0; i < 4; ++i) {
cv::line(image, cv::Point2f(plate.kps[i * 2 + 0], plate.kps[i * 2 + 1]),
cv::Point2f(plate.kps[i * 2 + 0], plate.kps[i * 2 + 1]), cv::Scalar(100, 220, 20), 1);
}
}
#ifdef BUILD_LINUX_ARM7
cv::imwrite("out.jpg", image);
#else
cv::imshow("w", image);
cv::waitKey(0);
#endif
return 0;
}