Smart IdReader SDK - تضمين الاعتراف في المشاريع في بيثون و PHP

نحن ، Smart Engines ، نواصل سلسلة المقالات حول كيفية دمج تقنيات التعرف لدينا ( جوازات السفر والبطاقات المصرفية وغيرها) في تطبيقاتك. في وقت سابق كتبنا عن التضمين على iOS و Android ، وأظهرنا كيفية تضمين التعرف في روبوت Telegram ، وسنتحدث اليوم عن كيفية العمل مع واجهات Python و PHP في مكتبة التعرف على Smart IDReader لاستخدامها على خادم داخلي.


بالمناسبة ، تتضمن قائمة لغات البرمجة التي ندعمها ، بالإضافة إلى اللغات التي تمت مناقشتها هنا ، C # و Objective-C و Swift و Java. كما هو الحال من قبل ، نحن ندعم جميع أنظمة التشغيل والبنى المشهورة وغير الشعبية ، كما تتوفر تطبيقاتنا التجريبية المجانية للتنزيل من App Store و Google Play .


من الناحية التقليدية ، تتوفر النسخة التجريبية من Smart IDReader SDK لـ Python و PHP إلى جانب أمثلة على Github وهي متاحة هنا.


وضع التفاف


نظرًا لأن إصدار المكوّن الإضافي يجب أن يتطابق مع إصدار المترجم الفوري ، فنحن لا نوفر وحدة نمطية جاهزة ، ولكننا نوفر أداة تجميع تلقائي تسمح لك بجمع ونشر مجمّع مكتبة التعرف على Smart IDReader الضروري على جهازك (يتم دعم Python 2/3 و PHP 5/7). للقيام بذلك ، يجب تشغيل البرنامج النصي للتجميع المناسب ، مع الإشارة إلى المسار إلى مكتبتنا libsmartidEngine.so وإصدار المترجم الذي تحتاج إليه لإنشاء الوحدة النمطية. على سبيل المثال ، بالنسبة لبيثون ، يبدو الأمر كما يلي:


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

يسير PHP بطريقة مماثلة ، فقط الوسيطة الثانية هي المسار إلى php-config الذي تستخدمه:


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

هام: بعد التجميع ، ستشير الوحدة النمطية الناتجة إلى libSmartidEngine.so في المسار المطلق ، لذلك قم أولاً بتثبيت المكتبة في دليل مناسب لك!


سيقوم المجمّع التلقائي بفك حزمة SWIG المتوفرة في التجميع ، وإنشاء وحدة نمطية والتحقق منها من خلال تشغيل الاختبار.


يحتوي غلاف المكتبة على ملفين - وحدة نمطية مكتوبة في Python / PHP ، وملحق للمترجم (_pySmartIdEngine.so لـ Python و phpSmartidEngine.so). لدمج الاعتراف في المشروع ، تحتاج إلى استيراد الوحدة النمطية وتوصيل الملحق.
في حالة بيثون ، يكفي كتابة مسار الوحدة والإرشاد بشكل صريح:


 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 نفسه). يمكن أن تكون المخازن المؤقتة خارجية ، وكذلك يمكن استردادها من كائن من فئة الصورة (بعد إنشائها بتحديد المسار إلى الملف أو باستخدام نفس المخزن المؤقت)


هام: لا يمكن الوصول إلى الصورة نفسها بتنسيق RGB أو YUV إلا في وحدة Python باستخدام كائن bytearray (إنشاء كائن بالحجم المطلوب ، تمريره إلى أسلوب CopyToBuffer ، راجع مثال) ، في PHP يمكنك فقط العمل مع سلسلة تنسيق Base64!


يبدو هذا تمامًا (في بيثون):


 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 ، كما هو موضح أعلاه).


استنتاج


فكرنا في العمل مع SmartIdEngine SDK في Python و PHP ، في الأمثلة التي عكسناها جميع الصعوبات التي قد تواجهها في عملية نشر الوحدة النمطية على جهاز العمل. تتيح لك نسخة المكتبة الوهمية ، المعروضة في جيثب ، إظهار آلية نشر الوحدة النمطية ودراسة واجهتها دون أي وظيفة تمييز. للحصول على نسخة تجريبية ، يرجى الاتصال بنا: support@smartengines.ru

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


All Articles