grananda / awsfacematch

此包已 废弃 且不再维护。未建议替代包。

Laravel 面部匹配包


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 数组元素中,添加此包的以下可用外观。如果您希望在 trait 范围之外访问包的服务方法,则此操作是必需的。

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

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

php artisan migrate 

设置您的 Eloquent 模型

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

要开始使用此包,您必须在如下所示的匹配配置文件中注册模型

'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

即将推出

  • 在检测匹配时,可以手动指定准确性阈值。

请随时发表评论和提出请求。