У меня есть библиотека imagedup, загруженная в python, и инициализация ее функции CNN()
занимает довольно много времени, поэтому я подумал, что инициализирую ее глобально. Однако, когда я пытаюсь использовать предварительно загруженный модуль внутри функции flask, он выдает ошибку.
from imagededup.methods import CNN
from flask import jsonify
cnn_encoder = CNN()
encodings = {}
def encode(image_directory, picture, module):
if picture not in encodings.keys():
encoding = cnn_encoder.encode_image(image_file=image_directory + "\\" + picture)[0]
encodings[picture] = encoding
return jsonify({"status": "S",
"message": "[+] Encoded Image: " + picture,
"data": {}})
else:
return jsonify({"status": "S",
"message": "[*] " + picture + " is already encoded.",
"data": {}})
После запуска encode()
из запроса POST я получаю следующую ошибку:
Traceback (most recent call last):
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2463, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2449, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1866, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\Aniru\Desktop\Photo Sorting App\main.py", line 34, in parser_process
return detect_similarities.encode(params["filepath"], params["picture"], params["module"])
File "C:\Users\Aniru\Desktop\Photo Sorting App\library\modules\detect_similarities.py", line 50, in encode
encoding = cnn_encoder.encode_image(image_file=image_directory + "\\" + picture)[0]
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\imagededup-0.2.2-py3.7-win-amd64.egg\imagededup\methods\cnn.py", line 151, in encode_image
if isinstance(image_pp, np.ndarray)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\imagededup-0.2.2-py3.7-win-amd64.egg\imagededup\methods\cnn.py", line 76, in _get_cnn_features_single
return self.model.predict(image_pp)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1113, in predict
self, x, batch_size=batch_size, verbose=verbose, steps=steps)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py", line 195, in model_iteration
f = _make_execution_function(model, mode)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py", line 122, in _make_execution_function
return model._make_execution_function(mode)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1989, in _make_execution_function
self._make_predict_function()
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1979, in _make_predict_function
**kwargs)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\backend.py", line 3201, in function
return GraphExecutionFunction(inputs, outputs, updates=updates, **kwargs)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\backend.py", line 2939, in __init__
with ops.control_dependencies(self.outputs):
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\ops.py", line 5028, in control_dependencies
return get_default_graph().control_dependencies(control_inputs)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\ops.py", line 4528, in control_dependencies
c = self.as_graph_element(c)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\ops.py", line 3478, in as_graph_element
return self._as_graph_element_locked(obj, allow_tensor, allow_operation)
File "C:\Users\Aniru\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\ops.py", line 3557, in _as_graph_element_locked
raise ValueError("Tensor %s is not an element of this graph." % obj)
ValueError: Tensor Tensor("global_average_pooling2d/Mean:0", shape=(?, 1024), dtype=float32) is not an element of this graph.
Однако после помещения cnn_encoder = CNN()
внутри encode()
код работает нормально, но выполнение занимает очень много времени. Как я могу загрузить модуль CNN()
перед запуском функции кодирования?
Еще один вопрос, который у меня был, заключался в том, будут ли значения внутри encodings
постоянными при каждом запросе, который я делаю к flask?