package com.kernal.passportreader.sdk.utils;
|
|
import android.app.Service;
|
import android.content.ComponentName;
|
import android.content.Context;
|
import android.content.Intent;
|
import android.content.ServiceConnection;
|
import android.graphics.Bitmap;
|
import android.graphics.BitmapFactory;
|
import android.net.Uri;
|
import android.os.IBinder;
|
|
import java.io.File;
|
import java.io.FileNotFoundException;
|
|
import kernal.idcard.android.RecogParameterMessage;
|
import kernal.idcard.android.RecogService;
|
import kernal.idcard.android.ResultMessage;
|
import kernal.idcard.camera.CardOcrRecogConfigure;
|
import kernal.idcard.camera.IBaseReturnMessage;
|
|
/**
|
* Time:2018/12/20
|
* Author:A@H
|
* Description: 和相机不在同一界面的导入图片识别
|
*/
|
public class ImportRecog {
|
|
private Context context;
|
private int ReturnAuthority;
|
public RecogService.recogBinder recogBinder;
|
private int nMainId=2;
|
private int nSubId=0;
|
private volatile IBaseReturnMessage iBaseReturnMessage;
|
private String selectPath="";
|
private String cutSavePath="";
|
private String HeadPicPath="";
|
private String fullPicPath="";
|
private Bitmap bitmap;
|
public ImportRecog(Context context,IBaseReturnMessage iBaseReturnMessage){
|
this.context=context;
|
this.iBaseReturnMessage=iBaseReturnMessage;
|
}
|
public void setiBaseReturnMessage(IBaseReturnMessage iBaseReturnMessage) {
|
this.iBaseReturnMessage = iBaseReturnMessage;
|
}
|
|
|
public ServiceConnection recogConn = new ServiceConnection() {
|
|
@Override
|
public void onServiceDisconnected(ComponentName name) {
|
recogBinder = null;
|
}
|
|
@Override
|
public void onServiceConnected(ComponentName name, IBinder service) {
|
|
recogBinder = (RecogService.recogBinder) service;
|
if(recogBinder!=null) {
|
RecogParameterMessage rpm = new RecogParameterMessage();
|
rpm.nTypeLoadImageToMemory = 0;
|
rpm.nMainID =nMainId;
|
rpm.nSubID[0] = nSubId;
|
rpm.GetSubID = true;
|
rpm.GetVersionInfo = true;
|
rpm.logo = "";
|
rpm.userdata = "";
|
rpm.sn = "";
|
rpm.authfile = "";
|
rpm.isCut = true;
|
rpm.triggertype = 0;
|
rpm.devcode = Devcode.devcode;
|
rpm.isSetIDCardRejectType=CardOcrRecogConfigure.getInstance().isSetIDCardRejectType;
|
//nProcessType:0- deleting all instructions 1- cropping 2- rotation 3- cropping and rotation
|
// 4- tilt correction 5- cropping+ tilt correction 6- rotation+tile correct
|
// 7- cropping+rotation+tilt correction.
|
rpm.nProcessType = 7;
|
rpm.isOpenIDCopyFuction = CardOcrRecogConfigure.getInstance().isOpenIDCopyFuction;
|
rpm.nSetType = 1;// nSetType: 0-Deleting operations,1-setting operations
|
if(selectPath!=null&&!selectPath.equals("")){
|
rpm.lpFileName = selectPath; // If rpm.lpFileName is null, auomatic recognition function will be executed.
|
}else if(bitmap!=null){
|
rpm.bitmap=bitmap;//Reserve
|
selectPath=fullPicPath;
|
}
|
rpm.lpHeadFileName =HeadPicPath ;//Save portrait of identity document
|
rpm.isSaveCut = CardOcrRecogConfigure.getInstance().isSaveCut;// Save cropping picture false=not saving true=saving
|
rpm.cutSavePath=cutSavePath;
|
if (nMainId== 2) {
|
rpm.isAutoClassify = true;
|
rpm.isOnlyClassIDCard = true;
|
} else if (nMainId== 3000) {
|
rpm.nMainID = 1034;
|
}
|
// end
|
try {
|
ResultMessage resultMessage;
|
resultMessage = recogBinder.getRecogResult(rpm);
|
if (resultMessage.ReturnAuthority == 0
|
&& resultMessage.ReturnInitIDCard == 0
|
&& resultMessage.ReturnLoadImageToMemory == 0
|
&& resultMessage.ReturnRecogIDCard > 0) {
|
if(iBaseReturnMessage!=null){
|
String[] picPath={selectPath,cutSavePath,HeadPicPath};
|
iBaseReturnMessage.scanOCRIdCardSuccess(resultMessage,picPath);
|
}
|
} else {
|
if(iBaseReturnMessage!=null){
|
String error=ManageIDCardRecogResult.managerErrorRecogResult(context,resultMessage);
|
String[] picPath={selectPath};
|
iBaseReturnMessage.scanOCRIdCardError(error,picPath);
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
if(bitmap!=null&&!bitmap.isRecycled()){
|
bitmap.isRecycled();
|
bitmap=null;
|
}
|
if (recogBinder != null) {
|
context.unbindService(recogConn);
|
}
|
}
|
|
}
|
}
|
};
|
|
public void startImportRecogService(String selectPath){
|
this.selectPath=selectPath;
|
if(CardOcrRecogConfigure.getInstance().isSaveCut){
|
cutSavePath=CardOcrRecogConfigure.getInstance().savePath.getCropPicPath();
|
}
|
if(CardOcrRecogConfigure.getInstance().isSaveHeadPic){
|
HeadPicPath=CardOcrRecogConfigure.getInstance().savePath.getHeadPicPath();
|
}
|
nMainId=CardOcrRecogConfigure.getInstance().nMainId;
|
nSubId=CardOcrRecogConfigure.getInstance().nSubID;
|
RecogService.nMainID =CardOcrRecogConfigure.getInstance().nMainId;
|
RecogService.isRecogByPath = true;
|
Intent recogIntent = new Intent(context,
|
RecogService.class);
|
context.bindService(recogIntent, recogConn, Service.BIND_AUTO_CREATE);
|
}
|
public void startImportRecogService(Uri uri,Context context) throws FileNotFoundException {
|
this.bitmap= BitmapFactory.decodeFileDescriptor(context.getContentResolver().openFileDescriptor(uri,"r").getFileDescriptor());
|
if(CardOcrRecogConfigure.getInstance().isSaveCut){
|
cutSavePath=CardOcrRecogConfigure.getInstance().savePath.getCropPicPath();
|
}
|
if(CardOcrRecogConfigure.getInstance().isSaveHeadPic){
|
HeadPicPath=CardOcrRecogConfigure.getInstance().savePath.getHeadPicPath();
|
}
|
if(CardOcrRecogConfigure.getInstance().isSaveFullPic){
|
fullPicPath=CardOcrRecogConfigure.getInstance().savePath.getFullPicPath();
|
ActivityRecogUtils.copyFile(context,uri,new File(fullPicPath));
|
}
|
nMainId=CardOcrRecogConfigure.getInstance().nMainId;
|
nSubId=CardOcrRecogConfigure.getInstance().nSubID;
|
RecogService.nMainID =CardOcrRecogConfigure.getInstance().nMainId;
|
RecogService.isRecogByPath = true;
|
Intent recogIntent = new Intent(context,
|
RecogService.class);
|
context.bindService(recogIntent, recogConn, Service.BIND_AUTO_CREATE);
|
}
|
}
|