将图像编码为二进制文件并使用POST multipart / form-data上传它

时间:2018-02-01 05:45:02

标签: python python-3.x python-requests multipartform-data face-detection

我正在尝试使用在线API检测面部,这需要使用multipart / form-data以二进制格式上传图像文件。我找到了一种将图像转换为二进制的方法。现在,对于上传部分,我是否有必要将这个二进制数据写入文件?此外,我写了以下代码,并收到错误 -

  

ValueError:无法编码非二元组的对象

我写的代码如下 -

import requests
import pprint
from toBinary import conv

img='sample.jpg'

img=conv(img)
params={
    'api_key':<api key>,
    'api_secret':<api secret>,
}
print("1.-")
r = requests.post(url='https://api-
us.faceplusplus.com/facepp/v3/detect',data=params,files=img)

for face in range(0,len(r.json()['faces'])):
    pprint.pprint(r.json()['faces'][face]['face_token'])

img='01.jpg'
img=conv(img)
print("2-")
s = requests.post(url='https://api-
us.faceplusplus.com/facepp/v3/detect',data=params,files=img)

for face in range(0,len(s.json()['faces'])):
    pprint.pprint(s.json()['faces'][face]['face_token'])

toBinary类如下 -

import binascii
def conv(image_file):
    try:
        fin = open(image_file, "rb")
        data = fin.read()
        fin.close()
    except IOError:
        print("Image file %s not found" % image_file)
        raise SystemExit
    hex_str = str(binascii.hexlify(data))
    hex_list = []
    bin_list = []
    for ix in range(2, len(hex_str)-1, 2):
        hex = hex_str[ix]+hex_str[ix+1]
        hex_list.append(hex)
        bin_list.append(bin(int(hex, 16))[2:])
    bin_str = "".join(bin_list)
    return(bin_str)

编辑 - 添加了toBinary类的代码,更改了图像的来源。

1 个答案:

答案 0 :(得分:0)

我还没有检查过这个解决方案

但您可以尝试使用此https://github.com/FacePlusPlus/facepp-python-sdk

将此文件复制到您的项目https://github.com/FacePlusPlus/facepp-python-sdk/blob/master/facepp.py

然后像这样使用它:

from facepp import API
api = API(key, secret)
api.detection.detect(url=url)