Cargue ndarray (imagen en OpenCV) en el almacenamiento en la nube de Google como .jpg o .png

Tengo problemas similares, como Cómo cargar una imagen de bytes en Google Cloud Storage desde un script de Python .

Probé esto

from google.cloud import storage import cv2 from tempfile import TemporaryFile import google.auth credentials, project = google.auth.default() client = storage.Client() # http://sofes.miximages.com/python/ServiceLogin') with TemporaryFile() as gcs_image: image.tofile(gcs_image) blob = bucket.get_blob(gcs_image) print(blob.download_as_string()) blob.upload_from_string('New contents!') blob2 = bucket.blob('document/operations/15.png') blob2.upload_from_filename(filename='gcs_image') 

Este es el error que está planteando.

 > Traceback (most recent call last): File > "/Users/santhoshdc/Documents/ImageShapeSize/imageGcloudStorageUpload.py", > line 13, in  > blob = bucket.get_blob(gcs_image) File "/Users/santhoshdc/.virtualenvs/test/lib/python3.6/site-packages/google/cloud/storage/bucket.py", > line 388, in get_blob > **kwargs) File "/Users/santhoshdc/.virtualenvs/test/lib/python3.6/site-packages/google/cloud/storage/blob.py", > line 151, in __init__ > name = _bytes_to_unicode(name) File "/Users/santhoshdc/.virtualenvs/test/lib/python3.6/site-packages/google/cloud/_helpers.py", > line 377, in _bytes_to_unicode > raise ValueError('%r could not be converted to unicode' % (value,)) ValueError:  could not be > converted to unicode 

¿Alguien puede guiarme qué está mal o qué estoy haciendo incorrectamente?

Según lo sugerido por @ A.Queue en (se elimina después de 29 días)

 from google.cloud import storage import cv2 from tempfile import TemporaryFile client = storage.Client() bucket = client.get_bucket('test-bucket') image=cv2.imread('example.jpg') with TemporaryFile() as gcs_image: image.tofile(gcs_image) gcs_image.seek(0) blob = bucket.blob('example.jpg') blob.upload_from_file(gcs_image) 

El archivo se cargó, pero la carga de un numpy ndarray no se guarda como un archivo de imagen en google-cloud-storage

PD:

numpy array se debe convertir a cualquier formato de imagen antes de guardar.

Esto es bastante simple, use el tempfile creado para almacenar la imagen, aquí está el código.

 with NamedTemporaryFile() as temp: #Extract name to the temp file iName = "".join([str(temp.name),".jpg"]) #Save image to temp file cv2.imwrite(iName,duplicate_image) #Storing the image temp file inside the bucket blob = bucket.blob('ImageTest/Example1.jpg') blob.upload_from_filename(iName,content_type='image/jpeg') #Get the public_url of the saved image url = blob.public_url 

Estás llamando a blob = bucket.get_blob(gcs_image) que no tiene sentido. Se supone que get_blob() obtiene un argumento de cadena, es decir, el nombre del blob que desea obtener. Un nombre Pero pasas un objeto de archivo.

Propongo este código:

 with TemporaryFile() as gcs_image: image.tofile(gcs_image) gcs_image.seek(0) blob = bucket.blob('documentation-screenshots/operations/15.png') blob.upload_from_file(gcs_image)