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。