#include #include #include #include #include #include void MIGraphXSamplesUsage(char* programName) { printf("Usage : %s \n", programName); printf("index:\n"); printf("\t 0) YOLOV5 sample.\n"); printf("\t 1) YOLOV5 Dynamic sample.\n"); } void Sample_YOLOV5(); void Sample_YOLOV5_Dynamic(); int main(int argc, char *argv[]) { if (argc < 2 || argc > 2) { MIGraphXSamplesUsage(argv[0]); return -1; } if (!strncmp(argv[1], "-h", 2)) { MIGraphXSamplesUsage(argv[0]); return 0; } switch (*argv[1]) { case '0': { Sample_YOLOV5(); break; } case '1': { Sample_YOLOV5_Dynamic(); break; } default : { MIGraphXSamplesUsage(argv[0]); break; } } return 0; } void Sample_YOLOV5() { // 创建YOLOV5检测器 migraphxSamples::DetectorYOLOV5 detector; migraphxSamples::InitializationParameterOfDetector initParamOfDetectorYOLOV5; initParamOfDetectorYOLOV5.configFilePath = CONFIG_FILE; migraphxSamples::ErrorCode errorCode=detector.Initialize(initParamOfDetectorYOLOV5, false); if(errorCode!=migraphxSamples::SUCCESS) { LOG_ERROR(stdout, "fail to initialize detector!\n"); exit(-1); } LOG_INFO(stdout, "succeed to initialize detector\n"); // 读取测试图片 cv::Mat srcImage = cv::imread("../Resource/Images/DynamicPics/image1.jpg",1); // 推理 std::vector predictions; double time1 = cv::getTickCount(); detector.Detect(srcImage, predictions, false); double time2 = cv::getTickCount(); double elapsedTime = (time2 - time1)*1000 / cv::getTickFrequency(); LOG_INFO(stdout, "inference time:%f ms\n", elapsedTime); // 获取推理结果 LOG_INFO(stdout,"========== Detection Results ==========\n"); for(int i=0;i srcImages; cv::String folder = "../Resource/Images/DynamicPics"; std::vector imagePathList; cv::glob(folder,imagePathList); for (int i = 0; i < imagePathList.size(); ++i) { cv::Mat srcImage=cv::imread(imagePathList[i], 1); srcImages.push_back(srcImage); } // 设置动态推理shape std::vector> inputShapes; inputShapes.push_back({1,3,416,416}); inputShapes.push_back({1,3,608,608}); for (int i = 0; i < srcImages.size(); ++i) { // 生成不同尺寸的图像 cv::resize(srcImages[i], srcImages[i], cv::Size(inputShapes[i][3], inputShapes[i][2])); // 推理 std::vector predictions; double time1 = cv::getTickCount(); detector.Detect(srcImages[i], predictions, true); double time2 = cv::getTickCount(); double elapsedTime = (time2 - time1)*1000 / cv::getTickFrequency(); LOG_INFO(stdout, "inference image%d time:%f ms\n", i, elapsedTime); // 获取推理结果 LOG_INFO(stdout,"========== Detection Image%d Results ==========\n", i); for(int j=0;j