dscke / identitydocuments
用于解析护照等身份证明文档的包
Requires
- google/cloud-vision: ^1.3
- illuminate/support: ~5|~6|~7|~8|~9|~10
- intervention/image: ^2.5
Requires (Dev)
- mockery/mockery: ^1.4.4
- orchestra/testbench: ~3|~4
- phpunit/phpunit: ^9.5.10
- sempro/phpunit-pretty-print: ^1.0
This package is auto-updated.
Last update: 2024-09-29 18:10:08 UTC
README
允许您处理护照和其他包含机读区域(MRZ)的文档的包。
此包允许您处理文档图像以查找MRZ,解析MRZ,解析视觉检查区(VIZ),并且还可以通过人脸检测找到并返回护照照片的裁剪版。
⚠️ 版本 3.x 是对包的完全重写,包含新的MRZ检测算法,与版本 1.x 不兼容
安装
通过Composer
$ composer require dscke/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支持的文件 http://image.intervention.io/api/make
现在我们可以对创建的新身份证明文档做几件事情。首先,查找并返回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()
方法,请发布包的配置并设置正确的服务类。
设置面部检测服务
这可以通过类似OCR服务的方式完成,使用setFaceDetectionService()
方法。例如
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()
设置IdentityDcoument
MRZ,如果您只想使用解析功能。
更多信息
如果您对某些内部工作原理感兴趣,或者想看到如何在包内构建自定义服务的示例,我已撰写了一篇关于这些内容的博客文章,您可以在此找到:[hergen.nl](https://hergen.nl/processing-identity-documents-in-laravel)
更改日志
请参阅更改日志,以获取有关最近更改的更多信息。
贡献
请参阅contributing.md以获取详细信息和学习清单。
安全
如果您发现任何与安全相关的问题,请通过电子邮件hergen.dillema@gmail.com联系,而不是使用问题跟踪器。
鸣谢
许可
。有关更多信息,请参阅许可文件。