【问题标题】:Upload image as np array to FIrebase storage将图像作为 np 数组上传到 FIrebase 存储
【发布时间】:2021-11-08 18:14:14
【问题描述】:

我正在尝试将图像上传到 Firebase 存储。 上传本地图片时我没有问题,使用:

import pyrebase
db_credentials = "local_file.json"
        firebase_config = {
            'apiKey': "...",
            'authDomain': "...",
            'databaseURL': "...",
            'projectId': "...",
            'storageBucket': "...",
            'messagingSenderId': "...",
            'appId': "...",
            'measurementId': "...",
            'serviceAccount': db_credentials
        }
firebase_storage = pyrebase.initialize_app(firebase_config)
storage = firebase_storage.storage()
storage.child('remote_path').put('local_path.png')

但是,在我的情况下,图像是来自远程相机的帧,使用 OpenCV 检索,因此我将其作为 np.array。我尝试像上一个示例一样使用它,但它不起作用。

cap = cv2.VideoCapture(remote_camera_address)
ret, frame = cap.read() -> frame is a np array
storage.child('remote_path').put(frame)

这是返回错误:

raise ValueError('total bytes could not be determined. Please '
ValueError: total bytes could not be determined. Please pass an explicit size.

显然,我可以将 np 数组保存到本地图像,然后上传该图像并删除它,但我想知道是否可以以更简洁的方式进行。

【问题讨论】:

  • 我不确定您使用的是什么 SDK,但错误消息似乎与此处相同(显示如何传递他的大小):stackoverflow.com/questions/59210646/…
  • 现在添加了更多信息。您链接的解决方案似乎使用了与我现在正在使用的不同的库,我会看看它
  • 啊,你正在使用 Pyrebase。这抽象了我在其put implementation 中链接的答案中的调用。您可能希望自己直接使用底层存储桶,或者您可以考虑为 Pyrebase 提交功能请求。

标签: python firebase firebase-storage


【解决方案1】:

this anwer看来,你可以传递一个chunk_size参数来摆脱这个问题:

blob = self.bucket.blob(filename, chunk_size=262144) # 256KB
blob.upload_from_file(image)

由于您使用的是 Pyrebase,对 upload_from_file 的调用实际上包含在您正在调用的 put implementation 中,因此您可以为此操作删除 Pyrebase 并直接在存储桶上进行调用,或者您可以归档Pyrebase 的功能请求以添加对此功能的支持。

【讨论】:

    猜你喜欢
    • 2020-04-26
    • 2017-09-25
    • 2016-11-08
    • 2018-10-24
    • 2019-01-22
    相关资源
    最近更新 更多