mirror of
https://github.com/opencv/opencv.git
synced 2025-06-08 01:53:19 +08:00
68 lines
2.3 KiB
C++
68 lines
2.3 KiB
C++
// This file is part of OpenCV project.
|
|
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
|
// of this distribution and at http://opencv.org/license.html.
|
|
|
|
#include "../precomp.hpp"
|
|
|
|
#include <vector>
|
|
|
|
#include <opencv2/core/utils/logger.defines.hpp>
|
|
#undef CV_LOG_STRIP_LEVEL
|
|
#define CV_LOG_STRIP_LEVEL CV_LOG_LEVEL_VERBOSE + 1
|
|
#include "opencv2/core/utils/logger.hpp"
|
|
#include "opencv2/core/utils/filesystem.hpp"
|
|
|
|
namespace cv { namespace samples {
|
|
|
|
static cv::Ptr< std::vector<cv::String> > g_data_search_path;
|
|
static cv::Ptr< std::vector<cv::String> > g_data_search_subdir;
|
|
|
|
static std::vector<cv::String>& _getDataSearchPath()
|
|
{
|
|
if (g_data_search_path.empty())
|
|
g_data_search_path.reset(new std::vector<cv::String>());
|
|
return *(g_data_search_path.get());
|
|
}
|
|
|
|
static std::vector<cv::String>& _getDataSearchSubDirectory()
|
|
{
|
|
if (g_data_search_subdir.empty())
|
|
{
|
|
g_data_search_subdir.reset(new std::vector<cv::String>());
|
|
g_data_search_subdir->push_back("samples/data");
|
|
g_data_search_subdir->push_back("data");
|
|
g_data_search_subdir->push_back("");
|
|
}
|
|
return *(g_data_search_subdir.get());
|
|
}
|
|
|
|
|
|
CV_EXPORTS void addSamplesDataSearchPath(const cv::String& path)
|
|
{
|
|
if (utils::fs::isDirectory(path))
|
|
_getDataSearchPath().push_back(path);
|
|
}
|
|
CV_EXPORTS void addSamplesDataSearchSubDirectory(const cv::String& subdir)
|
|
{
|
|
_getDataSearchSubDirectory().push_back(subdir);
|
|
}
|
|
|
|
cv::String findFile(const cv::String& relative_path, bool required, bool silentMode)
|
|
{
|
|
CV_LOG_DEBUG(NULL, cv::format("cv::samples::findFile('%s', %s)", relative_path.c_str(), required ? "true" : "false"));
|
|
cv::String result = cv::utils::findDataFile(relative_path,
|
|
"OPENCV_SAMPLES_DATA_PATH",
|
|
&_getDataSearchPath(),
|
|
&_getDataSearchSubDirectory());
|
|
if (result != relative_path && !silentMode)
|
|
{
|
|
CV_LOG_WARNING(NULL, "cv::samples::findFile('" << relative_path << "') => '" << result << "'");
|
|
}
|
|
if (result.empty() && required)
|
|
CV_Error(cv::Error::StsError, cv::format("OpenCV samples: Can't find required data file: %s", relative_path.c_str()));
|
|
return result;
|
|
}
|
|
|
|
|
|
}} // namespace
|