//main.cpp /** * @file main.cpp * * Copyright (C) 2020. Huawei Technologies Co., Ltd. All rights reserved. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include "sample_process.h" #include "utils.h" #include using namespace std; bool f_isTXT = false; bool g_isDevice = false; int loop = 1; int32_t device = 0; bool is_profi = false; bool is_dump = false; bool is_debug = false; string input_Ftype = ".bin"; string model_Ftype = ".om"; string check = ""; void InitAndCheckParams(int argc, char* argv[], map& params, vector& inputs) { const char* optstring = "m::i::o::f::hd::p::l::y::e::g::"; int c, deb, index; struct option opts[] = { { "model", required_argument, NULL, 'm' }, { "input", required_argument, NULL, 'i' }, { "output", required_argument, NULL, 'o' }, { "outfmt", required_argument, NULL, 'f' }, { "help", no_argument, NULL, 1 }, { "dump", required_argument, NULL, 'd' }, { "profiler", required_argument, NULL, 'p' }, { "loop", required_argument, NULL, 'l' }, { "dymBatch", required_argument, NULL, 'y' }, { "device", required_argument, NULL, 'e' }, { "debug", required_argument, NULL, 'g' }, { 0, 0, 0, 0 } }; while ((c = getopt_long(argc, argv, optstring, opts, &index)) != -1) { switch (c) { case 'm': check = optarg; if (check.find(model_Ftype) != string::npos) { params['m'] = optarg; break; } else { printf("input model file type is not .om , please check your model type!\n"); exit(0); } case 'i': check = optarg; if (check.find(input_Ftype) == string::npos) { printf("input data file type is not .bin , please check your input file type!\n"); exit(0); } params['i'] = optarg; Utils::SplitString(params['i'], inputs, ','); break; case 'o': params['o'] = optarg; break; case 'f': params['f'] = optarg; break; case '?': printf("unknown paramenter\n"); printf("Execute sample failed.\n"); Utils::printHelpLetter(); exit(0); case 'd': params['d'] = optarg; break; case 'p': params['p'] = optarg; break; case 'l': loop = Utils::str2num(optarg); cout << "loop:" << loop << endl; if (loop > 100 || loop < 1) { printf("loop must in 1 to 100\n"); exit(0); } break; case 'y': params['y'] = optarg; break; case 'e': device = Utils::str2num(optarg); cout << "device:" << device << endl; if (device > 255 || device < 0) { printf("device id must in 0 to 255\n"); exit(0); } break; case 'g': params['g'] = optarg; break; case 1: Utils::printHelpLetter(); exit(0); default: printf("unknown paramenter\n"); printf("Execute sample failed.\n"); Utils::printHelpLetter(); exit(0); } } } int main(int argc, char* argv[]) { map params; vector inputs; InitAndCheckParams(argc, argv, params, inputs); printf("******************************\n"); printf("Test Start!\n"); if (params.empty()) { printf("Invalid params.\n"); printf("Execute sample failed.\n"); Utils::printHelpLetter(); return FAILED; } if (params['d'].compare("true") == 0) { is_dump = true; } if (params['p'].compare("true") == 0) { is_profi = true; } if (params['g'].compare("true") == 0) { is_debug = true; } if (is_profi && is_dump) { ERROR_LOG("dump and profiler can not both be true"); return FAILED; } Utils::ProfilerJson(is_profi, params); Utils::DumpJson(is_dump, params); SampleProcess processSample; Result ret = processSample.InitResource(); if (ret != SUCCESS) { ERROR_LOG("Sample init resource failed."); return FAILED; } ret = processSample.Process(params, inputs); if (ret != SUCCESS) { ERROR_LOG("Sample process failed."); return FAILED; } INFO_LOG("Execute sample success."); printf("Test Finish!\n"); printf("******************************\n"); return SUCCESS; }