PHPackages                             aoding9/laravel-baidu-aip - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. aoding9/laravel-baidu-aip

ActiveLibrary[API Development](/categories/api)

aoding9/laravel-baidu-aip
=========================

基于Laravel对baiduAip的简单封装

1.0.2(2y ago)19Apache-2.0PHPPHP &gt;=7.1.0

Since Jun 14Pushed 2y ago1 watchersCompare

[ Source](https://github.com/aoding9/laravel-baidu-aip)[ Packagist](https://packagist.org/packages/aoding9/laravel-baidu-aip)[ RSS](/packages/aoding9-laravel-baidu-aip/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (4)Used By (0)

### 简介

[](#简介)

最近做员工人脸打卡系统，自己封装了一下百度人脸识别SDK，方便以后重复利用。

暂时只封装了一部分接口，具体有哪些方法，看继承自官方sdk的`Aoding9\BaiduAip\AipFace`这个类，每个方法都有中文注释

为了避免覆写sdk，封装的方法名以Api结尾，用法与百度的官方文档相同，点进sdk也有中文注释，其余未封装的方法，直接按官方文档即可调用。

基于原有api，简化了传参和异常处理，例如matchFacesByUrl是对match的封装，参数从4个减少到2个。

人脸比对示例：

[![百度人脸识别SDK的简单封装](https://camo.githubusercontent.com/8d539e1e0f08a62063bf1c900843ecad58e6990110be6f8df83fc3fe703b3678/68747470733a2f2f63646e2e6c6561726e6b752e636f6d2f75706c6f6164732f696d616765732f3230323330362f30362f37383333382f48744b697445546836422e706e67216c61726765)](https://camo.githubusercontent.com/8d539e1e0f08a62063bf1c900843ecad58e6990110be6f8df83fc3fe703b3678/68747470733a2f2f63646e2e6c6561726e6b752e636f6d2f75706c6f6164732f696d616765732f3230323330362f30362f37383333382f48744b697445546836422e706e67216c61726765)

[![百度人脸识别SDK的简单封装](https://camo.githubusercontent.com/73bc2a4c02c365147e9d0abebef805b1e5a1f6c8514019712f9bb60787d0f706/68747470733a2f2f63646e2e6c6561726e6b752e636f6d2f75706c6f6164732f696d616765732f3230323330362f30362f37383333382f724f37394e537746447a2e706e67216c61726765)](https://camo.githubusercontent.com/73bc2a4c02c365147e9d0abebef805b1e5a1f6c8514019712f9bb60787d0f706/68747470733a2f2f63646e2e6c6561726e6b752e636f6d2f75706c6f6164732f696d616765732f3230323330362f30362f37383333382f724f37394e537746447a2e706e67216c61726765)

### 安装

[](#安装)

`composer require aoding9/laravel-baidu-aip`

安装失败可能是用了国内镜像，切换为官方源

`composer config repo.packagist composer https://packagist.org`

因为官方源下载慢，国内镜像又有各种问题可能导致安装失败，可以把以下代码添加到composer.json，直接从github安装

```
{
  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/aoding9/laravel-baidu-aip"
    }
  ]
}
```

### 配置

[](#配置)

在.env中添加如下配置项

```
BAIDU_AIP_APP_ID=
BAIDU_AIP_API_KEY=
BAIDU_AIP_SECRET_KEY=
BAIDU_AIP_GROUP_ID=

```

配置项一般无需修改，如需自定义，使用`php artisan vendor:publish --provider="Aoding9\BaiduAip\BaiduAipServiceProvider"`发布baiduAip.php到config目录

```
return [
    'app_id'=>env('BAIDU_AIP_APP_ID',null),
    'api_key'=>env('BAIDU_AIP_API_KEY',null),
    'secret_key'=>env('BAIDU_AIP_SECRET_KEY',null),
    'group_id'=>env('BAIDU_AIP_GROUP_ID',null),
];
```

关于BAIDU\_AIP\_GROUP\_ID：默认用户组id，如果调用相关接口时不传用户组id，会以此作为默认值

### 使用

[](#使用)

首先从容器中获取服务，然后获取aipFace实例，然后使用实例中的方法

1、两张人脸图片比对相似度`matchFacesByUrl|matchApi`

```
use Aoding9\BaiduAip\BaiduAipService;

function test() {
    //$aipFace = app('baiduAip')->aipFace(); // 别名
    $aipFace = app(BaiduAipService::class)->aipFace();
    $score = $aipFace
        ->matchFacesByUrl(
            $url1 = 'https://pix2.tvzhe.com/thumb/star/0/221/260x346.jpg',
            $url2 = 'https://n.sinaimg.cn/sinacn10114/40/w2000h2840/20190226/7aa0-htptaqe7306666.jpg'
        );
    dd($url1, $url2, '吴京1和吴京2相似度' . $score);
}
```

2、在用户组中搜索人脸对应的用户，例如人脸打卡，拍照后判断是哪个用户打的卡`searchApi`

```
use Illuminate\Database\Eloquent\Model;
use Aoding9\BaiduAip\BaiduAipService;
class Staff extends Model {
    /**
     * @Desc 根据人脸，匹配人员model，需要提前增加用户组，并且把用户的人脸注册进去，绑定userid
     * @param string $face 上传的图片url
     */
    public static function getStaffByFaceImage($face): Staff {
        $aipFace = app(BaiduAipService::class)->aipFace();
        try {
            $staffId = $aipFace->searchApi($face); // 返回用户id或null，或抛异常
            $staff = Staff::findOrFail($staffId); // 未找到也抛异常
        } catch (\Exception $e) {
            throw new \Exception('未匹配到人员信息',$e->getCode());
        }

        return $staff;
    }
}

// 前端上传人脸图片，根据图片地址，检索用户模型
$face = request()->input('face');
$staff = Staff::getStaffByFaceImage($face);
```

3、用户组管理`groupAddApi|groupDeleteApi|getGroupListApi|getGroupUsersApi|getUserApi`

```
use Aoding9\BaiduAip\BaiduAipService;

 function test() {
        $aipFace = app(BaiduAipService::class)->aipFace();
        // 不传参则使用env的默认用户组id
        dd($aipFace->groupAddApi());  // 新增用户组
        dd($aipFace->groupDeleteApi()); // 删除用户组
        dd($aipFace->getGroupListApi()); // 获取用户组列表
        dd($aipFace->getGroupUsersApi()); // 获取用户组的用户id列表
        dd($aipFace->getUserApi(1)); // 获取根据用户id获取user_info
    }
```

4、结合模型观察者，管理用户资料`addUserApi|updateUserApi|deleteUserApi`

```
