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:
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)
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