thiagormoreira/awsfacematch

Laravel 的 AWS face match 包


README

此组件将人脸识别集成到传统的 Laravel 模型(如包含头像图片的用户模型)中。该包将单个人脸图像与已索引的图像集合进行比较,并返回一个匹配的模型,其准确率大于 80%。

此组件使用AWS Rekogniton 引擎。请查看网站以获取凭证设置和价格信息。

安装

通过 composer 安装,只需执行以下命令

composer require grananda/AwsFaceMatch

执行以下命令将配置文件复制到您的应用程序配置文件夹

php artisan vendor:publish --provider="Grananda\AwsFaceMatch\FaceMatchServiceProvider"  

将您的 AWS AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 凭证添加到您的 .env 文件中。

为了使组件正常工作,您需要一套 AWS 密钥和密钥以及您希望操作的区域。这些值将按常规从您的 .env 文件中读取。其他配置参数将包含在 facematch.php 配置文件中。

请记住,对于 Laravel <5.5 的旧版本,您需要在 config/app.php 文件中的 $providers 数组元素下注册组件服务提供者。

Grananda\AwsFaceMatch\FaceMatchServiceProvider::class,  

此外,在 $aliases 数组元素中,添加以下可用的 facade,以便在 trait 范围外访问包的服务方法。如果您希望这样做,则有必要。

'FaceMatch' => Grananda\AwsFaceMatch\Facades\FaceMatch::class,
'FaceCollection' => Grananda\AwsFaceMatch\Facades\FaceCollection::class,  

最后,运行包迁移,将在其中创建存储索引信息的表。

php artisan migrate 

设置您的 Eloquent 模型

Laravel Face Match 可以识别来自不同模型的人。例如,如果您有客户和员工模型,您可以请求对这些模型中的任何模型进行图像匹配。

要开始使用此包,您必须在下面显示的 face match 配置文件中注册模型(s)

'recognize' => [  
    Employee::class => [  
        'collection' => 'entity',  
        'identifier' => 'uuid,',  
        'media' => [
	        'field'  => 'avatar_image',
	        'binary' => false,
	    ],
    ],
],

其中 recognize 数组元素中的每个元素对应一个现有的模型类。每个元素键必须与模型类名称匹配。此外,每个元素必须按照每个使用的模型完成以下内容

  • Collection:其中 AWS 将索引头像图像和用户引用。如果没有指定,则将使用模型 namespaceclassName 的组合作为默认集合名称。
  • Identifier:用于在发生人脸匹配时识别记录的唯一数据库字段。建议使用 UUID 字段。
  • Field:确定将人脸图像 URL 存储在模型数据库中的哪个字段。
  • Binary:定义存储图像信息的字段是二进制或 blob 字段。默认为 false

为了使模型适合人脸识别,您必须向您的模型添加 FacialRecognition 特性,如下所示。

namespace App\Models;    

use Illuminate\Database\Eloquent\Model; 
use Grananda\AwsFaceMatch\Traits\FacialRecognition;    
 
 class Employee extends Model {  
 
     use FacialRecognition;  
 
     protected $fillable = [
        'name',
        'uuid',
        'avatar_image',
    ];   
} 

此外,应将 fieldidentifier 字段包含在模型的 fillable 数组中,并在必要时包含在数据库迁移中。

只要模型不共享相同的集合,您可以将人脸匹配功能添加到任意多个模型中。

不需要 AWS S3 存储桶,但可以用于存储模型图像。所需的所有内容只是一个图像 URL 或包含图像数据的二进制数据库记录。

系统仅在索引实体以供将来识别时接受 单张人脸图像

如何使用它

当使用 FacialRecognition 特性的模型创建新对象时,头像图像将被存储在 AWS Rekognition 服务中,并附带记录标识符。当使用不同的图像 URL 更新记录时,情况也是如此。如果在保存项目时记录缺少媒体 URL 或数据,则不会发生 Rekognition 索引操作。

类似于,当在本地删除模型时,所有存储的索引信息都会从 AWS 中删除。

从图像中识别模型

如果您希望找到可能匹配特定图像的模型,请使用以下命令

Employee::faceMatch('path/or/url/to/image.png');  

其中 Employee 可以替换为使用面部匹配功能的任何其他模型。如果有匹配,则命令将返回与给定图像对应的模型对象,否则返回 false

尽管系统可以索引二进制数据库字段中的图像,但匹配或识别过程必须使用基于文件系统的存储图像路径才能正常工作。纯二进制比较尚不支持。请提供该场景的有效用例,以帮助我们改进此组件。

忘记图像

使用以下命令从远程 AWS Rekognition 系统中删除本地记录。当用户请求从面部识别系统中删除时,此功能可能很有用。

Employee::faceForget($object);  

清理

以下命令将删除模型集合中的所有图像。请谨慎使用。

Employee::purgeCollection();  

大量索引

要从控制台运行以下命令以索引现有数据

php artisan facematch:index

即将推出

  • 在检测匹配时手动指定准确度阈值。

请随时评论和提出要求。