From 3212dd546537be5d344ce2f8adcb578dbe3f075e Mon Sep 17 00:00:00 2001 From: Maksim Shabunin Date: Wed, 3 Dec 2014 17:57:35 +0300 Subject: [PATCH] Python test: new options provide local test data paths --- modules/python/test/test.py | 46 +++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/modules/python/test/test.py b/modules/python/test/test.py index 03cd2f3545..a4a3d759a9 100755 --- a/modules/python/test/test.py +++ b/modules/python/test/test.py @@ -13,6 +13,7 @@ import os import getopt import operator import functools +import argparse import cv2.cv as cv @@ -20,6 +21,15 @@ from test2 import * class OpenCVTests(unittest.TestCase): + # path to local repository folder containing 'samples' folder + repoPath = None + # github repository url + repoUrl = 'https://raw.github.com/Itseez/opencv/2.4' + # path to local folder containing 'camera_calibration.tar.gz' + dataPath = None + # data url + dataUrl = 'http://docs.opencv.org/data' + depths = [ cv.IPL_DEPTH_8U, cv.IPL_DEPTH_8S, cv.IPL_DEPTH_16U, cv.IPL_DEPTH_16S, cv.IPL_DEPTH_32S, cv.IPL_DEPTH_32F, cv.IPL_DEPTH_64F ] mat_types = [ @@ -73,12 +83,28 @@ class OpenCVTests(unittest.TestCase): def get_sample(self, filename, iscolor = cv.CV_LOAD_IMAGE_COLOR): if not filename in self.image_cache: - filedata = urllib.urlopen("https://raw.github.com/Itseez/opencv/2.4/" + filename).read() + filedata = None + if OpenCVTests.repoPath is not None: + candidate = OpenCVTests.repoPath + '/' + filename + if os.path.isfile(candidate): + with open(candidate, 'rb') as f: + filedata = f.read() + if filedata is None: + filedata = urllib.urlopen(OpenCVTests.repoUrl + '/' + filename).read() imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1) cv.SetData(imagefiledata, filedata, len(filedata)) self.image_cache[filename] = cv.DecodeImageM(imagefiledata, iscolor) return self.image_cache[filename] + def get_data(self, filename, urlbase): + if (not os.path.isfile(filename)): + if OpenCVTests.dataPath is not None: + candidate = OpenCVTests.dataPath + '/' + filename + if os.path.isfile(candidate): + return candidate + urllib.urlretrieve(urlbase + '/' + filename, filename) + return filename + def setUp(self): self.image_cache = {} @@ -1646,9 +1672,8 @@ class AreaTests(OpenCVTests): cv.SetData(imagefiledata, filedata, len(filedata)) return cv.DecodeImageM(imagefiledata) - if (not os.path.isfile("camera_calibration.tar.gz")): - urllib.urlretrieve("http://docs.opencv.org/data/camera_calibration.tar.gz", "camera_calibration.tar.gz") - tf = tarfile.open("camera_calibration.tar.gz") + filename = self.get_data("camera_calibration.tar.gz", OpenCVTests.dataUrl) + tf = tarfile.open(filename) num_x_ints = 8 num_y_ints = 6 @@ -2204,9 +2229,20 @@ class DocumentFragmentTests(OpenCVTests): self.assertNotEqual(self.hashimg(h1), self.hashimg(h2)) if __name__ == '__main__': + parser = argparse.ArgumentParser(description='run OpenCV python tests') + parser.add_argument('--repo', help='use sample image files from local git repository (path to folder), ' + 'if not set, samples will be downloaded from github.com') + parser.add_argument('--data', help='use data files from local folder (path to folder), ' + 'if not set, data files will be downloaded from docs.opencv.org') + args, other = parser.parse_known_args() print "testing", cv.__version__ + print "Local repo path:", args.repo + print "Local data path:", args.data + OpenCVTests.repoPath = args.repo + OpenCVTests.dataPath = args.data random.seed(0) - unittest.main() + unit_argv = [sys.argv[0]] + other; + unittest.main(argv=unit_argv) # optlist, args = getopt.getopt(sys.argv[1:], 'l:rd') # loops = 1 # shuffle = 0