aoding9 / compreface-laravel-sdk
本sdk是基于compreface-javascript-sdk开发的laravel版本,仅做封装,将js改为laravel的写法,文档后半部分demo代码仍为js语法,参考前面即可
Requires
- php: >=7.4
- guzzlehttp/guzzle: ^7.8
- laravel/framework: >=8
This package is auto-updated.
Last update: 2024-09-30 03:16:30 UTC
README
CompreFace Laravel SDK使得将人脸识别集成到您的应用中更加简单。
注意:本sdk是基于compreface-javascript-sdk开发的laravel版本,仅做封装,将js改为laravel的写法,文档后半部分demo代码仍为js语法,参考前面即可
目录
要求
在使用我们的SDK之前,请确保您已在机器上安装了CompreFace和Nodejs。
- CompreFace(见以下兼容性矩阵)
- Nodejs(版本10+)
CompreFace 兼容性矩阵
说明
- ✔ SDK支持CompreFace的所有功能。
- 🟡 SDK与这个CompreFace版本兼容。如果CompreFace版本更新 - SDK将不支持CompreFace的新功能。如果CompreFace版本较旧 - 新SDK功能将失败。
- ✘ 存在重大向后兼容性问题。不推荐使用这些版本一起使用
安装
要将CompreFace Laravel SDK添加到您的项目中,请在项目文件夹中运行以下命令
composer require aoding9/compreface-laravel-sdk
使用
初始化
要开始使用Laravel SDK,您需要发布SDK配置文件
php artisan vendor:publish --provider="Aoding9\CompreFace\CompreFaceServiceProvider"
然后您需要在config/compreFace.php或.env文件中设置url
和port
。默认情况下,如果您在本地机器上运行CompreFace,则分别为https://`
和8000
。您可以在创建CompreFace时传递可选的options
对象来设置默认参数,更多信息请参阅参考。
# .env COMPRE_FACE_SEVER=https:// COMPRE_FACE_PORT=8000
初始化CompreFace对象后,您需要使用人脸服务的api key
初始化服务对象。您可以使用此服务对象来识别人脸。
但是,在识别之前,您需要首先将人脸添加到人脸集合中。为此,从服务对象获取人脸集合对象。
use Aoding9\CompreFace\CompreFace; $compreFace = app(CompreFace::class); $recognitionService = $compreFace->initFaceRecognitionService($api_key); // initialize service $faceCollection = $recognitionService->getFaceCollection(); // use face collection to fill it with known faces $list = $faceCollection->list(); $subjects = $recognitionService->getSubjects(); // use subjects object to work with subjects directely $path_to_image = public_path("uploads/images/wujing2.jpg"); $options = [ 'limit' => 0, //'det_prob_threshold' => 0.8, //'prediction_count' => 1, //'face_plugins' => "calculator,age,gender,landmarks", //'status' => "true", ]; $recognize = $recognitionService->recognize($path_to_image, $options); dd($recognize['result'][0]['subjects'][0]['subject'] ?? $recognize); // 0.98546;
将人脸添加到人脸集合中
以下是一个Laravel代码示例,展示了如何从您的文件系统中将图像添加到您的人脸集合中
$path_to_image = public_path("images/boy.jpg"); $name ='Tom'; $faceCollection->add($path_to_image, $name);
识别
此代码片段展示了如何识别未知人脸
$path_to_image = public_path("images/boy.jpg"); $recognitionService->recognize($path_to_image);
环境
注意:我们提供了3种上传图像到我们的SDK的方式。它们是url、blob和绝对路径(从本地机器)。
参考
CompreFace 全局对象
Global CompreFace 对象用于初始化与 CompreFace 的连接并设置选项的默认值。如果适用,默认值将用于每个服务方法。如果选项的值在全局对象中设置并作为函数参数传递,则将使用函数参数值。
构造函数
new CompreFace(server, port, options)
可能的选项
示例
$server = "https://"; $port = 8000; $options = [ 'limit'=> 0, 'det_prob_threshold'=> 0.8, 'prediction_count'=> 1, 'face_plugins'=> "calculator,age,gender,landmarks", 'status'=> "true" ]; $compreFace = new CompreFace($server, $port, $options);
方法
compreFace.initFaceRecognitionService(api_key)
初始化人脸识别服务对象。
示例
let recognitionService = compreFace.initFaceRecognitionService(api_key);
compreFace.initFaceDetectionService(api_key)
初始化人脸检测服务对象。
示例
let detectionService = compreFace.initFaceDetectionService(api_key);
compreFace.initFaceVerificationService(api_key)
初始化人脸验证服务对象。
示例
let verificationService = compreFace.initFaceVerificationService(api_key);
识别服务
人脸识别服务用于人脸识别。这意味着您首先需要将已知人脸上传到人脸集合中,然后识别其中未知的人脸。当您上传一个未知的人脸时,服务将返回与它最相似的人脸。此外,人脸识别服务支持验证端点以检查人脸集合中的人脸是否正确。更多信息,请参阅CompreFace 页面。
从给定图像中识别人脸
recognitionService.recognize(image_location, options)
识别图像中的所有人脸。第一个参数是图像位置,它可以是 URL 或本地机器上的路径。
支持选项
响应
{ "result" : [ { "age" : { "probability": 0.9308982491493225, "high": 32, "low": 25 }, "gender" : { "probability": 0.9898611307144165, "value": "female" }, "mask" : { "probability": 0.9999470710754395, "value": "without_mask" }, "embedding" : [ 9.424854069948196E-4, "...", -0.011415496468544006 ], "box" : { "probability" : 1.0, "x_max" : 1420, "y_max" : 1368, "x_min" : 548, "y_min" : 295 }, "landmarks" : [ [ 814, 713 ], [ 1104, 829 ], [ 832, 937 ], [ 704, 1030 ], [ 1017, 1133 ] ], "subjects" : [ { "similarity" : 0.97858, "subject" : "subject1" } ], "execution_time" : { "age" : 28.0, "gender" : 26.0, "detector" : 117.0, "calculator" : 45.0, "mask": 36.0 } } ], "plugins_versions" : { "age" : "agegender.AgeDetector", "gender" : "agegender.GenderDetector", "detector" : "facenet.FaceDetector", "calculator" : "facenet.Calculator", "mask": "facemask.MaskDetector" } }
示例
$image_location = public_path("images/team.jpg"); $options = { 'limit'=> 0, 'det_prob_threshold'=> 0.8, 'prediction_count'=> 1, 'face_plugins'=> "calculator,age,gender,landmarks", 'status'=> "true" } $recognitionService->recognize($image_location, $options)
获取人脸集合
recognitionService.getFaceCollection()
返回人脸集合对象
人脸集合可以用于管理已知人脸,例如添加、列出或删除它们。
人脸识别是对人脸集合中保存的已知人脸进行的,因此在使用 recognize
方法之前,您需要至少将一个人脸保存到人脸集合中。
有关人脸集合和管理的更多信息请参阅此处
方法
添加示例主题
faceCollection.add(image_location, subject, options)
将图像添加到您的人脸集合中。
支持选项
响应
{ "image_id": "string", "subject": "string" }
示例
$image_location = public_path("images/boy.jpg"); $name = 'Tom'; $options = [ 'det_prob_threshold'=> 0.8 ]; $faceCollection->add($image_location, $name, $options);
主题所有保存示例列表
faceCollection.list()
检索保存人脸集合中图像的列表
响应
{ "faces": [ { "image_id": "string", "subject": "string" } ] }
示例
faceCollection.list() .then(response => { console.log(JSON.stringify(response)); }) .catch(error => { console.log(`Oops! There is problem: ${error}`) })
按名称删除主题的所有示例
faceCollection.delete_all_subject(subject)
根据给定的主题删除图像。
响应
{
"deleted": <count>
}
示例
let subject = "Tom"; faceCollection.delete(subject) .then(response => { console.log(JSON.stringify(response)); }) .catch(error => { console.log(`Oops! There is problem ${error}`) })
按ID删除主题的示例
faceCollection.delete(image_id)
从人脸集合中删除图像。
响应
{ "image_id": "string", "subject": "string" }
示例
let image_id = "79ed78d8-f015-4947-b297-a24306ebbdad"; faceCollection.delete(image_id) .then(response => { console.log(JSON.stringify(response)); }) .catch(error => { console.log(`Oops! There is problem ${error}`) })
删除多个示例
faceCollection.delete_multiple_images(image_ids)
从人脸集合中删除图像。
响应
{ "image_id": "string", "subject": "string" }
示例
let image_id = "79ed78d8-f015-4947-b297-a24306ebbdad"; faceCollection.delete(image_id) .then(response => { console.log(JSON.stringify(response)); }) .catch(error => { console.log(`Oops! There is problem ${error}`) })
从给定图像中验证人脸
faceCollection.verify(image_path, image_id, options)
比较给定图像与您人脸集合中图像的相似度。
支持选项
响应
{ "result" : [ { "age" : { "probability": 0.9308982491493225, "high": 32, "low": 25 }, "gender" : { "probability": 0.9898611307144165, "value": "female" }, "mask" : { "probability": 0.9999470710754395, "value": "without_mask" }, "embedding" : [ 9.424854069948196E-4, "...", -0.011415496468544006 ], "box" : { "probability" : 1.0, "x_max" : 1420, "y_max" : 1368, "x_min" : 548, "y_min" : 295 }, "landmarks" : [ [ 814, 713 ], [ 1104, 829 ], [ 832, 937 ], [ 704, 1030 ], [ 1017, 1133 ] ], "subjects" : [ { "similarity" : 0.97858, "subject" : "subject1" } ], "execution_time" : { "age" : 28.0, "gender" : 26.0, "detector" : 117.0, "calculator" : 45.0, "mask": 36.0 } } ], "plugins_versions" : { "age" : "agegender.AgeDetector", "gender" : "agegender.GenderDetector", "detector" : "facenet.FaceDetector", "calculator" : "facenet.Calculator", "mask": "facemask.MaskDetector" } }
let image_location = "../images/team.jpg"; let image_id = "79ed78d8-f015-4947-b297-a24306ebbdad"; let options = { limit: 0, det_prob_threshold: 0.8, prediction_count: 1, face_plugins: "calculator,age,gender,landmarks,mask", status: "true" } faceCollection.verify(image_location, image_id, options) .then(response => { console.log(JSON.stringify(response)); }) .catch(error => { console.log(`Oops! There is problem with verifying image ${error}`) })
获取主题
recognitionService.getSubjects()
返回主题对象
主题对象允许直接处理主题(不是通过主题示例)。
有关主题的更多信息请参阅此处
let subjects = recognitionService.getSubjects();
方法
添加主题
在人脸集合中创建一个新的主题。
subjects.add(subject)
响应
{ "subject": "subject1" }
let subjects = recognitionService.getSubjects(); subjects.add("John");
列出主题
返回与人脸集合相关的所有主题。
subjects.list()
响应
{ "subjects": [ "<subject_name1>", "<subject_name2>" ] }
let subjects = recognitionService.getSubjects(); console.log(subjects.list());
重命名主题
重命名现有主题。如果新主题名称已存在,主题将被合并 - 所有来自旧主题名称的人脸都将重新分配给新名称的主题,旧主题将被删除。
subjects.rename(subject, new_name)
响应
{ "updated": "true|false" }
let subjects = recognitionService.getSubjects(); subjects.add("John"); console.log(subjects.list()); subjects.rename("John", "Jane"); console.log(subjects.list());
删除主题
删除现有主题及其所有保存的人脸。
subjects.delete(subject)
响应
{ "subject": "subject1" }
let subjects = recognitionService.getSubjects(); subjects.add("John"); console.log(subjects.list()); subjects.delete("John"); console.log(subjects.list());
删除所有主题
删除所有现有主题及其所有保存的人脸。
subjects.deleteAll()
响应
{ "deleted": "<count>" }
let subjects = recognitionService.getSubjects(); subjects.add("John"); subjects.add("Jane"); console.log(subjects.list()); subjects.deleteAll(); console.log(subjects.list());
人脸检测服务
人脸检测服务用于检测图像中的人脸。
方法
检测
detectionService.detect(image_location, options)
在图像上找到所有人脸。第一个参数是图像位置,它可以是 URL 或本地机器上的路径。
支持选项
响应
{ "result" : [ { "age" : { "probability": 0.9308982491493225, "high": 32, "low": 25 }, "gender" : { "probability": 0.9898611307144165, "value": "female" }, "mask" : { "probability": 0.9999470710754395, "value": "without_mask" }, "embedding" : [ -0.03027934394776821, "...", -0.05117142200469971 ], "box" : { "probability" : 0.9987509250640869, "x_max" : 376, "y_max" : 479, "x_min" : 68, "y_min" : 77 }, "landmarks" : [ [ 156, 245 ], [ 277, 253 ], [ 202, 311 ], [ 148, 358 ], [ 274, 365 ] ], "execution_time" : { "age" : 30.0, "gender" : 26.0, "detector" : 130.0, "calculator" : 49.0, "mask": 36.0 } } ], "plugins_versions" : { "age" : "agegender.AgeDetector", "gender" : "agegender.GenderDetector", "detector" : "facenet.FaceDetector", "calculator" : "facenet.Calculator", "mask": "facemask.MaskDetector" } }
示例
let image_location = "../images/team.jpg"; let options = { limit: 0, det_prob_threshold: 0.8, face_plugins: "calculator,age,gender,landmarks", status: "true" } detectionService.detect(image_location, options) .then(response => { console.log(JSON.stringify(response)); }) .catch(error => { console.log(`Oops! There is problem with recognizing image ${error}`) })
人脸验证服务
人脸验证服务用于比较两个图像。源图像应仅包含一个人脸,它将与目标图像上的所有人脸进行比较。
方法
验证
verificationService.verify(source_image_location, target_image_location, options)
比较两个作为参数提供的图像。源图像应仅包含一个人脸,它将与其他图像中的人脸进行比较。前两个参数是图像位置,它可以是 URL 或本地机器上的路径。
支持选项
响应
{ "result" : [{ "source_image_face" : { "age" : { "probability": 0.9308982491493225, "high": 32, "low": 25 }, "gender" : { "probability": 0.9898611307144165, "value": "female" }, "mask" : { "probability": 0.9999470710754395, "value": "without_mask" }, "embedding" : [ -0.0010271212086081505, "...", -0.008746841922402382 ], "box" : { "probability" : 0.9997453093528748, "x_max" : 205, "y_max" : 167, "x_min" : 48, "y_min" : 0 }, "landmarks" : [ [ 92, 44 ], [ 130, 68 ], [ 71, 76 ], [ 60, 104 ], [ 95, 125 ] ], "execution_time" : { "age" : 85.0, "gender" : 51.0, "detector" : 67.0, "calculator" : 116.0, "mask": 36.0 } }, "face_matches": [ { "age" : { "probability": 0.9308982491493225, "high": 32, "low": 25 }, "gender" : { "probability": 0.9898611307144165, "value": "female" }, "mask" : { "probability": 0.9999470710754395, "value": "without_mask" }, "embedding" : [ -0.049007344990968704, "...", -0.01753818802535534 ], "box" : { "probability" : 0.99975, "x_max" : 308, "y_max" : 180, "x_min" : 235, "y_min" : 98 }, "landmarks" : [ [ 260, 129 ], [ 273, 127 ], [ 258, 136 ], [ 257, 150 ], [ 269, 148 ] ], "similarity" : 0.97858, "execution_time" : { "age" : 59.0, "gender" : 30.0, "detector" : 177.0, "calculator" : 70.0, "mask": 36.0 } }], "plugins_versions" : { "age" : "agegender.AgeDetector", "gender" : "agegender.GenderDetector", "detector" : "facenet.FaceDetector", "calculator" : "facenet.Calculator", "mask": "facemask.MaskDetector" } }] }
示例
let source_image_location = "../images/boy.jpg"; let target_image_location = "../images/team.jpg"; let options = { limit: 0, det_prob_threshold: 0.8, face_plugins: "calculator,age,gender,landmarks", status: "true" } verificationService.verify(source_image_location, target_image_location, options) .then(response => { console.log(JSON.stringify(response)); }) .catch(error => { console.log(`Oops! There is problem with recognizing image ${error}`) })
贡献
贡献是开源社区如此令人惊叹的地方,可以学习、灵感和创造。您所做的任何贡献都将受到高度赞赏。
- 分支项目
- 创建功能分支(
git checkout -b feature/AmazingFeature
) - 提交您的更改(
git commit -m '添加一些AmazingFeature'
) - 将分支推送到远程(
git push origin feature/AmazingFeature
) - 打开Pull Request
在创建您的第一个贡献Pull Request之后,您将收到一个请求,要求您通过在Pull Request中评论特殊信息来签署我们的贡献者许可协议。
报告错误
请在此处报告任何错误。
如果您正在报告错误,请指定
- 您的操作系统名称和版本
- 可能有助于故障排除的任何有关您本地设置的详细信息
- 重现错误的详细步骤
提交反馈
向我们发送反馈的最佳方式是在https://github.com/exadel-inc/compreface-javascript-sdk/issues提交一个issue。
如果您正在提议一个功能,请
- 详细说明它应该如何工作。
- 尽可能缩小范围,以便更容易实现。
许可证信息
CompreFace JS SDK是在Apache 2.0许可证下发布的开源人脸识别SDK。