2017-08-15 94 views
3

我在發送到Google Cloud Vision的base64編碼圖像時遇到問題。有趣的是,如果我通過URI發送圖像,它可以正常工作,所以我懷疑我編碼的方式有什麼問題。Google雲視覺不接受base64編碼圖像python

這裏的交易:

from google.cloud import vision 
import base64 
client = vision.ImageAnnotatorClient() 
image_path ='8720911950_91828a2aeb_b.jpg' 
with open(image_path, 'rb') as image: 
    image_content = image.read() 
    content = base64.b64encode(image_content) 
    response = client.annotate_image({'image': {'content': content}, 'features': [{'type': vision.enums.Feature.Type.LABEL_DETECTION}],}) 
    print(response) 

我總是得到的迴應是:

error { 
    code: 3 
    message: "Bad image data." 
} 

如果我嘗試使用URI來代替:

response = client.annotate_image({'image': {'source': {'image_uri': 'https://farm8.staticflickr.com/7408/8720911950_91828a2aeb_b.jpg'}}, 'features': [{'type': vision.enums.Feature.Type.LABEL_DETECTION}],}) 

響應是確定...

label_annotations { 
    mid: "/m/0168g6" 
    description: "factory" 
    score: 0.7942917943000793 
} 
label_annotations { 
    mid: "/m/03rnh" 
    description: "industry" 
    score: 0.7761002779006958 
} 

我跟着recommended way to encode從谷歌

任何想法,這裏有什麼問題?

+0

Base64!= 64位。這些是非常不同的事情。 – Thomas

+0

嘗試'含量= base64.b64encode(image_content).decode()' – Leon

+0

@Leon我得到這個 「類型錯誤:「/ 9J/4AAQSkZJRgABAQEA8ADwAAD/4gJASUNDX1BST0ZJTEUAAQEAAAIwQURCRQIQAABtbnRyUkdCIFhZWiAHzwAGAAMAAAAAAAB具有類型海峽,但預期中的一種:字節 」 – AlejandroVK

回答

2

我對Google Cloud Vision沒有任何經驗,但是在查看他們的文檔和示例後,我的感覺是,鏈接documentation page about base64 encoding of image data適用於您自己創建和發送HTTP請求的情況,而不使用vision.ImageAnnotatorClient。後者似乎自動對圖像數據進行編碼,因此在您的示例中應用了雙重編碼。因此我相信你應該從代碼中刪除編碼步驟:

from google.cloud import vision 
import base64 
client = vision.ImageAnnotatorClient() 
image_path ='8720911950_91828a2aeb_b.jpg' 
with open(image_path, 'rb') as image: 
    content = image.read() 
    response = client.annotate_image({'image': {'content': content}, 'features': [{'type': vision.enums.Feature.Type.LABEL_DETECTION}],}) 
    print(response) 
+0

正確!你是對的:)這裏有更多的信息,好奇心https://googlecloudplatform.github.io/google-cloud-python/stable/vision/gapic/types.html#google.cloud.vision_v1.types.Image。內容 – AlejandroVK

+0

@AlejandroVK這有點晚,但我正在嘗試做同樣的事情,我正在尋找如何做到這一點。您提供的鏈接已損壞。你能刷新它還是分享我如何編碼要在Vision API中使用的圖像? – Aka

+0

@Aka讓我知道這是否有幫助https://gist.github.com/internetmosquito/b1c1f00ac99d9aa1f79cfdc21be36b5b – AlejandroVK