2017-06-13 104 views
0

我使用Python中requests.post方法访问谷歌的愿景API(jupyter笔记本)imageUri:路径本地文件

在imageUri我只能指定WEBURL或桶URI。我不能指定像“/Users/pi/test.jpg”本地文件名

file_name = '/Users/mbp/Pictures/full moon.jpg' 
data = { 
    "requests":[ 
    { 
     "image":{ 
    "source":{ 
     "imageUri": file_name 
    } 
    }, 
    "features":[ 
    { 
     "type":"FACE_DETECTION", 
     "maxResults":1 
    } 
    ] 
    } 
] 
} 

r = requests.post(url=url,json=data) 
x= json.loads(r.text) 
print(x['responses']) 

响应我得到的是:

[{'error': {'code': 3, 'message': 'image-annotator::Malformed request.: Unsupported URI protocol specified: /Users/mbp/Pictures/full moon.jpg'}}] 

请帮助

+0

试试'file:/// Users/mbp/Pictures/full moon.jpg' –

+0

感谢您的回复。 不幸的是,它不起作用 {'error':{'code':3, 'message':'image-annotator ::格式错误的请求:指定不支持的URI协议:file:/// Users/mbp /图片/ full moon.jpg'}} – maswadkar

回答

1

对于需要加载本地文件文件内容,对其进行编码,并将编码的图像内容置于content密钥下。有关详情,请参阅here。关于base64编码的信息也在该页面上链接。

您的代码可以进行如下更新:

import base64 

file_name = '/Users/mbp/Pictures/full moon.jpg' 
with open(file_name, 'r') as image: 
    image_content = image.read() 
    encoded_content = base64.b64encode(image_content) 

data = { 
    "requests":[ 
    { 
     "image":{ 
     "content": encoded_content 
    }, 
    "features":[ 
    { 
     "type":"FACE_DETECTION", 
     "maxResults":1 
    } 
    ] 
    } 
] 
} 

r = requests.post(url=url,json=data) 
x = json.loads(r.text) 
print(x['responses']) 

或者,您也可以考虑使用客户端库;一些信息here

+0

你真棒! – maswadkar

+0

与utf-8 encoging有一些问题...但可以修复它! 再次感谢 – maswadkar

+0

@maswadkar你介意分享你遇到的utf-8编码问题吗? – dizcology