Smart IdReader SDK - incorporar reconhecimento em projetos em Python e PHP

Nós, Smart Engines , continuamos a série de artigos sobre como integrar nossas tecnologias de reconhecimento ( passaportes , cartões bancários e outros) em seus aplicativos. Anteriormente, escrevemos sobre incorporação no iOS e Android , mostramos como incorporar o reconhecimento no bot do Telegram e hoje falaremos sobre como trabalhar com interfaces Python e PHP da biblioteca de reconhecimento Smart IDReader para uso em um servidor interno.


A propósito, a lista de linguagens de programação que suportamos, além das discutidas aqui, inclui C #, Objective-C, Swift e Java. Como antes, apoiamos todos os sistemas operacionais e arquiteturas populares e impopulares, e nossos aplicativos de demonstração gratuitos estão disponíveis para download na App Store e no Google Play .


Por tradição, a versão demo do Smart IDReader SDK para Python e PHP, juntamente com exemplos, está disponível no Github e está disponível aqui.


Colocando um Wrap


Como a versão do plug-in deve corresponder à versão do intérprete, não fornecemos um módulo pronto, mas um montador automático que permite coletar e implantar o wrapper da biblioteca de reconhecimento Smart IDReader necessário em sua máquina (há suporte para Python 2/3 e PHP 5/7). Para fazer isso, você deve executar o script de montagem apropriado, indicando o caminho para nossa biblioteca libsmartidEngine.so e a versão do interpretador para a qual você precisa construir o módulo. Por exemplo, para Python, fica assim:


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

O PHP está indo de maneira semelhante, apenas o segundo argumento é o caminho para o php-config que você usa:


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

Importante: após a montagem, o módulo resultante fará referência a libSmartidEngine.so no caminho absoluto; portanto, primeiro instale a biblioteca em um diretório conveniente para você!


O montador automático descompactará o SWIG fornecido na montagem, gerará um módulo e o verificará executando o teste.


O wrapper da biblioteca inclui dois arquivos - um módulo escrito em Python / PHP e uma extensão para o intérprete (_pySmartIdEngine.so para Python e phpSmartidEngine.so). Para integrar o reconhecimento ao projeto, você precisa importar o módulo e conectar a extensão.
No caso do Python, para isso, basta escrever explicitamente o caminho para o módulo e a extensão:


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

No PHP, um módulo é importado da mesma maneira:


 require(“phpSmartIdEngine.php"); 

mas com a extensão é um pouco mais complicado: o vínculo dinâmico não funciona em algumas versões. Portanto, para trabalhar constantemente com a extensão, você deve colocá-la na pasta em que todas as extensões da sua versão estão localizadas (por exemplo, / usr / lib / php56 / modules) e conectar, escrevendo no php.ini padrão


 extension=phpSmartisEngine.so 

No exemplo com o GitHub, dizemos ao intérprete para usar nosso php.ini com a extensão já registrada


 php56 -c php.ini smartid_sample.php 

Então, descobrimos a conexão, fique à vontade para estudar um exemplo!


Aprendendo a interface


O exemplo começa com três argumentos - o caminho para a imagem a ser reconhecida, o caminho para o arquivo com a configuração do mecanismo e o tipo de documento a ser reconhecido (os testes executam o exemplo para rus.passport.national (passaporte de um cidadão da Federação Russa))


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

Como funciona:


 #      (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) 

Abordaremos os métodos de carregamento da imagem com mais detalhes: pode ser um caminho para um arquivo, uma linha na Base64 e um buffer na memória (dados nos formatos RGB \ YUV NV21 e o próprio arquivo jpeg). Os buffers podem ser externos e também podem ser recuperados de um objeto da classe Image (após criá-lo, especificando o caminho para o arquivo ou usando o mesmo buffer)


Importante: a própria imagem no formato RGB ou YUV pode ser acessada apenas no módulo Python usando um objeto bytearray (crie um objeto do tamanho necessário, passe-o para o método CopyToBuffer, veja um exemplo); no PHP, você só pode trabalhar com uma string no formato Base64!


Totalmente se parece com isso (em 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) 

Os módulos Python e PHP permitem que você aproveite todas as funcionalidades fornecidas pela interface C ++ da nossa biblioteca (com exceção de trabalhar com um buffer no PHP, conforme descrito acima).


Conclusão


Consideramos trabalhar com o SmartIdEngine SDK em Python e PHP. Nos exemplos, refletimos todas as dificuldades que você pode encontrar no processo de implantação do módulo em uma máquina em funcionamento. A versão Mock da biblioteca, apresentada no github, permite demonstrar o mecanismo de implantação do módulo e estudar sua interface sem nenhuma funcionalidade de reconhecimento. Para uma versão de avaliação, entre em contato conosco: support@smartengines.ru

Source: https://habr.com/ru/post/pt472536/


All Articles