Возникла проблема с загрузкой изображения, возвращенного из cv2.imdecode()

Я пытаюсь загрузить изображение, возвращенное cv2.imdecode, в облако, но получаю эту ошибку.

 The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Мой код выглядит так:

def url_to_image(url):
    # download the image, convert it to a NumPy array, and then read
    # it into OpenCV format
    resp = urllib.request.urlopen(url)
    image = np.asarray(bytearray(resp.read()), dtype="uint8")
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)
    cloudinary_response = cloudinary.uploader.upload(image)
    return cloudinary_response

Выдает ошибку в строке cloudinary.uploader.upload. Я не могу понять тип возврата cv2.imdecode() и можно ли его загрузить на серверы изображений, такие как S3 BUCKET или cloudinary.

Traceback - 

ValueError at /api/v1/users/getstyledimages
The truth value of an array with more than one element is 
 ambiguous. Use a.any() or a.all()

Request Method: POST
Request URL: 
https://rhymella.mobikasa.net/api/v1/users/getstyledimages
Django Version: 2.0.3
Python Executable: /var/www/rhymella/rhymella/bin/python
Python Version: 3.5.2
Python Path: ['/var/www/rhymella', 
'/var/www/rhymella/rhymella/lib/python35.zip', 
'/var/www/rhymella/rhymella/lib/python3.5', 
'/var/www/rhymella/rhymella/lib/python3.5/plat-x86_64-linux-gnu', 
'/var/www/rhymella/rhymella/lib/python3.5/lib-dynload', 
'/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', 
'/var/www/rhymella/rhymella/lib/python3.5/site-packages', 
'/usr/local/lib/python3.5/dist-packages/']
Server time: Tue, 16 Oct 2018 15:58:09 +0000
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'api',
 'cloudinary',
'newadmin']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']


Traceback:

File "/var/www/rhymella/rhymella/lib/python3.5/site- 
packages/django/core/handlers/exception.py" in inner
35.             response = get_response(request)

File "/var/www/rhymella/rhymella/lib/python3.5/site- 
packages/django/core/handlers/base.py" in _get_response
128.                 response = 
self.process_exception_by_middleware(e, request)

File "/var/www/rhymella/rhymella/lib/python3.5/site- 
packages/django/core/handlers/base.py" in _get_response
126.                 response = wrapped_callback(request, 
*callback_args, **callback_kwargs)

File "/var/www/rhymella/rhymella/lib/python3.5/site- 
packages/django/views/decorators/csrf.py" in wrapped_view
54.         return view_func(*args, **kwargs)

File "/var/www/rhymella/rhymella/lib/python3.5/site- 
packages/django/views/generic/base.py" in view
69.             return self.dispatch(request, *args, **kwargs)

File "/var/www/rhymella/rhymella/lib/python3.5/site- 
 packages/rest_framework/views.py" in dispatch
494.             response = self.handle_exception(exc)

File "/var/www/rhymella/rhymella/lib/python3.5/site- 
packages/rest_framework/views.py" in handle_exception
454.             self.raise_uncaught_exception(exc)

 File "/var/www/rhymella/rhymella/lib/python3.5/site- 
packages/rest_framework/views.py" in dispatch
 491.             response = handler(request, *args, **kwargs)

 File "/var/www/rhymella/rhymella/lib/python3.5/site- 
 packages/rest_framework/decorators.py" in handler
 53.             return func(*args, **kwargs)

 File "/var/www/rhymella/api/views.py" in get_styled_images
 6818.             res = 
 style.add_artistic_style(each.styled_images)

 File "/var/www/rhymella/filters/style.py" in add_artistic_style
 21.     cloudinary_response = cloudinary.uploader.upload(img)

 File "/var/www/rhymella/rhymella/lib/python3.5/site- 
 packages/cloudinary/uploader.py" in upload
 40.     return call_api("upload", params, file=file, **options)

 File "/var/www/rhymella/rhymella/lib/python3.5/site- 
 packages/cloudinary/uploader.py" in call_api
 269.         if file:

person Rishabh Pandey    schedule 16.10.2018    source источник
comment
Вы никогда не определяете img. Это должно дать вам NameError. Пожалуйста, проверьте свой код и убедитесь, что код в вашем вопросе - это тот же код, который вы фактически запускаете. Также включите полную трассировку ошибки. Трассировка содержит важную информацию для диагностики ошибок.   -  person Håken Lid    schedule 16.10.2018
comment
@HåkenLid Я получаю ошибку значения   -  person Rishabh Pandey    schedule 16.10.2018
comment
В строке cloudinary.uploader вы используете имя переменной img. Так что либо это не тот код, который вы запускаете, либо ошибка вызвана в предыдущей строке.   -  person Håken Lid    schedule 16.10.2018
comment
@HåkenLid Это по ошибке. также добавлена ​​трассировка. Пожалуйста, предложите сейчас   -  person Rishabh Pandey    schedule 16.10.2018


Ответы (1)


Вы передаете неправильный тип здесь. upload не принимает массив numpy. изображения cv2 являются объектами numpy.ndarray.

cloudinary_response = cloudinary.uploader.upload(image)

Аргумент может быть строкой, которая представляет собой путь к локальному файлу, или это может быть URL-адрес. Это сработает, например.

def url_to_image(url):
    return cloudinary.uploader.upload(url)

Другие варианты см. в cloudinary. Если вы хотите преобразовать свое изображение в массив numpy, вы должны закодировать его обратно в какой-либо допустимый тип, прежде чем передавать его в cloudinary.uploader.

person Håken Lid    schedule 16.10.2018
comment
Я должен выполнять операции cv2 над изображением, прежде чем загружать его в облако. - person Rishabh Pandey; 16.10.2018
comment
Отлично. Просто преобразуйте его в файл изображения и загрузите после обработки. Это уже описано в моем ответе. Вы можете использовать cv2.imwrite() для сохранения массива numpy в виде файла изображения. - person Håken Lid; 16.10.2018