werk365 / identitydocuments
用于解析护照等身份证件的包
Requires
- google/cloud-vision: ^1.3
- illuminate/support: ~5|~6|~7|~8|~9
- intervention/image: ^2.5
Requires (Dev)
- mockery/mockery: ^1.1
- orchestra/testbench: ~3|~4
- phpunit/phpunit: ^8.0
- sempro/phpunit-pretty-print: ^1.0
- dev-master
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 2.0.0-beta
- 1.4.0
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- v1.1.0
- v1.0.0
- dev-analysis-Q3x0bO
- dev-bugfix/remove-unused-code
- dev-feature/parse-document-number-viz
- dev-analysis-BMZmEO
- dev-feature/add-exceptions-to-services
- dev-analysis-jLR3eZ
- dev-analysis-bQlK0w
- dev-release/2.0.0
- dev-analysis-KZydnR
- dev-analysis-M1yDxL
- dev-analysis-3wa6y4
- dev-analysis-J2y7bW
- dev-analysis-Rvy1nK
- dev-analysis-jLRyN7
- dev-analysis-5ZlVWr
- dev-analysis-VrAm6K
- dev-analysis-kayAwA
- dev-analysis-vQMj5g
- dev-feature/config
- dev-analysis-GDxLE2
- dev-analysis-9m3xR9
- dev-analysis-L32ZWo
This package is auto-updated.
Last update: 2024-08-27 16:31:26 UTC
README
有关一般问题和建议,请加入gitter
允许您处理护照和其他包含机器可读区域(MRZ)的文档的包。
此包允许您处理文档的图片以找到MRZ,解析MRZ,解析视觉检查区(VIZ),并且还可以找到并返回护照照片的裁剪图(使用人脸检测)。
⚠️ 版本2.x是包的完整重写,具有新的MRZ检测算法,且与版本1.x不兼容
安装
通过Composer
$ composer require werk365/identitydocuments
发布配置(可选)
$ php artisan vendor:publish --provider="Werk365\IdentityDocuments\IdentityDocumentsServiceProvider"
配置
服务
了解此包的第一件重要的事情是,您可以使用任何想要的OCR和或人脸检测API。此包本身不执行这些操作。
Google Vision Service
包中包含一个默认用于OCR和人脸检测的Google
服务类。如果您想使用Google服务,除了提供凭证外无需进一步配置。为此,创建一个服务帐户并下载JSON密钥文件。然后,将JSON转换为PHP数组,以便将其用作正常的Laravel配置文件。您的配置文件应命名为google_key.php
,放置在配置文件夹中,如下所示
return [ "type" => "service_account", "project_id" => "", "private_key_id" => "", "private_key" => "", "client_email" => "", "client_id" => "", "auth_uri" => "", "token_uri" => "", "auth_provider_x509_cert_url" => "", "client_x509_cert_url" => "", ];
创建自定义服务
如果您想使用任何其他API进行OCR和/或人脸检测,可以创建自己的服务,或者查看主包(WIP)中未包含的可用服务列表。
创建服务相对简单,如果您想创建执行OCR的服务,只需创建一个实现Werk365\IdentityDocuments\Interfaces\OCR
的类。同样,也存在一个Werk365\IdentityDocuments\Interfaces\FaceDetection
接口。为了使创建自定义服务更加简单,您可以使用以下命令
$ php artisan id:service <name> <type>
其中 name
是您要创建的服务的ClassName
,而 type
是 OCR
、FaceDetection
或 Both
。这将为您在 App\Services
命名空间中创建一个新的(空)服务,实现 OCR
、FaceDetection
或两者的接口。
使用方法
基本用法
创建一个新的身份证明文件,最多包含2张图片(可选),在此示例中,我们将在我们的示例控制器中使用包含2张图片的POST请求。
use Illuminate\Http\Request; use Werk365\IdentityDocuments\IdentityDocument; class ExampleController { public function id(Request $request){ $document = new IdentityDocument($request->front, $request->back); } }
⚠️ 在此示例中,我使用上传的文件,但您可以使用Intervention支持的任何文件
现在我们可以用这个新创建的身份证明文件做一些事情。首先,找到并返回MRZ
$mrz = $document->getMrz();
然后我们可以通过使用以下方式获取解析后的MRZ版本
$parsed = $document->getParsedMrz();
由于MRZ只允许A-Z和0-9字符,因此具有重音符号的人名将无法从MRZ中正确获取姓名。为了(尝试)从文档的VIZ部分找到正确的前缀和姓氏,使用以下方法
$viz = $document->getViz();
这将返回一个包含找到的前缀和姓氏以及置信度分数的数组。置信度分数是一个介于0和1之间的数字,显示MRZ和VIZ版本姓名之间的相似度。请注意,结果可能取决于您系统中的iconv()
实现。
要从文档中获取护照照片,请使用以下方法
$face = $document->getFace()
此函数返回一个 Intervention\Image\Image
获取上述所有内容
如果您想以简化的方式使用所有这些功能,您也可以使用静态的 all()
方法,该方法也期望最多两个图像作为参数。例如
use Illuminate\Http\Request; use Werk365\IdentityDocuments\IdentityDocument; class ExampleController { public function id(Request $request){ $response = IdentityDocument::all($request->front, $request->back); return response()->json($response); } }
all()
方法返回一个类似以下的数组
[ 'type' => 'string', // TD1, TD2, TD3, MRVA, MRVB 'mrz' => 'string', // Full MRZ 'parsed' => [], // Array containing parsed MRZ 'viz' => [], // Array containing parsed VIZ 'face' => 'string', // Base64 image string ]
如你所见,这包括上述所有提到的方法,以及 $document->type
变量。检测到的面部将以 200px 高度的 base64 图像字符串返回。
合并图像
有几个方法可以配置如何处理身份证件。首先,有 mergeBackAndFrontImages()
方法。此方法可以用来减少 OCR API 调用的次数。当使用此方法时,图像将堆叠在一起。请注意,此方法必须在 getMrz()
方法之前使用。示例
use Illuminate\Http\Request; use Werk365\IdentityDocuments\IdentityDocument; class ExampleController { public function id(Request $request){ $document = new IdentityDocument($request->front, $request->back); $document->mergeBackAndFrontImages(); $mrz = $document->getMrz(); } }
⚠️请注意,合并图像可能会根据图像的大小导致高内存使用
如果您想使用静态的 all()
方法并合并图像,请发布包的配置文件并在其中启用它。请注意,更改配置中的选项将仅应用于 all()
方法。默认配置值
'mergeImages' => false, // bool
设置 OCR 服务
如果您已经创建了一个自定义 OCR 服务或使用了一个不同于默认的 Google 服务,您可以使用 setOcrService()
方法。例如,假设我们已经使用上述方法创建了一个新的 TesseractService
,我们可以像这样使用它进行 OCR
use Illuminate\Http\Request; use App\Services\TesseractService; use Werk365\IdentityDocuments\IdentityDocument; class ExampleController { public function id(Request $request){ $document = new IdentityDocument($request->front, $request->back); $document->setOcrService(TesseractService::class); $mrz = $document->getMrz(); } }
如果您想使用 all()
方法,请发布包的配置文件并在其中设置正确的服务类。
设置面部检测服务
这可以通过使用 setFaceDetectionService()
方法以类似 OCR 服务的方式完成。例如
use Illuminate\Http\Request; use App\Services\AmazonFdService; use Werk365\IdentityDocuments\IdentityDocument; class ExampleController { public function id(Request $request){ $document = new IdentityDocument($request->front, $request->back); $document->setFaceDetectionService(AmazonFdService::class); $mrz = $document->getFace(); } }
如果您想使用 all()
方法,请发布包的配置文件并在其中设置正确的服务类。
其他方法
addBackImage()
设置 IdentityDocument
的背面图像。addFrontImage()
设置 IdentityDocument
的正面图像。setMrz()
设置 IdentityDocument
的 MRZ,如果您只想使用解析功能。
更多信息
如果您对内部如何工作感兴趣,或者想看如何在包内构建自定义服务的示例,我已经写了一篇关于这些内容的博客文章,您可以在以下链接找到:[hergen.nl](https://hergen.nl/processing-identity-documents-in-laravel)
变更日志
请参阅变更日志以获取最近更改的更多信息。
贡献
请参阅contributing.md以获取详细信息和一个待办事项列表。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件hergen.dillema@gmail.com联系,而不是使用问题跟踪器。
致谢
许可
请参阅许可文件以获取更多信息。