diff options
author | Chris Dimich <Chris.Dimich@boundarydevices.com> | 2021-03-01 16:27:43 -0800 |
---|---|---|
committer | Otavio Salvador <otavio@ossystems.com.br> | 2021-03-02 19:26:05 -0300 |
commit | 852bda2f1c87f2afaf697c6d3fc6d8c119d6e65a (patch) | |
tree | f176df277f2ce360a26cdaedf8c2c06ab8dc5e36 /recipes-support/opencv/opencv/0001-Add-smaller-version-of-download_models.py.patch | |
parent | aedfe1557e82da6efa53c12b08dbacc38bb674b5 (diff) | |
download | meta-freescale-852bda2f1c87f2afaf697c6d3fc6d8c119d6e65a.tar.gz |
opencv_4.4.0.imx: add recipe
Add recipe to support additional machine learning demos and tiny dnn.
Signed-off-by: Chris Dimich <Chris.Dimich@boundarydevices.com>
(cherry picked from commit dc6bebac65d3733548de568f31ca5bfbf9e8a8a5)
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.patch | 179 |
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 @@ | |||
1 | From fca4d9eec289f22c081daa2c61a1110e3f268f92 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tom Hochstein <tom.hochstein@nxp.com> | ||
3 | Date: Tue, 1 Sep 2020 14:57:07 -0500 | ||
4 | Subject: [PATCH] Add smaller version of download_models.py | ||
5 | |||
6 | Signed-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 | |||
12 | diff --git a/testdata/dnn/download_models_basic.py b/testdata/dnn/download_models_basic.py | ||
13 | new file mode 100644 | ||
14 | index 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 | -- | ||
178 | 2.17.1 | ||
179 | |||