icyface api 使用指南
Tue, Aug 15, 2017 in Interesting Python
icyface 是一个开源的人脸识别系统,提供人脸检测和人脸对比服务,大家可以在github上找到两个工程:
这两个工程分别是icyface的模型训练部分和restful api 部分,也可以在 icyface官网 先体验一下demo,如果实在没有条件搭建自己的模型,我们也提供restful api:
功能 | 接口 | 参数 | 返回json字段 |
---|---|---|---|
人脸检测 | http://face.icybee.cn/face/face_detect | img:base64格式图片 | boxes: 二维数组,n * 4维,第一维代表人脸个数,第二维有4个元素,分别是人脸的left,top,right,bottom 的像素值。errcode:错误码 |
人脸对比 | http://face.icybee.cn/face/face_recognize | img1:base64格式图片,img2:base64格式图片 | box1,box2 分别是人脸的位置,格式同人脸检测接口,vec1,vec2 分别是两个人脸的特征向量,160维,可以用于搜索,聚类的用途 ,errcode:错误码 |
具体调用接口demo见:https://github.com/bupticybee/icyface_api/blob/master/test_faceservice.py ,下面也会把python版本的api调用demo列出来,需要其他语言的自行翻译,接口返回值的可视化可以在 icyface官网 上直观看到,这里就不列举了。
import json
from PIL import Image
from scipy import misc
import base64
import argparse
import sys
import cStringIO
import requests
def file2base64(imdir):
img = Image.open(imdir)
buffer = cStringIO.StringIO()
img.save(buffer, format="JPEG")
img_str = base64.b64encode(buffer.getvalue())
return img_str
def test_recognize(args):
imdetect = args.detect
im1 = args.im1
im2 = args.im2
payload = {'img':file2base64(imdetect)}
import numpy as np
imarr = np.array(misc.imread(imdetect))
r = requests.get("http://face.icybee.cn/face/face_detect", data=payload)
print(json.loads(r.text)['boxes'][0])
box = json.loads(r.text)['boxes'][0]
box = [int(i) for i in box]
misc.imsave('sample.jpg',imarr[box[1]:box[3],box[0]:box[2],:],)
payload = {
'img1':file2base64(im1),
'img2':file2base64(im2)
}
r = requests.get("http://face.icybee.cn/face/face_recognize", data=payload)
print(r.text)
#print(json.loads(r.text)['dist'])
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('detect',type=str,help='detect image')
parser.add_argument('im1',type=str,help='detect image1')
parser.add_argument('im2',type=str,help='detect image2')
args = parser.parse_args(sys.argv[1:])
test_recognize(args)
icyface的接口调用大概就是这样的,有问题邮件 icybee@yeah.net ,欢迎询问 && pr