File size: 2,172 Bytes
7ee7e3a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import os
import cv2
import base64
import requests
import numpy as np
from tqdm import tqdm
from pathlib import Path
from zipfile import ZipFile

def download_and_unzip_model(root_dir:str, name:str, 
    url:str, file_size:int, unzip:bool = False):
	'''
	Checking model in model_path
	download model if file not found
	@params:
 		root_dir(str): The root directory of model.
		name(str): The name of model.
		url(str): The url of model.
		file_size(int): The size of model.
		unzip(bool): Unzip the model or not.
	'''
	Path(root_dir).mkdir(parents=True, exist_ok=True)

	# check if model is already or not
	print(f'Downloading {root_dir.split("/")[-1]} model, please wait.')
	response = requests.get(url, stream=True)
	
	progress = tqdm(response.iter_content(1024), 
				f'Downloading model', 
				total=file_size, unit='B', 
				unit_scale=True, unit_divisor=1024)
	save_dir = f'{root_dir}/{name}'
	with open(save_dir, 'wb') as f:
		for data in progress:
			f.write(data)
			progress.update(len(data))
		print(f'Done downloading  {root_dir.split("/")[-1]} model.')

	# unzip model
	if unzip:
		with ZipFile(save_dir, 'r') as zip_obj:
			zip_obj.extractall(root_dir)
			print(f'Done unzip {root_dir.split("/")[-1]} model.')
		os.remove(save_dir)

def encode_image2string(image):
	image_list = cv2.imencode('.jpg', image)[1]
	image_bytes = image_list.tobytes()
	image_encoded = base64.b64encode(image_bytes)
	return image_encoded

def decode_string2image(image_encoded):
	jpg_original = base64.b64decode(image_encoded)
	jpg_as_np = np.frombuffer(jpg_original, dtype=np.uint8)
	image = cv2.imdecode(jpg_as_np, flags=1)
	return image

def resize_image(image, size_percent):
    '''
    Resize an image so that its longest edge equals to the given size.
    Args:
        image(cv2.Image): The input image.
        size_percent(int): The size of longest edge.
    Returns:
        image(cv2.Image): The output image.
    '''
    width   = int(image.shape[1] * size_percent / 100)
    height  = int(image.shape[0] * size_percent / 100)
    dim     = (width, height)
    
    # resize image
    resized = cv2.resize(image, dim, interpolation = cv2.INTER_AREA)
    return resized