-
Notifications
You must be signed in to change notification settings - Fork 0
/
AnimalModel.py
executable file
·138 lines (104 loc) · 4.35 KB
/
AnimalModel.py
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import requests
from urllib import request
import numpy as np
import cv2
class Cachorro(object):
def __init__(self):
self.__url = 'https://random.dog/woof.json' # URL base para acessar API do cachorro
self.__tipo = ''
def request_cachorro(self):
"""[Resumo]
Essa função é responsável por realizar requisições para a API e determinar
o tipo da mídia que foi retornada.
Retornos:
[JSON, int]: JSON contém as informações da requisição e inteiro indica tipo de mídia.
"""
response = requests.get(self.__url) # Realiza requisição à API
'''
Tipos possíveis de mídia:
Imagem: jpg, PNG, png, JPG, jpeg (retorna 0)
Gif: gif (retorna 1)
Video: mp4, webm (retorna 2)
'''
# Pega resultado da requisição e separa url para definir extensão da mídia
tipo = response.json()['url'].split('.')
self.__tipo = tipo[2]
codigo_tipo = 0
if (self.__tipo == 'gif'):
codigo_tipo = 1
elif (self.__tipo == 'mp4' or self.__tipo == 'webm'):
codigo_tipo = 2
# Retorna resposta completa e o tipo de extensão da mídia
return response.json(), codigo_tipo
def return_image(self, response):
"""[Resumo]
Função responsável por tratar o resultado da requisição quando o link
é referente a mídia de imagem, transformando-a em um frame que possa
ser exibido pelo OpenCV.
Args:
response (JSON): Resposta retornada pela função request_cachorro().
Returns:
[cv2.image]: Imagem decodificada com cores pelo OpenCV.
"""
url_image = response['url']
print(response['url'])
resp = request.urlopen(url_image)
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
return image
def return_video(self, response):
"""[Resumo]
Função responsável por realizar download da mídica quando é do tipo vídeo.
Salva arquivo temporário na mesma pasta para que seja exibido na interface.
Args:
response (JSON): Resposta retornada pela função request_cachorro().
Returns:
[str]: String contendo nome do vídeo temporário
"""
nome = 'video_temp.' + self.__tipo
url_video = response['url']
print("Download do video: {}".format(url_video))
video = request.urlretrieve(url_video, nome)
return nome
class Raposa(object):
def __init__(self):
self.__url = 'https://randomfox.ca/floof/' # URL base para acessar API da raposa
self.__tipo = ''
def request_raposa(self):
"""[Resumo]
Essa função é responsável por realizar requisições para a API e determinar
o tipo da mídia que foi retornada.
Retornos:
[JSON, int]: JSON contém as informações da requisição e inteiro indica tipo de mídia.
"""
response = requests.get(self.__url)
'''
Tipos possíveis:
Imagem: jpg (retorna 0)
'''
tipo = response.json()['image'].split('.')
'''
https://randomfox.ca/images/114.jpg > ['https://randomfox', 'ca/images/114', 'jpg']
'''
self.__tipo = tipo[2]
codigo_tipo = 0
if (self.__tipo != 'jpg'):
codigo_tipo = 1
return response.json(), codigo_tipo
def return_image(self, response):
"""[Resumo]
Função responsável por tratar o resultado da requisição quando o link
é referente a mídia de imagem, transformando-a em um frame que possa
ser exibido pelo OpenCV.
Args:
response (JSON): Resposta retornada pela função request_cachorro().
Returns:
[cv2.image]: Imagem decodificada com cores pelo OpenCV.
"""
url_image = response['image']
resp = request.Request(url_image, headers={'User-Agent': 'Mozilla/5.0'})
resp = request.urlopen(resp)
#resp = request.urlopen(url_image)
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
return image