A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 皮卡丘的小主人 初级黑马   /  2018-11-22 15:31  /  1226 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

## 实战:调用百度人工智能AI api

### 一、创建应用

![image-20180924174312682](/Users/chenzhi/all-in-here/image-20180924174312682.png)

https://ai.baidu.com/docs#/Face-API/top

![image-20180924174448017](/Users/chenzhi/Library/Application Support/typora-user-images/image-20180924174448017.png)

![image-20180924185430244](/Users/chenzhi/Library/Application Support/typora-user-images/image-20180924185430244.png)

### 二、API文档说明

#### Python SDK文档

http://ai.baidu.com/docs#/Face-Python-SDK/top  

接口说明

| 接口名称 | 接口能力简要描述                                             |
| -------- | ------------------------------------------------------------ |
| 人脸检测 | 检测人脸并定位,返回五官关键点,及人脸各属性值               |
| 人脸比对 | 返回两两比对的人脸相似值                                     |
| 人脸查找 | 在一个人脸集合中找到找到相似的人脸,由一系列接口组成,包括人脸识别、人脸认证、人脸库管理相关接口(人脸注册、人脸更新、人脸删除、用户信息查询、组列表查询、组内用户列表查询、组间复制用户、组内删除用户) |

#### pip安装

`pip install baidu-aip`



#### 创建AipFace

AipFace是人脸识别的Python SDK客户端,为使用人脸识别的开发人员提供了一系列的交互方法。

```pyth
from aip import AipFace

""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'

client = AipFace(APP_ID, API_KEY, SECRET_KEY)

```

> > 常量`APP_ID`在百度云控制台中创建,常量`API_KEY`与`SECRET_KEY`是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的**应用列表**中查看。
>
> **注意**:如您以前是百度云的老用户,其中`API_KEY`对应百度云的“Access Key ID”,`SECRET_KEY`对应百度云的“Access Key Secret”。

#### 配置AipFace

| 接口                         | 说明                                           |
| ---------------------------- | ---------------------------------------------- |
| setConnectionTimeoutInMillis | 建立连接的超时时间(单位:毫秒                 |
| setSocketTimeoutInMillis     | 通过打开的连接传输数据的超时时间(单位:毫秒) |

#### 人脸检测 接口说明

```python
image = "取决于image_type参数,传入BASE64字符串或URL字符串或FACE_TOKEN字符串"

imageType = "BASE64"

""" 调用人脸检测 """
client.detect(image, imageType);

""" 如果有可选参数 """
options = {}
options["face_field"] = "age"
options["max_face_num"] = 2
options["face_type"] = "LIVE"

""" 带参数调用人脸检测 """
client.detect(image, imageType, options)
```

**人脸检测 请求参数详情**

| 参数名称     | 是否必选 | 类型   | 默认值 | 说明                                                         |
| ------------ | -------- | ------ | ------ | ------------------------------------------------------------ |
| image        | 是       | string |        | 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断 |
| image_type   | 是       | string |        | 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个 |
| face_field   | 否       | string |        | 包括**age,beauty,expression,faceshape,gender,glasses,landmark,race,quality,facetype信息** 逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度 |
| max_face_num | 否       | string | 1      | 最多处理人脸的数目,默认值为1,仅检测图片中面积最大的那个人脸;**最大值10**,检测图片中面积最大的几张人脸。 |
| face_type    | 否       | string |        | 人脸的类型 **LIVE**表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等**IDCARD**表示身份证芯片照:二代身份证内置芯片中的人像照片 **WATERMARK**表示带水印证件照:一般为带水印的小图,如公安网小图 **CERT**表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片 默认**LIVE** |

### Demo1示例:人脸检测

#### 1. api接口对象

```pyt
"""
定义常量
你的 APPID AK SK
"""
APP_ID = '14274926'
API_KEY = '6ms7nbS4Kl0o05CVk6IcVyYS'
SECRET_KEY = 'uiAzvTy9p0S9cwcB1cWSyo98TvrVBKKE'

# 初始化AipFace对象
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
print(client)
```

1. 读取图片

   ```python
   def img_content(file_name):
       with open(file_name, "rb") as f:  # 二进制方式打开图文件
           base64_data = base64.b64encode(f.read())  # 读取文件内容,转换为base64编码
   
           # 将图片信息格式化为可提交信息,这里需要注意str参数设置
           # params = json.dumps({"image": str(base64_data)})
           # # params = {"image": str(base64_data)}
           #
           # print(params)
           # print(type(params))
   
           return base64_data
   ```

#### 3. 设置请求参数

```
# 请求项
options = {
    'max_face_num': 2,  # 图像数量
    'face_field': "age,beauty,expression,faceshape",  # 图片想关参数
    'face_type':'LIVE',

}
```

#### 4. 调用人脸检测 并 打印

```python
# 图片转base64
img = img_content('timg2.jpg')

# 调用人脸属性检测接口
result = client.detect(img, imageType, options)  # 图片、 图片类型、请求项

```

#### 5. 返回数据说明

```python
<type 'dict'>
{
  "cached": 0,
  "error_code": 0,
  "error_msg": "SUCCESS",
  "log_id": 2510110184552,
  "result": {
    "face_list": [
      {
        "age": 27,
        "angle": {
          "pitch": 7.550878048,
          "roll": 2.938822985,
          "yaw": 10.52069664
        },
        "beauty": 65.67142487,
        "expression": {
          "probability": 0.9994981289,
          "type": "smile"
        },
        "face_probability": 1,
        "face_shape": {
          "probability": 0.799141109,
          "type": "oval"
        },
        "face_token": "a449750e2ee299ea8da219b1eb640d75",
        "location": {
          "height": 330,
          "left": 172.2874756,
          "rotation": 2,
          "top": 353.2367249,
          "width": 363
        }
      }
    ],
    "face_num": 1
  },
  "timestamp": 1537831007
}
  
```

### Demo2示例:人脸比对

#### 1. 接口说明

- **两张人脸图片相似度对比**:比对两张图片中人脸的相似度,并返回相似度分值;
- **多种图片类型**:支持**生活照**、**证件照**、**身份证芯片照**、**带网纹照**四种类型的人脸对比;

> 用于比对多张图片中的人脸相似度并返回两两比对的得分,可用于判断两张脸是否是同一人的可能性大小。
>
> 典型应用场景:如**人证合一验证**,**用户认证**等,可与您现有的人脸库进行比对验证。



#### 2. 接口及参数

```pyth
result = client.match([
    {
        'image': base64.b64encode(open('1.jpg', 'rb').read()),
        'image_type': 'BASE64',
    },
    {
        'image': base64.b64encode(open('2.jpg', 'rb').read()),
        'image_type': 'BASE64',
    }
])

```

**请求参数**

| 参数             | 必选 | 类型   | 说明                                                         |
| ---------------- | ---- | ------ | ------------------------------------------------------------ |
| image            | 是   | string | 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断。 **两张图片通过json格式上传,格式参考表格下方示例** |
| image_type       | 是   | string | 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 |
| face_type        | 否   | string | 人脸的类型 **LIVE**表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等,**IDCARD**表示身份证芯片照:二代身份证内置芯片中的人像照片, **WATERMARK**表示带水印证件照:一般为带水印的小图,如公安网小图 **CERT**表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片 默认LIVE |
| quality_control  | 否   | string | 图片质量控制 **NONE**: 不进行控制 **LOW**:较低的质量要求 **NORMAL**: 一般的质量要求 **HIGH**: 较高的质量要求 **默认 NONE** |
| liveness_control | 否   | string | 活体检测控制 **NONE**: 不进行控制 **LOW**:较低的活体要求(高通过率 低攻击拒绝率) **NORMAL**: 一般的活体要求(平衡的攻击拒绝率, 通过率) **HIGH**: 较高的活体要求(高攻击拒绝率 低通过率) **默认NONE** |

**返回参数**

| 参数名      | 必选 | 类型   |      说明      |
| ----------- | ---- | ------ | :------------: |
| score       | 是   | float  | 人脸相似度得分 |
| face_list   | 是   | array  |  人脸信息列表  |
| +face_token | 是   | string | 人脸的唯一标志 |

#### 3. demo2 代码

```python
# _*_ coding: utf-8 _*_
import json

from aip import AipFace
import base64

"""
定义常量
你的 APPID AK SK
"""
APP_ID = '14274926'
API_KEY = '6ms7nbS4Kl0o05CVk6IcVyYS'
SECRET_KEY = 'uiAzvTy9p0S9cwcB1cWSyo98TvrVBKKE'

# 初始化AipFace对象
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
print(client)

imageType = "BASE64"


# 读取图片
def img_content(file_name):
    with open(file_name, "rb") as f:  # 二进制方式打开图文件
        base64_data = base64.b64encode(f.read())  # 读取文件内容,转换为base64编码
        return base64_data


# 获取图片
img1 =img_content("gao.jpg")
# img1 = img_content('timg.jpeg')
img2 = img_content('timg2.jpg')

# 调用人脸比对接口
result = client.match([
    {
        'image':img1,
        'image_type':imageType
    },
    {
        'image': img2,
        'image_type': imageType
    },
])



print(type(result))

print (json.dumps(result, sort_keys=True, indent=2))  # 排序并缩进两个字符输出
score = result["result"]["score"]
print ("图片1 与 图片2 的相似度为: %f "%score)


"""
<type 'dict'>

  "cached": 0,
  "error_code": 0,
  "error_msg": "SUCCESS",
  "log_id": 1015505994599,
  "result": {
    "face_list": [
      {
        "face_token": "9709cdcc4faa697a389f98c31fe27d3e"
      },
      {
        "face_token": "a449750e2ee299ea8da219b1eb640d75"
      }
    ],
    "score": 91.50602722
  },
  "timestamp": 1537832354
}

"""
```

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马