简介
FaceBox是MachineBox的一部分,提供了一个通用的分类器模型。 关于MachineBox的简介以及环境相关的设置可以参照我的介绍文章,这里就不赘述了。我们直接启动
docker run -p 8080:8080 -e "MB_KEY=<your-mb-key>" machinebox/facebox
打开http://localhost:8080, 官方已经提供了详尽的API文档。
举个例子
训练面部数据
首先我们来教AI认大头照, 先看API
POST http://localhost:8080/facebox/teach
{
"url": "https://machinebox.io/samples/faces/john.jpg",
"id": "john.jpg",
"name": "John Lennon"
}
-
url
- (string) 图片url -
id
- (string) 唯一标识的id, 按照习惯是用文件名 -
name
- (string) 人的名字 - 需要将
Accept
和Content-Type
headers 设置成"application/json; charset=utf-8"
- 这个API还有file以及faceprint(付费)的调用方式,具体参照API
我们用演员黄渤的大头照来做实验, 根据我测试的经验,尽量选择清晰的脸部特写照片来训练。
我随便找了一张
发给API
curl -X POST \
http://localhost:8080/facebox/teach \
-H 'accept: application/json; charset=utf-8' \
-H 'content-type: application/json; charset=utf-8' \
-d '{
"url": "https://upload-images.jianshu.io/upload_images/13069854-23767e72b22d96cc.png",
"name": "黄渤",
"id": "huangbo.png"
}'
如果返回{"success": true}
则成功, 否则建议换一张图片
识别面部
给定一个图片,模型会自动识别图片中的人脸(免费版限制最多10个), API如下
POST http://localhost:8080/facebox/check
{
"url": "https://machinebox.io/samples/faces/thebeatles.jpg",
"faceprint": false
}
-
url
- (string) 待识别图像的url -
faceprint
- (boolean) 付费 是否返回人脸的faceprint - 需要将
Accept
和Content-Type
headers 设置成"application/json; charset=utf-8"
- 这个API还有file的调用方式,具体参照API
这个API的返回值我们也有必要说明一下
{
"success": true,
"facesCount": 3,
"faces": [
{
"rect": { "top": 0, "left": 0, "width": 120, "height": 120 },
"id": "file1.jpg",
"name": "John Lennon",
"matched": true,
"confidence": 0.624,
"faceprint": "F/+DAgEBCVtdZmxvYXQ2NAH/hAABCAAA/gLv/4QA/4D7IP..."
},
{
"rect": { "top": 50, "left": 50, "width": 100, "height": 100 },
"matched": false,
"confidence": 0,
"faceprint": "F/+DAgEBCVtdZmxvYXQ2NAH/hAABCAAA/gLv/4QA/4D7IP..."
}
]
}
-
success
- (bool) 是否成功 -
facesCount
- (int) 一共识别到的脸的数量 -
faces
- (array) 图片中所有识别到的脸的信息 -
faces[].rect
- (object) 脸在原图的位置 -
faces[].id
- (string) 匹配到的人的id, 只有faces[].matched
为true才有 -
faces[].name
- (string)) 匹配到的人的名字, 只有faces[].matched
为true才有 -
faces[].matched
- (bool) ) 是否匹配到已知的一个人,也就是说,即便训练集里没有,也是不影响人脸定位的识别的 -
faces[].confidence
- (probability number) 置信度 -
faces[].faceprint
- (string) 付费 给识别到的人脸生成一个FacePrint,可以结合API来根据这个FacePrint标定人物信息, 只在调用参数faceprint=true
时有效
我们使用一张剧照来试一试
curl -X POST \
http://localhost:8080/facebox/check\
-H 'accept: application/json; charset=utf-8' \
-H 'content-type: application/json; charset=utf-8' \
-d '{
"url": "https://upload-images.jianshu.io/upload_images/13069854-82b049764d117f4d.png"
}'
得到的结果不够直观是吧,事实上FaceBox也考虑到这点,它内部自带了一个显示效果的demo, 把url输入进去我们可以得到
图中我们看出黄渤被正确的识别了出来。沈腾的脸也被正确标定出来了,但是由于没有训练数据,所以并不知道是谁。
模型导出
导出模型是机器学习中极其重要的一步,我们可以通过API
GET http://localhost:8080/facebox/state/
直接下载到一个.facebox
的模型文件
模型导入
同样也有导入的API
POST http://localhost:8080/facebox/state
- 该API支持
file
,url
2种不同的输入
除了上述例子中涉及到的API, FaceBox还提供了模型一下API, 可以在http://localhost:8080中看到
- 相似脸识别, 和上面的面部识别不同,在不匹配的情况下也会告诉你比较像谁。
- 更新人脸信息
- 删除人脸信息
- Faceprint(付费)
另外所有的MachineBox的镜像都提供了诸如/healthz
, /liveness
, /readyz
等实用的API, 具体可以查阅官方文档