يستخدم Octus SDK تقنيات التعلم العميق المتقدمة للمسح الدقيق والسريع للمعرف و OCR. يمكن للشركات دمج Octus SDK في تطبيقات Android الأصلية التي تأتي مع شاشات وتكوينات تم إنشاؤها مسبقًا. تقوم SDK بإرجاع الصور الممسوحة ضوئيًا والبيانات المستخرجة ورموز الخطأ. وكإجراء أمان ، لا يقوم SDK بتخزين أي من الصور الشخصية أو المعرفات التي يتم مسحها ضوئيًا.
للحصول على قائمة الوثائق المدعومة لكل بلد ، راجع المستندات المدعومة من Octus Country المدعومة
يمكنك العثور على أحدث إصدار وسجل الإصدار هنا
‼ الانتباه‼ → تغيير التغيير الذي تم تقديمه في Octus SDK v3.8.0
. لقد قدمنا تنسيق ترخيص جديد. إذا كنت تستخدم الإصدارات قبل v3.8.0
وتعتزم التحديث إلى v3.8.0
أو فوق ، يرجى الاتصال [email protected]
للحصول على ترخيص محدث.
ستحتاج إلى ترخيص صالح لاستخدام Octus SDK ، والذي يمكن الحصول عليه عن طريق الاتصال [email protected]
.
اعتمادًا على الترخيص - غير متصل أو عبر الإنترنت - لقد اخترت ، سيتم تعطيل أو تمكين وظيفة PING لخوادم الفواتير. على سبيل المثال ، إذا كنت قد اخترت نموذج SDK دون اتصال ، فلن يكون هناك أي خادم PING مطلوب لخادم الفواتير الخاص بنا لفواتيرك. ومع ذلك ، إذا اخترت تسعيرًا قائمًا على المعاملة ، ثم بعد كل معاملة ، سيتم تقديم طلب ping إلى خادم الفواتير الخاص بنا. لا يمكن المبالغة في هذا التطبيق. النقطة التي تجدر الإشارة إليها هي أنه إذا فشلت معاملة Ping لأي سبب من الأسباب ، فستكون المعاملة بأكملها باطلة دون أي نتائج من SDK.
بمجرد الحصول على الترخيص ، اتبع الإرشادات أدناه للحصول على تكامل ناجح لـ Octus SDK على تطبيق Android الخاص بك.
يسرد هذا القسم مكتبات Octus SDK المتوفرة لنظام Android مع تبعيات Gradle ، وأحدث الإصدار ، وحجمها.
مكتبة SDK | تبعية Gradle | أحدث إصدار | مقاس |
---|---|---|---|
Octus SDK (مطلوب) | com.frslabs.android.sdk: Octus | 9.1 ميغابايت | |
الوجه الأساسي المجمع SDK (مطلوب) | com.frslabs.android.sdk: core-face | 6.2 ميغابايت | |
النص الأساسي المجمع SDK (مطلوب) | com.frslabs.android.sdk: core-text | 4.0 ميغابايت | |
المسح الأساسي المجمع SDK (مطلوب) | com.frslabs.android.sdk: core-scan | 2.4 ميغابايت |
يستخدم Octus إمكانيات اكتشاف الوجه عبر أي من هذين التبعينين ، وهو مطلوب لتضمين أي منهما. Core Face المجمعة SDK و Core Face SDK. إذا لم يكن الحجم مشكلة ، نوصي بالذهاب مع SDK الوجه الأساسي. تم العثور على مزيد من التفاصيل حول هذه التبعيات أدناه.
قم بتضمين هذا التبعية إذا لم يكن حجم SDK مشكلة (يضيف ~ 6.2 ميجابايت إلى حجم التطبيق). هذا هو النهج الموصى به.
قم بتضمين هذا التبعية إذا كانت الزيادة في حجم SDK مصدر قلق (يضيف ~ 600 كيلو بايت إلى حجم التطبيق). ومع ذلك ، عند التشغيل الأول (وفقط عند التشغيل الأول) ، يتم تنزيل تبعيات الوجه أثناء عرض المستخدمين على شاشة مع شريط تقدم. لا يتمتع SDK المطبوخة بالوجه الأساسي هذا السلوك حيث يتم تجميع جميع الملفات المرتبطة خلال وقت الترجمة نفسه (وبالتالي الزيادة في الحجم).
يستخدم Octus أيضًا إمكانيات اكتشاف النص عبر أي من هذين التبعينين ، ويلزم تضمين أي منها. النص الأساسي المجمعة SDK والنص الأساسي SDK. إذا لم يكن الحجم مشكلة ، فإننا نوصي بالذهاب مع النص الأساسي SDK. تم العثور على مزيد من التفاصيل حول هذه التبعيات أدناه.
قم بتضمين هذا التبعية إذا لم يكن حجم SDK مشكلة (يضيف ~ 4.0 ميجابايت إلى حجم التطبيق). هذا هو النهج الموصى به.
قم بتضمين هذا التبعية إذا كانت الزيادة في حجم SDK مصدر قلق (يضيف ~ 250 كيلو بايت إلى حجم التطبيق). ومع ذلك ، عند التشغيل الأول (وفقط عند التشغيل الأول) ، يتم تنزيل التبعيات النصية أثناء عرض المستخدمين على شاشة مع شريط تقدم. لا يحتوي النص الأساسي المجمع على هذا السلوك لأن جميع الملفات المرتبطة بها يتم تجميعها أثناء وقت الترجمة نفسه (وبالتالي الزيادة في الحجم).
يستخدم Octus أيضًا إمكانيات اكتشاف المسح الضوئي عبر أي من هذين التبعينين ، ويحتاج إلى تضمين أي منها. المسح الأساسي المجمع SDK والمسح الضوئي الأساسي SDK. إذا لم يكن الحجم مشكلة ، فإننا نوصي بالذهاب مع SDK المسح الأساسي. تم العثور على مزيد من التفاصيل حول هذه التبعيات أدناه.
قم بتضمين هذا التبعية إذا لم يكن حجم SDK مشكلة (يضيف ~ 2.4 ميجابايت إلى حجم التطبيق). هذا هو النهج الموصى به.
قم بتضمين هذا التبعية إذا كانت الزيادة في حجم SDK مصدر قلق (يضيف حوالي 200 كيلو بايت إلى حجم التطبيق). ومع ذلك ، عند التشغيل الأول (وفقط عند التشغيل الأول) ، يتم تنزيل تبعيات المسح الضوئي أثناء عرض المستخدمين على شاشة مع شريط تقدم. لا يحتوي SDK المسح الضوئي على هذا السلوك حيث يتم تجميع جميع الملفات المرتبطة خلال وقت الترجمة نفسه (وبالتالي الزيادة في الحجم).
إصدار الحد الأدنى SDK - 19 (KitKat) أو أعلى
يمكن للمستخدمين الحاليين الذين يستخدمون الإصدار 2.xx متابعة استخدام SDKs حتى نوفمبر 2020 إذا لم يتم إجراء تغييرات على التطبيق. وأي تطبيقات جديدة تقوم بتطويرها أو إذا كنت تقوم بتحديث تطبيقك الحالي ، فيجب عليك استخدام SDK الإصدار 3.xx وهو متوافق مع AndroidX. من 01 أغسطس 2020 ، يجب أن تستخدم جميع التطبيقات الجديدة التي تدمج SDK إصدار 3.xx. سيتوقف دعم الإصدار 2.xx من 01 نوفمبر 2020. يرجى الكتابة إلينا باسم [email protected] إذا كنت بحاجة إلى مزيد من المعلومات حول إصدار Androidx.
أضف الكود التالي إلى ملف build.gradle
على مستوى project
allprojects {
repositories {
google()
jcenter()
// Repo for one of the dependencies
maven { url " https://jitpack.io " }
// Maven credentials for the Octus SDK
// Use `torus-android` if transaction based billing enabled
[ ' torus-android ' , ' octus-android ' , ' common-core-android ' ] . each { value ->
maven {
url " https://www.repo2.frslabs.space/repository/ ${ value } / "
credentials {
username ' <YOUR_USERNAME> '
password ' <YOUR_PASSOWRD> '
}
}
}
}
}
بعد ذلك ، أضف الكود التالي إلى ملف build.gradle
على مستوى app
الخاص بك
// ...
defaultConfig {
// ...
ndk {
abiFilters " armeabi-v7a " , " arm64-v8a " , " x86 " , " x86_64 "
}
vectorDrawables . useSupportLibrary true
renderscriptTargetApi 21
renderscriptSupportModeEnabled false
}
// ...
وبعد ذلك ، ابحث عن أحدث إصدار من Octus SDK هنا وأضف التبعيات
// ...
dependencies {
/* Dependencies for Octus SDK Using Androidx */
implementation ' com.google.android.material:<lastest version> '
implementation ' androidx.appcompat:appcompat:<latest version> '
implementation ' androidx.constraintlayout:constraintlayout:<latest version> '
// ...
/* Core Octus SDK Dependencies */
implementation ' com.frslabs.android.sdk:octus:3.X.X ' // Required . Find latest version at https://github.com/frslabs/octus-android/blob/master/CHANGELOG.md
implementation ' com.github.Tgo1014:JP2ForAndroid:1.0.4 ' // Required
implementation ' com.rmtheis:tess-two:9.1.0 ' // Required
// implementation 'com.google.mlkit:barcode-scanning:17.2.0' // Optional - Needed if document type is QR code
implementation ' com.google.mlkit:text-recognition:16.0.0 ' // Required
implementation " org.tensorflow:tensorflow-lite:2.16.1 "
implementation " org.tensorflow:tensorflow-lite-support:0.4.4 "
// REQUIRED : Use ANY ONE of the below core-face modules, i.e either core-face-bundled OR core-face-unbundled
// Recommended over core-face-unbundled
implementation ' com.frslabs.android.sdk:core-face-bundled:1.0.1 '
// Uncomment the below line and remove core-face-bundled mentioned above to use core-face-unbundled dependency.
// implementation 'com.frslabs.android.sdk:core-face-unbundled:1.0.1'
// Recommended over core-text-unbundled
implementation ' com.frslabs.android.sdk:core-text-bundled:1.0.0 '
// Uncomment the below line and remove core-text-bundled mentioned above to use core-text-unbundled dependency.
// implementation 'com.frslabs.android.sdk:core-text-unbundled:1.0.0'
implementation ' com.frslabs.android.sdk:core-scan-unbundled:1.0.0 '
implementation ' com.frslabs.android.sdk:torus:1.2.1 ' // Optional - Needed if transaction based billing is enabled
implementation ' com.google.code.gson:gson:2.8.6 ' // Optional - Needed if transaction based billing is enabled
// ...
}
يتطلب Octus إذن الكاميرا لبدء الماسح الضوئي الخاص بها
< manifest xmlns : android = " http://schemas.android.com/apk/res/android " package = " your.package.name " >
<!-- Required by Octus -->
< uses-permission android : name = " android.permission.CAMERA " />
<!-- Optional - Required if transaction based billing is enabled -->
< uses-permission android : name = " android.permission.INTERNET " />
< uses-permission android : name = " android.permission.ACCESS_NETWORK_STATE " />
< application >
...
</ application >
</ manifest >
قم بتهيئة مثيل Octus
مع التكوينات المناسبة لاستدعاء Octus SDK
public class MainActivity extends AppCompatActivity implements OctusResultCallback {
// ...
/* Enter the Octus license key here */
private String OCTUS_LICENSE_KEY = "<ENTER_YOUR_LICENSE_KEY_HERE>" ;
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
Button callSdk = findViewById ( R . id . call_sdk );
callSdk . setOnClickListener ( new View . OnClickListener () {
@ Override
public void onClick ( View view ) {
/* Invoke the Octus Sdk */
callOctusSdk ();
}
});
}
private void callOctusSdk () {
try {
//Initialize the Octus Sdk Config object with the appropriate configurations
OctusConfig octusConfig = new OctusConfig . Builder ()
. setLicenseKey ( OCTUS_LICENSE_KEY )
. showInstruction ( false )
. setScanMode ( Utility . ScanMode . AUTO )
. dataPointsAll ( false )
. orientationFlat ( false )
. setScanAlertType ( Utility . Alert . VIBRATION )
. setLanguage ( Utility . Language . EN )
. setDocumentCountry ( Country . IN )
. setDocumentType ( Document . VID )
. setDocumentSubType ( Utility . SubType . OCR )
. setDocumentSide ( Utility . Side . FRONT_BACK )
. aadhaarNumberMasked ( false )
. removeWatermark () // Optional and only for Document.CQL
. build ();
//Call the Octus Sdk to start scanning
Octus . setSdkConfig ( octusConfig )
. enableLogs ()
. initialise ( this , this ); //Pass the main context here
} catch ( OctusInitException e ){
//Handle exception here
Toast . makeText ( this , e . getMessage (), Toast . LENGTH_SHORT ). show ();
e . printStackTrace ();
}
}
// ...
}
لجميع parameters
وقيمها المحتملة ، راجع معلمات الأوكس
يجب أن ينفذ نشاطك OctusResultCallback
لتلقي النتيجة.
// ...
@ Override
public void onScanSuccess ( OctusResult octusResult ) {
/* Handle the Octus Sdk result here */
Log . d ( "OctusSdk Result :" , octusResult . toString ());
}
@ Override
public void onScanFailure ( String errorCode ) {
/* Handle the Octus Sdk failure result here */
Toast . makeText ( this , "Error: " + errorCode , Toast . LENGTH_SHORT ). show ();
}
// ...
بالنسبة لجميع errorCode
's ومعانيها ، راجع رموز خطأ الأوكس
يتم الحصول على نتيجة المسح من مثيل OctusResult
. وترد أدناه نتيجة أوكتوس كاملة ،
// ...
@ Override
public void onScanSuccess ( OctusResult octusResult ) {
/* Handle the Octus Sdk result here */
Log . d ( "OctusSdk Result :" , octusResult . toString ());
/* Below values are given for ID card with MRTD & without MRTD */
String code = octusResult . getCode ();
String documentType = octusResult . getDocumentType ();
String documentCountry = octusResult . getDocumentCountry ();
String documentSubType = octusResult . getDocumentSubType ();
String documentSide = octusResult . getDocumentSide ();
String dataPointAll = octusResult . getDataPointAll ();
String name1 = octusResult . getName1 ();
String name2 = octusResult . getName2 ();
String idNumber1 = octusResult . getDocumentNumber1 ();
String idNumber2 = octusResult . getDocumentNumber2 ();
String dob = octusResult . getDateOfBirth ();
String expiry = octusResult . getExpiryDate ();
String gender = octusResult . getGender ();
String address1 = octusResult . getAddress1 ();
String address2 = octusResult . getAddress2 ();
String address3 = octusResult . getAddress3 ();
String address4 = octusResult . getAddress4 ();
String city = octusResult . getCity ();
String state = octusResult . getState ();
String idCountry = octusResult . getCountry ();
String idIssCountry = octusResult . getIssuingCountry ();
/* Below values gives the Document Image path */
String idFacePath = octusResult . getFace ();
String idFrontPhotoPath = octusResult . getPhoto1 ();
String idBackPhotopath = octusResult . getPhoto2 ();
/* Below values are applicable to Cheque Leaf (India) only */
String bankAccountNumber = octusResult . getBankAccountNumber ();
String bankAccIfsc = octusResult . getBankIfsCode ();
String gstn = octusResult . getGSTN ();
/* Below values are applicable to Voter ID (India) only */
String frontConfidenceScore = octusResult . getConfidenceIndexF ();
String backConfidenceScore = octusResult . getConfidenceIndexB ();
String frontIdOcrStatus = octusResult . getFrontIdScanStatus ();
String backIdOcrStatus = octusResult . getConfidenceIndexB ();
/* Below values are applicable to Aadhaar Card (India) only */
String aadhaarMaskStatus = octusResult . getAadhaarMaskStatus ();
/* Below values are applicable to MRTD supported documents only */
String isMRZChecksumValidated = octusResult . getMrzChecksumValidityStatus ();
}
// ...
فيما يلي بعض الأساليب العامة لـ OctusResult
باختصار
الأساليب العامة | ||
---|---|---|
خيط | getaadhaarmaskstatus () | يحصل على حالة إخفاء رقم Aadhaar. القيم الممكنة هي ، |
يتم جدولة رموز الخطأ ومعناها أدناه
شفرة | رسالة |
---|---|
801 | مسح التوقيت خارج |
802 | مرت معلمات معرف غير صالحة |
803 | تم رفض إذن الكاميرا |
804 | توقف المسح |
805 | انتهت صلاحية الترخيص |
806 | ترخيص غير صالح |
807 | دقة الكاميرا غير صالحة |
811 | لم يتم اكتشاف QR |
812 | فشل تحليل QR |
814 | خطأ الكاميرا |
108 | الإنترنت غير متوفر |
401 | تم تجاوز حد API |
429 | الكثير من الطلبات |
501 ، 502 | خطأ Proteus Edge IO |
503 | خطأ التبعية GMS |
504 | خطأ التبعية في وحدة الوجه |
setLicenseKey(String octusLicenseKey)
(مطلوب)
يقبل مفتاح ترخيص Octus String
setScanMode(Utility.ScanMode scanMode)
(مطلوب)
يضبط وضع المسح
قيمة | تأثير |
---|---|
Utility.ScanMode.Auto | يبدأ المسح تلقائيًا بمجرد أن تكون معاينة الكاميرا جاهزة |
Utility.ScanMode.Manual | يعرض زر يستخدم لبدء المسح عند النقر عليه |
setDocumentType(Document documentType)
(مطلوب)
يحدد المستند الذي يجب مسحه. القيم الممكنة هي ،
قيمة | تأثير |
---|---|
document.pan | بطاقة عموم |
Document.adr | بطاقة Aadhaar |
document.vid | معرف الناخب |
document.nid | المعرف الوطني |
document.ppt | جواز سفر |
document.vsa | فيزا |
document.drv | رخصة القيادة |
document.cql | تحقق من الورقة |
document.ssn | رقم الضمان الاجتماعي |
document.frm16 | نموذج 16 |
document.gst | شكل ضريبة السلع والخدمات |
document.img_adr | التقاط الصور Aadhaar |
document.img_any | التقاط الصور العادي |
setDocumentCountry(Country country)
(مطلوب)
يضع البلد المرتبط بالوثيقة.
للحصول على القائمة الكاملة للبلدان المدعومة ، قم بإحالة المعلمات الريفية
setDocumentSubType(Utility.SubType subType)
(مطلوب)
يعين النوع الفرعي المستند. غالبية المستندات تدعم فقط Utility.SubType.OCR
كنوع فرعي.
المستندات التي يتم فيها تطبيق كل من Utility.SubType.OCR
Utility.SubType.QR_CODE
Document.ADR
Document.DRV
المستندات التي يتم فيها تطبيق كل من Utility.SubType.MRZ
Utility.SubType.OCR
.
Document.NID
المستندات التي تنطبق عليها فقط. Utility.SubType.MRZ
هي ،
Document.PPT
Document.VSA
المستندات التي Utility.SubType.PDF417
فيها فقط
Document.DRV
لل Country.NG
Document.VID
for Country.NG
القيم المحتملة للنوع الفرعي هي ،
قيمة | تأثير |
---|---|
Utility.SubType.ocr | يقوم بمسح المستند في وضع OCR |
Utility.SubType.qr_code | يقوم بمسح المستند في وضع QR |
Utility.SubType.Mrz | يقوم بمسح المستند في وضع MRZ |
Utility.SubType.pdf417 | يقوم بمسح المستند في وضع PDF417 |
setLanguage(Utility.Language language)
(اختياري) (الافتراضيات إلى stility.language.en )
يحدد اللغة المرتبطة بالوثيقة. القيم الممكنة هي ،
قيمة | تأثير |
---|---|
Utility.Language.en | إنجليزي |
Utility.language.fr | فرنسي |
Utility.language.es | الأسبانية |
Utility.Language.ar | عربي |
Utility.Language.hi | الهندية |
showInstruction(boolean show)
(اختياري) (الافتراضيات إلى خطأ )
يعين العلامة لتمكين/تعطيل شاشة التعليمات قبل المسح. القيم الممكنة هي ،
قيمة | تأثير |
---|---|
حقيقي | يتيح شاشة التعليمات |
خطأ شنيع | يعطل شاشة التعليمات |
setScanAlertType(Utility.Alert alertType)
(اختياري) (الافتراضيات إلى stility.alert.sound_vibration )
يضبط نوع التنبيه عندما تُرجع SDK النتيجة
قيمة | تأثير |
---|---|
فائدة. alert.sound | يؤدي إلى صوت صوت بعد اكتمال المسح |
stility.alert.vibration | يؤدي إلى استجابة خفيفة (تنبيه الاهتزاز) بعد اكتمال المسح |
فائدة. alert.none | يعطل أي ملاحظات على الانتهاء من المسح |
stility.alert.sound_vibration | يؤدي كل من صوت الصفير والاستجابة المتعصبة بعد اكتمال المسح |
setDocumentSide(Utility.Side documentSide)
(اختياري) (الافتراضيات إلى stility.side.front_back )
يحدد قيمة جانب المستند المطلوب مسحها
قيمة | تأثير |
---|---|
stility.side.front | يقوم بمسح الجانب الأمامي (الأساسي) فقط من المستند |
Utility.side.back | يقوم بمسح الجانب الخلفي (الثانوي) فقط من المستند |
Utility.side.front_back | يقوم بمسح الجانب الأمامي والخلفي من الوثيقة |
dataPointsAll(boolean dataPointCategory)
(اختياري) (افتراضي إلى خطأ )
يعين العلامة لتعيين فئة نقطة البيانات
قيمة | تأثير |
---|---|
حقيقي | يوفر نتيجة المسح الضوئي فقط إذا تم العثور على جميع نقاط البيانات |
خطأ شنيع | يوفر نتيجة المسح الضوئي إذا تم العثور على إحدى نقاط البيانات على الأقل |
orientationFlat(boolean isOrientationFlat)
(اختياري) (الافتراضيات إلى خطأ )
يحدد القيمة التي يجب على الماسح الضوئي قفل الاتجاه فيما يتعلق بسطح المسح. القيم الممكنة هي ،
قيمة | تأثير |
---|---|
حقيقي | المسح فقط عندما يكون اتجاه الهاتف (الكاميرا) عموديًا (مسطح) إلى سطح المسح. |
خطأ شنيع | مسح تجاهل اتجاه الهاتف (الكاميرا) إلى سطح المسح. |
aadhaarNumberMasked(boolean numberMasked)
(اختياري) (التخلف عن السداد إلى خطأ ) (ينطبق فقط على document.adr و country.in)
يضع العلم لتمكين/تعطيل إخفاء رقم Aadhaar
قيمة | تأثير |
---|---|
حقيقي | أقنعة رقم Aadhaar في نتيجة المسح (الصورة) |
خطأ شنيع | يعطل إخفاء رقم Aadhaar في نتيجة المسح |
removeWatermark()
(اختياري) (ينطبق فقط على document.cql)
يضبط العلم لإزالة العلامة المائية فوق صورة إخراج ورقة التحقق. إذا لم يتم استدعاء الطريقة ، فإن السلوك الافتراضي هو تضمين العلامة المائية.
setScanTimeLimit(timeInSec)
(اختياري)
يحدد المهلة وقت مسح المستند (في SEC).
يكتب | القيمة الافتراضية | يتراوح |
---|---|---|
document.cql | 25 | 12 - 30 |
وثائق أخرى | 20 | 8 - 30 |
skipDocumentAlternateCaptureMode(boolean skipMode)
(اختياري) (الافتراضيات إلى خطأ ) (ينطبق فقط على document.e_mandate_cat1)
يعين العلم لتمكين/تعطيل وضع الالتقاط البديل. في الوقت الحالي ، لا ينطبق إلا على المستند. e_mandate_cat1
قيمة | تأثير |
---|---|
حقيقي | يعطل وضع الالتقاط البديل |
خطأ شنيع | يتيح وضع الالتقاط البديل |
للحصول على أي استفسارات/ملاحظات ، اتصل بنا على [email protected]