mirror of https://github.com/opencv/opencv.git
pull/12124/head
parent
2df0345985
commit
df9efbbd1f
4 changed files with 88 additions and 29 deletions
@ -0,0 +1,74 @@ |
||||
#!/usr/bin/env python |
||||
|
||||
from __future__ import print_function |
||||
import hashlib |
||||
import time |
||||
import sys |
||||
import xml.etree.ElementTree as ET |
||||
if sys.version_info[0] < 3: |
||||
from urllib2 import urlopen |
||||
else: |
||||
from urllib.request import urlopen |
||||
|
||||
class HashMismatchException(Exception): |
||||
def __init__(self, expected, actual): |
||||
Exception.__init__(self) |
||||
self.expected = expected |
||||
self.actual = actual |
||||
def __str__(self): |
||||
return 'Hash mismatch: {} vs {}'.format(self.expected, self.actual) |
||||
|
||||
class MetalinkDownloader(object): |
||||
BUFSIZE = 10*1024*1024 |
||||
NS = {'ml': 'urn:ietf:params:xml:ns:metalink'} |
||||
tick = 0 |
||||
|
||||
def download(self, metalink_file): |
||||
status = True |
||||
for file_elem in ET.parse(metalink_file).getroot().findall('ml:file', self.NS): |
||||
url = file_elem.find('ml:url', self.NS).text |
||||
fname = file_elem.attrib['name'] |
||||
hash_sum = file_elem.find('ml:hash', self.NS).text |
||||
print('*** {}'.format(fname)) |
||||
try: |
||||
self.verify(hash_sum, fname) |
||||
except Exception as ex: |
||||
print(' {}'.format(ex)) |
||||
try: |
||||
print(' {}'.format(url)) |
||||
with open(fname, 'wb') as file_stream: |
||||
self.buffered_read(urlopen(url), file_stream.write) |
||||
self.verify(hash_sum, fname) |
||||
except Exception as ex: |
||||
print(' {}'.format(ex)) |
||||
print(' FAILURE') |
||||
status = False |
||||
continue |
||||
print(' SUCCESS') |
||||
return status |
||||
|
||||
def print_progress(self, msg, timeout = 0): |
||||
if time.time() - self.tick > timeout: |
||||
print(msg, end='') |
||||
sys.stdout.flush() |
||||
self.tick = time.time() |
||||
|
||||
def buffered_read(self, in_stream, processing): |
||||
self.print_progress(' >') |
||||
while True: |
||||
buf = in_stream.read(self.BUFSIZE) |
||||
if not buf: |
||||
break |
||||
processing(buf) |
||||
self.print_progress('>', 5) |
||||
print(' done') |
||||
|
||||
def verify(self, hash_sum, fname): |
||||
sha = hashlib.sha1() |
||||
with open(fname, 'rb') as file_stream: |
||||
self.buffered_read(file_stream, sha.update) |
||||
if hash_sum != sha.hexdigest(): |
||||
raise HashMismatchException(hash_sum, sha.hexdigest()) |
||||
|
||||
if __name__ == '__main__': |
||||
sys.exit(0 if MetalinkDownloader().download('weights.meta4') else 1) |
@ -0,0 +1,13 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<metalink xmlns="urn:ietf:params:xml:ns:metalink"> |
||||
<file name="res10_300x300_ssd_iter_140000_fp16.caffemodel"> |
||||
<identity>OpenCV face detector FP16 weights</identity> |
||||
<hash type="sha-1">31fc22bfdd907567a04bb45b7cfad29966caddc1</hash> |
||||
<url>https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20180205_fp16/res10_300x300_ssd_iter_140000_fp16.caffemodel</url> |
||||
</file> |
||||
<file name="opencv_face_detector_uint8.pb"> |
||||
<identity>OpenCV face detector UINT8 weights</identity> |
||||
<hash type="sha-1">4f2fdf6f231d759d7bbdb94353c5a68690f3d2ae</hash> |
||||
<url>https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20180220_uint8/opencv_face_detector_uint8.pb</url> |
||||
</file> |
||||
</metalink> |
Loading…
Reference in new issue