Merge pull request #19668 from asmorkalov:as/filesystem_py

* Add Python Bindings for getCacheDirectory function

* Added getCacheDirectory interop test with image codecs.

Co-authored-by: Sergey Slashchinin <sergei.slashchinin@xperience.ai>
pull/19222/head
Alexander Smorkalov 4 years ago committed by GitHub
parent e2ca50f1cb
commit 2e429268ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      modules/core/include/opencv2/core/bindings_utils.hpp
  2. 13
      modules/core/src/bindings_utils.cpp
  3. 41
      modules/python/test/test_fs_cache_dir.py

@ -144,7 +144,10 @@ AsyncArray testAsyncException()
return p.getArrayResult(); return p.getArrayResult();
} }
namespace fs {
CV_EXPORTS_W cv::String getCacheDirectoryForDownloads();
} // namespace fs
//! @} //! @}
}} // namespace }} // namespaces cv / utils
#endif // OPENCV_CORE_BINDINGS_UTILS_HPP #endif // OPENCV_CORE_BINDINGS_UTILS_HPP

@ -5,6 +5,8 @@
#include "precomp.hpp" #include "precomp.hpp"
#include "opencv2/core/bindings_utils.hpp" #include "opencv2/core/bindings_utils.hpp"
#include <sstream> #include <sstream>
#include <opencv2/core/utils/filesystem.hpp>
#include <opencv2/core/utils/filesystem.private.hpp>
namespace cv { namespace utils { namespace cv { namespace utils {
@ -208,4 +210,15 @@ CV_EXPORTS_W String dumpInputOutputArrayOfArrays(InputOutputArrayOfArrays argume
return ss.str(); return ss.str();
} }
namespace fs {
cv::String getCacheDirectoryForDownloads()
{
#if OPENCV_HAVE_FILESYSTEM_SUPPORT
return cv::utils::fs::getCacheDirectory("downloads", "OPENCV_DOWNLOADS_CACHE_DIR");
#else
CV_Error(Error::StsNotImplemented, "File system support is disabled in this OpenCV build!");
#endif
}
} // namespace fs
}} // namespace }} // namespace

@ -0,0 +1,41 @@
# Python 2/3 compatibility
from __future__ import print_function
import numpy as np
import cv2 as cv
import os
import datetime
from tests_common import NewOpenCVTests
class get_cache_dir_test(NewOpenCVTests):
def test_get_cache_dir(self):
#New binding
path = cv.utils.fs.getCacheDirectoryForDownloads()
self.assertTrue(os.path.exists(path))
self.assertTrue(os.path.isdir(path))
def get_cache_dir_imread_interop(self, ext):
path = cv.utils.fs.getCacheDirectoryForDownloads()
gold_image = np.ones((16, 16, 3), np.uint8)
read_from_file = np.zeros((16, 16, 3), np.uint8)
test_file_name = os.path.join(path, "test." + ext)
try:
cv.imwrite(test_file_name, gold_image)
read_from_file = cv.imread(test_file_name)
finally:
os.remove(test_file_name)
self.assertEqual(cv.norm(gold_image, read_from_file), 0)
def test_get_cache_dir_imread_interop_png(self):
self.get_cache_dir_imread_interop("png")
def test_get_cache_dir_imread_interop_jpeg(self):
self.get_cache_dir_imread_interop("jpg")
def test_get_cache_dir_imread_interop_tiff(self):
self.get_cache_dir_imread_interop("tif")
if __name__ == '__main__':
NewOpenCVTests.bootstrap()
Loading…
Cancel
Save