Smart IdReader SDK-在Python和PHP中的项目中嵌入识别

我们Smart Engines继续撰写有关如何将我们的识别技术( 护照银行卡及其他)集成到您的应用程序中的系列文章。 之前我们写过关于在iOSAndroid上嵌入的文章,展示了如何在Telegram机器人中嵌入识别,今天我们将讨论如何在内部服务器上使用Smart IDReader识别库的Python和PHP接口。


顺便说一下,除了这里讨论的语言之外,我们支持的编程语言列表还包括C#,Objective-C,Swift和Java。 和以前一样,我们支持所有流行和许多不流行的操作系统和体系结构,我们的免费演示应用程序可从App StoreGoogle Play下载。


按照传统,适用于Python和PHP的Smart IDReader SDK的演示版本以及示例可在Github上获得,并在此处提供。


包好


由于插件的版本必须与解释器的版本匹配,因此我们不提供现成的模块,而是提供一个自动汇编器,该汇编器允许您在计算机上收集和部署必要的Smart IDReader识别库包装器(支持Python 2/3和PHP 5/7)。 为此,您必须运行适当的汇编脚本,指示我们的库libsmartidEngine.so的路径以及需要为其构建模块的解释器的版本。 例如,对于Python,它看起来像这样:


bash build_python.sh ../../bin 3 

PHP的运行方式与此类似,只有第二个参数是您使用的php-config的路径:


 bash build_php.sh ../../bin /usr/bin/php56-config 

重要提示:组装后,生成的模块将在绝对路径中引用libSmartidEngine.so,因此请首先将库安装在方便您的目录中!


自动组装器将解开组装中提供的SWIG的包装,生成模块并通过运行测试进行验证。


库包装器包含两个文件-一个用Python / PHP编写的模块,以及一个解释器的扩展名(Python的_pySmartIdEngine.so和phpSmartidEngine.so)。 要将识别集成到项目中,您需要导入模块并连接扩展。
对于Python,只需显式地编写模块和扩展的路径即可:


 sys.path.append(os.path.join(sys.path[0], '../../bin/')) sys.path.append(os.path.join(sys.path[0], '../../bindings/')) import pySmartIdEngine 

在PHP中,以相同的方式导入模块:


 require(“phpSmartIdEngine.php"); 

但是使用扩展名会有点复杂-动态链接在某些版本中不起作用,因此要与扩展名保持一致,您需要将其放入该版本所有扩展名所在的文件夹中(例如/ usr / lib / php56 / modules)并进行连接,用默认的php.ini编写


 extension=phpSmartisEngine.so 

在GitHub的示例中,我们只是告诉解释器使用已注册扩展名的php.ini。


 php56 -c php.ini smartid_sample.php 

因此,我们找出了联系,随时学习示例!


学习界面


该示例以三个参数开头-要识别的图像的路径,具有引擎配置的存档路径和要识别的文档类型(测试运行rus.passport.national(俄罗斯联邦公民的护照)示例)


 python smartid_sample.py ../../testdata/passport_rf_2.jpg ../../data-zip/bundle_mock_smart_idreader.zip rus.passport.national 

运作方式:


 #      (zip-,       ) engine = pySmartIdEngine.RecognitionEngine(config_path) #        session_settings = engine.CreateSessionSettings() session_settings.SetEnabledDocumentTypes(document_types) #    session = engine.SpawnSession(session_settings) #       resultFromImageFile = session.ProcessImageFile(image_path) session.Reset() #   output_recognition_result(resultFromImageFile) 

我们将更详细地介绍加载图像的方法:它可以是文件的路径,Base64中的一行以及内存中的缓冲区(均为RGB \ YUV NV21格式的数据以及jpeg文件本身)。 缓冲区可以是外部的,也可以从Image类的对象中检索(通过指定文件的路径或使用相同的缓冲区创建缓冲区之后)


重要提示: RGB或YUV格式的图片本身只能在Python模块中使用bytearray对象访问(创建所需大小的对象,将其传递给CopyToBuffer方法,请参见示例),在PHP中,您只能使用Base64格式的字符串!


整个看起来像这样(在Python中):


 engine = pySmartIdEngine.RecognitionEngine(config_path) session_settings = engine.CreateSessionSettings() session_settings.SetEnabledDocumentTypes(document_types) #   Image (   ) testImage = pySmartIdEngine.Image(image_path) #    ,      binaryRGBfile = open(image_path, "rb") size = os.path.getsize(image_path) binaryRGBfileBuffer = bytearray(size) binaryRGBfile.readinto(binaryRGBfileBuffer) #  ,    Base64 f = open(os.path.join(sys.path[0],"base64.txt"), 'r') base64BufferString = f.readline() f.close() # Base64-       # base64BufferString = testImage.GetBase64String() #    session = engine.SpawnSession(session_settings) #   resultFromImage = session.ProcessImage(testImage) session.Reset() resultFromImageFile = session.ProcessImageFile(image_path) session.Reset() resultFromImageData = session.ProcessImageData(binaryRGBfileBuffer, size) session.Reset() resultFromBase64 = session.ProcessImageDataBase64(base64BufferString) session.Reset() #   output_recognition_result(resultFromImage) output_recognition_result(resultFromImageFile) output_recognition_result(resultFromImageData) output_recognition_result(resultFromBase64) 

Python和PHP模块允许您利用我们库的C ++接口提供的所有功能(如上所述,除了在PHP中使用缓冲区外)。


结论


我们考虑过使用Python和PHP中的SmartIdEngine SDK,在示例中,我们反映了在将模块部署到工作计算机上过程中可能遇到的所有困难。 在github上展示的库的Mock版本,使您可以演示模块部署的机制并研究其接口,而无需任何识别功能。 对于试用版,请与我们联系:support@smartengines.ru

Source: https://habr.com/ru/post/zh-CN472536/


All Articles