SDK Smart IdReader - intégrer la reconnaissance dans les projets en Python et PHP

Nous, Smart Engines , poursuivons la série d'articles sur la façon d'intégrer nos technologies de reconnaissance ( passeports , cartes bancaires et autres) dans vos applications. Plus tôt, nous avons écrit sur l'intégration sur iOS et Android , montré comment intégrer la reconnaissance dans le bot Telegram , et aujourd'hui nous parlerons de la façon de travailler avec les interfaces Python et PHP de la bibliothèque de reconnaissance Smart IDReader pour une utilisation sur un serveur interne.


Soit dit en passant, la liste des langages de programmation que nous prenons en charge, en plus de ceux discutés ici, comprend C #, Objective-C, Swift et Java. Comme auparavant, nous prenons en charge tous les architectures et systèmes d'exploitation populaires et nombreux, et nos applications de démonstration gratuites sont disponibles en téléchargement sur l' App Store et Google Play .


Par tradition, la version de démonstration du SDK Smart IDReader pour Python et PHP ainsi que des exemples sont disponibles sur Github et sont disponibles ici.


Mettre une enveloppe


Étant donné que la version du plug-in doit correspondre à la version de l'interpréteur, nous ne fournissons pas de module prêt à l'emploi, mais un assembleur automatique qui vous permet de collecter et de déployer le wrapper de bibliothèque de reconnaissance Smart IDReader nécessaire sur votre machine (Python 2/3 et PHP 5/7 sont pris en charge). Pour ce faire, vous devez exécuter le script d'assemblage approprié, en indiquant le chemin d'accès à notre bibliothèque libsmartidEngine.so et la version de l'interpréteur pour lequel vous devez créer le module. Par exemple, pour Python, cela ressemble à ceci:


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

PHP fonctionne de manière similaire, seul le deuxième argument est le chemin vers la configuration php que vous utilisez:


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

Important: après l'assemblage, le module résultant fera référence à libSmartidEngine.so dans le chemin absolu, alors installez d'abord la bibliothèque dans un répertoire qui vous convient!


L'auto-assembleur déballera le SWIG fourni dans l'assemblage, générera un module et le vérifiera en exécutant le test.


L'enveloppe de bibliothèque comprend deux fichiers - un module écrit en Python / PHP et une extension pour l'interpréteur (_pySmartIdEngine.so pour Python et phpSmartidEngine.so). Pour intégrer la reconnaissance dans le projet, vous devez importer le module et connecter l'extension.
Dans le cas de Python, pour cela il suffit d'écrire explicitement le chemin vers le module et l'extension:


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

En PHP, un module est importé de la même manière:


 require(“phpSmartIdEngine.php"); 

mais avec l'extension, c'est un peu plus compliqué - la liaison dynamique ne fonctionne pas dans certaines versions, donc pour travailler constamment avec l'extension, vous devez la placer dans le dossier où se trouvent toutes les extensions de votre version (par exemple / usr / lib / php56 / modules) et vous connecter, écrire dans php.ini par défaut


 extension=phpSmartisEngine.so 

Dans l'exemple avec GitHub, nous disons simplement à l'interpréteur d'utiliser notre php.ini avec l'extension déjà enregistrée


 php56 -c php.ini smartid_sample.php 

Donc, nous avons compris la connexion, n'hésitez pas à étudier un exemple!


Apprendre l'interface


L'exemple commence par trois arguments - le chemin d'accès à l'image à reconnaître, le chemin d'accès à l'archive avec la configuration du moteur et le type de document à reconnaître (les tests exécutent l'exemple pour rus.passport.national (passeport d'un citoyen de la Fédération de Russie))


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

Comment ça marche:


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

Nous allons nous attarder sur les méthodes de chargement de l'image plus en détail: il peut s'agir d'un chemin d'accès à un fichier, d'une ligne en Base64 et d'un tampon en mémoire (les deux données au format RGB \ YUV NV21 et le fichier jpeg lui-même). Les tampons peuvent être externes, ainsi qu'ils peuvent être récupérés à partir d'un objet de la classe Image (après l'avoir créé en spécifiant le chemin d'accès au fichier ou en utilisant le même tampon)


Important: l'image elle-même au format RGB ou YUV n'est accessible que dans le module Python à l'aide d'un objet bytearray (créez un objet de la taille requise, passez-le à la méthode CopyToBuffer, voir un exemple), en PHP vous ne pouvez travailler qu'avec une chaîne au format Base64!


Tout cela ressemble à ceci (en 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) 

Les modules Python et PHP vous permettent de profiter de toutes les fonctionnalités fournies par l'interface C ++ de notre bibliothèque (à l'exception de travailler avec un tampon en PHP, comme décrit ci-dessus).


Conclusion


Nous avons envisagé de travailler avec le SDK SmartIdEngine en Python et PHP, dans les exemples, nous avons reflété toutes les difficultés que vous pouvez rencontrer dans le processus de déploiement du module sur une machine qui fonctionne. La version Mock de la bibliothèque, présentée au github, vous permet de démontrer le mécanisme de déploiement des modules et d'étudier leur interface sans aucune fonctionnalité de reconnaissance. Pour une version d'essai, veuillez nous contacter: support@smartengines.ru

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


All Articles