Octus SDK使用先进的深度学习技术进行准确,快速的ID扫描和OCR。企业可以将OCTUS SDK集成到本机Android应用中,该应用程序带有预构建的屏幕和配置。 SDK返回扫描的图像,提取的数据和错误代码。作为安全措施,SDK不会存储扫描的任何个人数据或ID图像。
有关每个国家支持的文件列表,请参阅Octus国家特定支持的文件
您可以在此处找到最新版本和发布历史记录
!注意!→在Octus SDK v3.8.0
引入的破坏变化。我们引入了新的许可格式。如果您在v3.8.0
之前使用版本,并打算更新为v3.8.0
或更高版本,请联系[email protected]
以获取更新的许可证。
您将需要有效的许可来使用OCTUS SDK,可以通过联系[email protected]
获得。
根据许可证(离线或在线)的不同 - 您选择的,将禁用或启用计费服务器的ping功能。例如,如果您选择了离线SDK型号,那么我们的计费服务器将不需要服务器来向您收费。但是,如果您选择了基于交易的定价,则在每次交易之后,将向我们的计费服务器提出ping请求。该应用程序无法覆盖这。要注意的一点是,如果出于任何原因,PING交易失败,则整个事务将无效,而SDK的任何结果将是无效的。
获得许可后,请按照以下说明成功地集成了Octus SDK到您的Android应用程序中。
本节列出了Android的Octus SDK库,其Gradle依赖性,最新版本及其尺寸。
SDK库 | gradle依赖 | 最新版本 | 尺寸 |
---|---|---|---|
OCTUS SDK(必需) | com.frslabs.android.sdk:Octus | 9.1 MB | |
核心面捆绑SDK(必需) | com.frslabs.android.sdk:核心面包捆绑 | 6.2 MB | |
核心文本捆绑SDK(必需) | com.frslabs.android.sdk:核心文本捆绑 | 4.0 MB | |
核心扫描捆绑SDK(必需) | com.frslabs.android.sdk:核心捆绑 | 2.4 MB |
OCTUS通过这两个依赖项中的任何一个使用面部检测功能,并且必须包括其中任何一个。核心脸捆绑的SDK和核心脸部捆绑的SDK。如果尺寸不是问题,我们建议使用核心脸捆绑的SDK进行。有关这些依赖关系的更多详细信息如下。
如果SDK的大小不是问题,请包括此依赖关系(在应用程序大小中增加了〜6.2 MB)。这是推荐的方法。
如果关注SDK大小的增加,请包括此依赖关系(在应用程序尺寸中增加了约600 kb)。但是,在第一次运行时(仅在第一次运行时),在用户显示带有进度栏的屏幕时下载了面部依赖项。核心面捆绑的SDK没有这种行为,因为在编译时间本身(因此大小的增加)中,所有相关的文件都捆绑在一起。
OCTUS还通过这两个依赖项中的任何一个都使用文本检测功能,并且必须包括其中任何一个。核心文本捆绑的SDK和核心文本Unbundled SDK。如果大小不是问题,我们建议使用核心文本捆绑的SDK。有关这些依赖关系的更多详细信息如下。
如果SDK的大小不是问题,请包括此依赖关系(在应用程序大小中增加了〜4.0 MB)。这是推荐的方法。
如果关注SDK大小的增加,则包括此依赖关系(在应用程序大小中增加了约250 kb)。但是,第一次运行(仅在第一次运行时),在用户显示带有进度栏的屏幕时下载了文本依赖项。核心文本捆绑的SDK没有这种行为,因为在编译时间本身(因此大小的增加)中,所有相关的文件都捆绑在一起。
OCTUS还通过这两个依赖项中的任何一个都使用扫描检测功能,并且必须包括其中任何一个。核心扫描捆绑的SDK和核心扫描Unbindled SDK。如果大小不是问题,我们建议使用核心扫描捆绑的SDK进行。有关这些依赖关系的更多详细信息如下。
如果SDK的大小不是问题,请包括此依赖关系(在应用程序大小中增加约2.4 MB)。这是推荐的方法。
如果关注SDK大小的增加,则包括此依赖性(将应用程序尺寸增加约200 kb)。但是,在第一次运行时(仅在第一次运行时),在用户显示带有进度栏的屏幕时下载了扫描依赖项。核心扫描捆绑的SDK没有这种行为,因为在编译时间本身(因此大小的增加)中,所有相关的文件都捆绑在一起。
最低SDK版本-19 (Kitkat)或更高版本
如果没有对应用程序进行更改,则使用2.xx版本的现有用户可以继续使用SDK。以及您正在开发的任何新应用程序,或者您正在更新现有应用程序,则必须使用Androidx兼容的SDK版本3.xx。从2020年8月1日起,所有集成我们的SDK的新应用都必须使用3.xx版本。支持2.xx版本将从2020年11月1日起停止。如果您需要有关Androidx版本的更多信息,请以[email protected]写信。
将以下代码添加到您的project
级别build.gradle
文件
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> '
}
}
}
}
}
之后,将以下代码添加到您的app
级别build.gradle
文件
// ...
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
及其可能的值,请参阅OCT参数
您的活动必须实施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
及其含义,请参阅OCTUS错误代码
扫描的结果是从OctusResult
实例中获得的。完整的OCTUS结果在下面给出
// ...
@ 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 | 通过无效的ID参数 |
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)
(必需)
设置扫描模式
价值 | 影响 |
---|---|
实用程序。Scanmode.auto | 一旦摄像机预览准备就绪,就会自动开始扫描 |
实用程序。Scanmode.manual | 单击时显示一个用于启动扫描的按钮 |
setDocumentType(Document documentType)
(必需)
设置必须扫描的文档。可能的值是
价值 | 影响 |
---|---|
document.pan | PAN卡 |
Document.Adr | Aadhaar卡 |
document.vid | 选民身份证 |
document.nid | 国家ID |
document.ppt | 护照 |
document.vsa | 签证 |
document.drv | 驾驶执照 |
document.cql | 检查叶子 |
document.ssn | 社会保险号 |
Document.FRM16 | 表格16 |
document.gst | 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
apply的文档是
Document.NID
只有Utility.SubType.MRZ
应用的文档是,
Document.PPT
Document.VSA
仅使用Utility.SubType.PDF417
的文档是,
Document.DRV
for Country.NG
Document.VID
Country.NG
子类型的可能值是
价值 | 影响 |
---|---|
utility.subtype.ocr | 以OCR模式扫描文档 |
utility.subtype.qr_code | 在QR模式下扫描文档 |
utility.subtype.mrz | 以MRZ模式扫描文档 |
实用程序。subtype.pdf417 | 在PDF417模式下扫描文档 |
setLanguage(Utility.Language language)
(可选) (默认为效用。language.en )
设置与文档关联的语言。可能的值是
价值 | 影响 |
---|---|
实用程序,language.en | 英语 |
实用程序.language.fr | 法语 |
实用程序 | 西班牙语 |
实用程序。language.ar | 阿拉伯 |
实用程序 | 印地语 |
showInstruction(boolean show)
(可选) (默认为false )
设置标志以在扫描之前启用/禁用指令屏幕。可能的值是
价值 | 影响 |
---|---|
真的 | 启用说明屏幕 |
错误的 | 禁用说明屏幕 |
setScanAlertType(Utility.Alert alertType)
(可选) (默认为futility.alert.sound_vibration )
SDK返回结果时设置警报类型
价值 | 影响 |
---|---|
实用程序 | 扫描完成后触发蜂鸣声 |
实用程序。振动 | 扫描完成后,触发轻度触觉反应(振动警报) |
实用程序 | 禁用有关扫描完成的任何反馈 |
实用程序 | 扫描完成后,触发哔哔声和触觉反应 |
setDocumentSide(Utility.Side documentSide)
(可选) (默认为实用程序。side.front_back )
设置要扫描的文档侧的价值
价值 | 影响 |
---|---|
实用程序 | 仅扫描文档的前面(主要)侧 |
实用程序side.back | 仅扫描文档的背面(次要) |
实用程序。side.front_back | 扫描文档的前后 |
dataPointsAll(boolean dataPointCategory)
(可选) (默认为false )
设置标志以设置数据点类别
价值 | 影响 |
---|---|
真的 | 仅在找到所有数据点时才提供扫描结果 |
错误的 | 如果发现至少一个数据点,则提供扫描结果 |
orientationFlat(boolean isOrientationFlat)
(可选) (默认为false )
设置扫描仪应锁定相对于扫描表面的方向的值。可能的值是
价值 | 影响 |
---|---|
真的 | 仅当手机(相机)的方向垂直(平坦)到扫描表面时进行扫描。 |
错误的 | 扫描忽略手机(相机)到扫描表面的方向。 |
aadhaarNumberMasked(boolean numberMasked)
(可选) (默认为false ) (仅适用于document.Adr和country.in.in)
设置标志以启用/禁用Aadhaar号码掩盖
价值 | 影响 |
---|---|
真的 | 在扫描结果中掩盖Aadhaar号码(图像) |
错误的 | 禁用扫描结果中掩盖Aadhaar号码 |
removeWatermark()
(可选) (仅适用于document.cql)
设置标志以删除检查叶输出图像上的水印。如果未调用方法,则默认行为是包括水印。
setScanTimeLimit(timeInSec)
(可选)
设置文档扫描时间限制(以SEC为单位)。
类型 | 默认值 | 范围 |
---|---|---|
document.cql | 25 | 12-30 |
其他文件 | 20 | 8-30 |
skipDocumentAlternateCaptureMode(boolean skipMode)
(可选) (默认为false ) (仅适用于document.e_mandate_cat1)
设置标志以启用/禁用替代捕获模式。目前,仅适用于document.e_mandate_cat1
价值 | 影响 |
---|---|
真的 | 禁用替代捕获模式 |
错误的 | 启用替代捕获模式 |
有关任何查询/反馈,请通过[email protected]
与我们联系