summaryrefslogtreecommitdiffstats
path: root/recipes-support/opencv/opencv/0001-Add-smaller-version-of-download_models.py.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-support/opencv/opencv/0001-Add-smaller-version-of-download_models.py.patch')
-rw-r--r--recipes-support/opencv/opencv/0001-Add-smaller-version-of-download_models.py.patch179
1 files changed, 179 insertions, 0 deletions
diff --git a/recipes-support/opencv/opencv/0001-Add-smaller-version-of-download_models.py.patch b/recipes-support/opencv/opencv/0001-Add-smaller-version-of-download_models.py.patch
new file mode 100644
index 00000000..0aabee29
--- /dev/null
+++ b/recipes-support/opencv/opencv/0001-Add-smaller-version-of-download_models.py.patch
@@ -0,0 +1,179 @@
1From fca4d9eec289f22c081daa2c61a1110e3f268f92 Mon Sep 17 00:00:00 2001
2From: Tom Hochstein <tom.hochstein@nxp.com>
3Date: Tue, 1 Sep 2020 14:57:07 -0500
4Subject: [PATCH] Add smaller version of download_models.py
5
6Signed-off-by: Tom Hochstein <tom.hochstein@nxp.com>
7---
8 testdata/dnn/download_models_basic.py | 159 ++++++++++++++++++++++++++
9 1 file changed, 159 insertions(+)
10 create mode 100644 testdata/dnn/download_models_basic.py
11
12diff --git a/testdata/dnn/download_models_basic.py b/testdata/dnn/download_models_basic.py
13new file mode 100644
14index 0000000..5c8a616
15--- /dev/null
16+++ b/testdata/dnn/download_models_basic.py
17@@ -0,0 +1,159 @@
18+#!/usr/bin/env python
19+
20+from __future__ import print_function
21+import hashlib
22+import sys
23+import tarfile
24+if sys.version_info[0] < 3:
25+ from urllib2 import urlopen
26+else:
27+ from urllib.request import urlopen
28+
29+
30+class Model:
31+ MB = 1024*1024
32+ BUFSIZE = 10*MB
33+
34+ def __init__(self, **kwargs):
35+ self.name = kwargs.pop('name')
36+ self.url = kwargs.pop('url', None)
37+ self.filename = kwargs.pop('filename')
38+ self.sha = kwargs.pop('sha', None)
39+ self.archive = kwargs.pop('archive', None)
40+ self.member = kwargs.pop('member', None)
41+
42+ def __str__(self):
43+ return 'Model <{}>'.format(self.name)
44+
45+ def printRequest(self, r):
46+ def getMB(r):
47+ d = dict(r.info())
48+ for c in ['content-length', 'Content-Length']:
49+ if c in d:
50+ return int(d[c]) / self.MB
51+ return '<unknown>'
52+ print(' {} {} [{} Mb]'.format(r.getcode(), r.msg, getMB(r)))
53+
54+ def verify(self):
55+ if not self.sha:
56+ return False
57+ print(' expect {}'.format(self.sha))
58+ sha = hashlib.sha1()
59+ try:
60+ with open(self.filename, 'rb') as f:
61+ while True:
62+ buf = f.read(self.BUFSIZE)
63+ if not buf:
64+ break
65+ sha.update(buf)
66+ print(' actual {}'.format(sha.hexdigest()))
67+ return self.sha == sha.hexdigest()
68+ except Exception as e:
69+ print(' catch {}'.format(e))
70+
71+ def get(self):
72+ if self.verify():
73+ print(' hash match - skipping')
74+ return True
75+
76+ if self.archive or self.member:
77+ assert(self.archive and self.member)
78+ print(' hash check failed - extracting')
79+ print(' get {}'.format(self.member))
80+ self.extract()
81+ else:
82+ assert(self.url)
83+ print(' hash check failed - downloading')
84+ print(' get {}'.format(self.url))
85+ self.download()
86+
87+ print(' done')
88+ print(' file {}'.format(self.filename))
89+ return self.verify()
90+
91+ def download(self):
92+ try:
93+ r = urlopen(self.url, timeout=60)
94+ self.printRequest(r)
95+ self.save(r)
96+ except Exception as e:
97+ print(' catch {}'.format(e))
98+
99+ def extract(self):
100+ try:
101+ with tarfile.open(self.archive) as f:
102+ assert self.member in f.getnames()
103+ self.save(f.extractfile(self.member))
104+ except Exception as e:
105+ print(' catch {}'.format(e))
106+
107+ def save(self, r):
108+ with open(self.filename, 'wb') as f:
109+ print(' progress ', end='')
110+ sys.stdout.flush()
111+ while True:
112+ buf = r.read(self.BUFSIZE)
113+ if not buf:
114+ break
115+ f.write(buf)
116+ print('>', end='')
117+ sys.stdout.flush()
118+
119+models = [
120+ Model(
121+ name='Fcn',
122+ url='http://dl.caffe.berkeleyvision.org/fcn8s-heavy-pascal.caffemodel',
123+ sha='c449ea74dd7d83751d1357d6a8c323fcf4038962',
124+ filename='fcn8s-heavy-pascal.caffemodel'),
125+ Model(
126+ name='SqueezeNet_v1.1',
127+ url='https://raw.githubusercontent.com/DeepScale/SqueezeNet/b5c3f1a23713c8b3fd7b801d229f6b04c64374a5/SqueezeNet_v1.1/squeezenet_v1.1.caffemodel',
128+ sha='3397f026368a45ae236403ccc81cfcbe8ebe1bd0',
129+ filename='squeezenet_v1.1.caffemodel'),
130+ Model(
131+ name='Colorization',
132+ url='https://raw.githubusercontent.com/richzhang/colorization/master/models/colorization_deploy_v2.prototxt',
133+ sha='f528334e386a69cbaaf237a7611d833bef8e5219',
134+ filename='colorization_deploy_v2.prototxt'),
135+ Model(
136+ name='Colorization',
137+ url='http://eecs.berkeley.edu/~rich.zhang/projects/2016_colorization/files/demo_v2/colorization_release_v2.caffemodel',
138+ sha='21e61293a3fa6747308171c11b6dd18a68a26e7f',
139+ filename='colorization_release_v2.caffemodel'),
140+ Model(
141+ name='OpenPose/pose/coco', # https://github.com/CMU-Perceptual-Computing-Lab/openpose
142+ url='http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/coco/pose_iter_440000.caffemodel',
143+ sha='ac7e97da66f3ab8169af2e601384c144e23a95c1',
144+ filename='openpose_pose_coco.caffemodel'),
145+ Model(
146+ name='YOLOv3', # https://pjreddie.com/darknet/yolo/
147+ url='https://pjreddie.com/media/files/yolov3.weights',
148+ sha='520878f12e97cf820529daea502acca380f1cb8e',
149+ filename='yolov3.weights'),
150+ Model(
151+ name='EAST', # https://github.com/argman/EAST (a TensorFlow model), https://arxiv.org/abs/1704.03155v2 (a paper)
152+ url='https://www.dropbox.com/s/r2ingd0l3zt8hxs/frozen_east_text_detection.tar.gz?dl=1',
153+ sha='3ca8233d6edd748f7ed23246c8ca24cbf696bb94',
154+ filename='frozen_east_text_detection.tar.gz'),
155+ Model(
156+ name='EAST',
157+ archive='frozen_east_text_detection.tar.gz',
158+ member='frozen_east_text_detection.pb',
159+ sha='fffabf5ac36f37bddf68e34e84b45f5c4247ed06',
160+ filename='frozen_east_text_detection.pb'),
161+]
162+
163+# Note: models will be downloaded to current working directory
164+# expected working directory is opencv_extra/testdata/dnn
165+if __name__ == '__main__':
166+ failedModels = []
167+ for m in models:
168+ print(m)
169+ if not m.get():
170+ failedModels.append(m.filename)
171+
172+ if failedModels:
173+ print("Following models have not been downloaded:")
174+ for f in failedModels:
175+ print("* {}".format(f))
176+ exit(15)
177--
1782.17.1
179