mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 17:44:04 +08:00
Merge pull request #5329 from paroj:cliparser
This commit is contained in:
commit
05b1636780
@ -619,6 +619,10 @@ For example:
|
|||||||
}
|
}
|
||||||
@endcode
|
@endcode
|
||||||
|
|
||||||
|
Note that there are no default values for `help` and `timestamp` so we can check their presence using the `has()` method.
|
||||||
|
Arguments with default values are considered to be always present. Use the `get()` method in these cases to check their
|
||||||
|
actual value instead.
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
For the described keys:
|
For the described keys:
|
||||||
@ -630,7 +634,7 @@ For the described keys:
|
|||||||
# Bad call
|
# Bad call
|
||||||
$ ./app -fps=aaa
|
$ ./app -fps=aaa
|
||||||
ERRORS:
|
ERRORS:
|
||||||
Exception: can not convert: [aaa] to [double]
|
Parameter 'fps': can not convert: [aaa] to [double]
|
||||||
@endcode
|
@endcode
|
||||||
*/
|
*/
|
||||||
class CV_EXPORTS CommandLineParser
|
class CV_EXPORTS CommandLineParser
|
||||||
|
@ -97,23 +97,28 @@ void CommandLineParser::getByName(const String& name, bool space_delete, int typ
|
|||||||
{
|
{
|
||||||
for (size_t j = 0; j < impl->data[i].keys.size(); j++)
|
for (size_t j = 0; j < impl->data[i].keys.size(); j++)
|
||||||
{
|
{
|
||||||
if (name.compare(impl->data[i].keys[j]) == 0)
|
if (name == impl->data[i].keys[j])
|
||||||
{
|
{
|
||||||
String v = impl->data[i].def_value;
|
String v = impl->data[i].def_value;
|
||||||
if (space_delete)
|
if (space_delete)
|
||||||
v = impl->cat_string(v);
|
v = impl->cat_string(v);
|
||||||
|
|
||||||
|
// it is an error if we just got the default value here
|
||||||
|
if(v.empty())
|
||||||
|
break;
|
||||||
|
|
||||||
from_str(v, type, dst);
|
from_str(v, type, dst);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl->error = true;
|
impl->error = true;
|
||||||
impl->error_message = impl->error_message + "Unknown parameter " + name + "\n";
|
impl->error_message = impl->error_message + "Missing parameter: '" + name + "'\n";
|
||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (Exception& e)
|
||||||
{
|
{
|
||||||
impl->error = true;
|
impl->error = true;
|
||||||
impl->error_message = impl->error_message + "Exception: " + String(e.what()) + "\n";
|
impl->error_message = impl->error_message + "Parameter '"+ name + "': " + e.err + "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,17 +133,22 @@ void CommandLineParser::getByIndex(int index, bool space_delete, int type, void*
|
|||||||
{
|
{
|
||||||
String v = impl->data[i].def_value;
|
String v = impl->data[i].def_value;
|
||||||
if (space_delete == true) v = impl->cat_string(v);
|
if (space_delete == true) v = impl->cat_string(v);
|
||||||
|
|
||||||
|
// it is an error if we just got the default value here
|
||||||
|
if(v.empty())
|
||||||
|
break;
|
||||||
|
|
||||||
from_str(v, type, dst);
|
from_str(v, type, dst);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl->error = true;
|
impl->error = true;
|
||||||
impl->error_message = impl->error_message + "Unknown parameter #" + format("%d", index) + "\n";
|
impl->error_message = impl->error_message + "Missing parameter #" + format("%d", index) + "\n";
|
||||||
}
|
}
|
||||||
catch(std::exception & e)
|
catch(Exception& e)
|
||||||
{
|
{
|
||||||
impl->error = true;
|
impl->error = true;
|
||||||
impl->error_message = impl->error_message + "Exception: " + String(e.what()) + "\n";
|
impl->error_message = impl->error_message + format("Parameter #%d: ", index) + e.err + "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,9 +334,9 @@ bool CommandLineParser::has(const String& name) const
|
|||||||
{
|
{
|
||||||
for (size_t j = 0; j < impl->data[i].keys.size(); j++)
|
for (size_t j = 0; j < impl->data[i].keys.size(); j++)
|
||||||
{
|
{
|
||||||
if (name.compare(impl->data[i].keys[j]) == 0 && String("true").compare(impl->data[i].def_value) == 0)
|
if (name == impl->data[i].keys[j])
|
||||||
{
|
{
|
||||||
return true;
|
return !impl->cat_string(impl->data[i].def_value).empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -783,7 +783,7 @@ void TestBase::Init(const std::vector<std::string> & availableImpls,
|
|||||||
;
|
;
|
||||||
|
|
||||||
cv::CommandLineParser args(argc, argv, command_line_keys);
|
cv::CommandLineParser args(argc, argv, command_line_keys);
|
||||||
if (args.has("help"))
|
if (args.get<bool>("help"))
|
||||||
{
|
{
|
||||||
args.printMessage();
|
args.printMessage();
|
||||||
return;
|
return;
|
||||||
@ -791,7 +791,7 @@ void TestBase::Init(const std::vector<std::string> & availableImpls,
|
|||||||
|
|
||||||
::testing::AddGlobalTestEnvironment(new PerfEnvironment);
|
::testing::AddGlobalTestEnvironment(new PerfEnvironment);
|
||||||
|
|
||||||
param_impl = args.has("perf_run_cpu") ? "plain" : args.get<std::string>("perf_impl");
|
param_impl = args.get<bool>("perf_run_cpu") ? "plain" : args.get<std::string>("perf_impl");
|
||||||
std::string perf_strategy = args.get<std::string>("perf_strategy");
|
std::string perf_strategy = args.get<std::string>("perf_strategy");
|
||||||
if (perf_strategy == "default")
|
if (perf_strategy == "default")
|
||||||
{
|
{
|
||||||
@ -816,24 +816,24 @@ void TestBase::Init(const std::vector<std::string> & availableImpls,
|
|||||||
param_seed = args.get<unsigned int>("perf_seed");
|
param_seed = args.get<unsigned int>("perf_seed");
|
||||||
param_time_limit = std::max(0., args.get<double>("perf_time_limit"));
|
param_time_limit = std::max(0., args.get<double>("perf_time_limit"));
|
||||||
param_force_samples = args.get<unsigned int>("perf_force_samples");
|
param_force_samples = args.get<unsigned int>("perf_force_samples");
|
||||||
param_write_sanity = args.has("perf_write_sanity");
|
param_write_sanity = args.get<bool>("perf_write_sanity");
|
||||||
param_verify_sanity = args.has("perf_verify_sanity");
|
param_verify_sanity = args.get<bool>("perf_verify_sanity");
|
||||||
|
|
||||||
#ifndef WINRT
|
#ifndef WINRT
|
||||||
test_ipp_check = !args.has("perf_ipp_check") ? getenv("OPENCV_IPP_CHECK") != NULL : true;
|
test_ipp_check = !args.get<bool>("perf_ipp_check") ? getenv("OPENCV_IPP_CHECK") != NULL : true;
|
||||||
#else
|
#else
|
||||||
test_ipp_check = false;
|
test_ipp_check = false;
|
||||||
#endif
|
#endif
|
||||||
param_threads = args.get<int>("perf_threads");
|
param_threads = args.get<int>("perf_threads");
|
||||||
#ifdef CV_COLLECT_IMPL_DATA
|
#ifdef CV_COLLECT_IMPL_DATA
|
||||||
param_collect_impl = args.has("perf_collect_impl");
|
param_collect_impl = args.get<bool>("perf_collect_impl");
|
||||||
#endif
|
#endif
|
||||||
#ifdef ANDROID
|
#ifdef ANDROID
|
||||||
param_affinity_mask = args.get<int>("perf_affinity_mask");
|
param_affinity_mask = args.get<int>("perf_affinity_mask");
|
||||||
log_power_checkpoints = args.has("perf_log_power_checkpoints");
|
log_power_checkpoints = args.has("perf_log_power_checkpoints");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool param_list_impls = args.has("perf_list_impls");
|
bool param_list_impls = args.get<bool>("perf_list_impls");
|
||||||
|
|
||||||
if (param_list_impls)
|
if (param_list_impls)
|
||||||
{
|
{
|
||||||
@ -861,7 +861,7 @@ void TestBase::Init(const std::vector<std::string> & availableImpls,
|
|||||||
|
|
||||||
#ifdef HAVE_CUDA
|
#ifdef HAVE_CUDA
|
||||||
|
|
||||||
bool printOnly = args.has("perf_cuda_info_only");
|
bool printOnly = args.get<bool>("perf_cuda_info_only");
|
||||||
|
|
||||||
if (printOnly)
|
if (printOnly)
|
||||||
exit(0);
|
exit(0);
|
||||||
|
Loading…
Reference in New Issue
Block a user