【发布时间】:2018-07-11 09:15:28
【问题描述】:
我正在尝试使用在线 API 检测人脸,该 API 需要使用 multipart/form-data 以二进制格式上传图像文件。我找到了一种将图像转换为二进制的方法。现在,对于上传部分,我是否有必要将此二进制数据写入文件?另外,我编写了以下代码并收到错误-
ValueError: 无法编码不是 2 元组的对象
我写的代码如下-
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)
edit- 添加 toBinary 类的代码,更改图像的来源。
【问题讨论】:
-
请也附上 toBinary 类
-
toBinary 类的代码已根据您的要求添加。
-
您是否将 url 传递给
conv函数?然后尝试打开它?我认为open(image_file, "rb")应该抛出一个错误 -
一个错误,即找不到图像,与 url 一起引发。但是,当替换为本地图像的目录时,会抛出同样的错误(我上面提到的错误)
标签: python python-3.x python-requests multipartform-data face-detection