尝试使用kairos上传文件时出错

问题描述:

Iam使用kairos api进行人脸识别.Iam试图注册图像。这里的documentation说它也接受base64编码的照片。因此,我使用base 64对图像进行了编码,以下错误尝试使用kairos上传文件时出错

{"Errors":[{"ErrCode":5000,"Message":"an invalid image was sent must be jpg or p 
ng format"}]} 

我已经使用了下面的Python代码发送请求

import cv2 
import requests 
import base64 
import json 

image=cv2.imread('Face-images/Subject 9.jpg') 
encoded_string =base64.b64encode(image) 
payload2= {"image":encoded_string ,"subject_id":"Abhishek","gallery_name":"MyGallery"} 
headers={'Content-Type':'application/json','app_id':'app_id','app_key':'app_key'} 
r = requests.post('https://api.kairos.com/enroll',headers=headers,data=json.dumps(payload2),verify=False) 
print r.text 

任何帮助,将不胜感激

+0

尝试encoded_string = base64.b64encode(开放( '脸部图像/主题9.jpg', 'R')。读()) – Bemmu

+0

现在其未示出的错误。但该图像是没有得到上传 –

不要编码你的照片。可能他们接受它,但它很难通过。检查此解决方案:

import requests 

files = {"image": (filename,open(location+'/'+filename,"rb"))} 
payload= {"subject_id":"Abhishek", 
      "gallery_name":"MyGallery"} 
headers={'Content-Type':'application/json', 
     'app_id':'app_id', 
     'app_key':'app_key'} 
response = requests.post('https://api.kairos.com/enroll',headers=headers,data=payload,files=files,verify=False) 
print response.text 

我找到了问题的答案。你可以尝试阅读不使用cv2的图像,而是作为简单的原始二进制文件。 cv2将它读入一个numpy数组,并且您正在编码一个numpy数组。阅读就像一个简单的文件适用于我,如下所示

with open ('messi.jpg','rb') as imgFh: 
    img = imgFh.read() 

试试这个。

import cv2 
import requests 
import base64 
import json 

encoded_string = base64.b64encode(open("Face-images/Subject 9.jpg", 
'r').read()) 
payload_dict = { 
    "image":encoded_string, 
    "subject_id": "Abhishek", 
    "gallery_name": "MyGallery" 
} 
payload = json.dumps(payload_dict) 
headers={ 
'Content-Type':'application/json', 
'app_id':'app_id', 
'app_key':'app_key' 
} 
request = Request('https://api.kairos.com/enroll', data=payload, 
headers=headers) 
response_body = urlopen(request).read() 
print(response_body)