[MachineBox系列]FaceBox——人脸识别

简介

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) 人的名字
  • 需要将AcceptContent-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
  • 需要将AcceptContent-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,url2种不同的输入

除了上述例子中涉及到的API, FaceBox还提供了模型一下API, 可以在http://localhost:8080中看到

  • 相似脸识别, 和上面的面部识别不同,在不匹配的情况下也会告诉你比较像谁。
  • 更新人脸信息
  • 删除人脸信息
  • Faceprint(付费)

另外所有的MachineBox的镜像都提供了诸如/healthz, /liveness, /readyz等实用的API, 具体可以查阅官方文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容