Cómo utilizar la API de alicloud para la identificación
Trabajo de preparación: agregue alicloud-android-apigateway-sdk-1.0.1.jar,commons-codec-1.10-1.putExtra en libs ("aspectX", 5);
intent.putExtra ("aspectY", 3
intent.putExtra ("salidaX", salidaX
<); p >intent.putExtra("outputY", outputY);intent.putExtra("scale",true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, desUri);
p>
intent.putExtra("return-data",false);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection",true);
startActivityForResult(intent,requestCode);
}
Usa base64 para subir fotos
private void trygetCardNum() {
if (NetworkUtils.isConnectWithTip(this, "No estás conectado a la red, por lo que no se pueden obtener los datos")) {
LoadingUtil.IMAGE_3);
Archivo archivo = nuevo Archivo(defaultPhotoAddress);
byte[] contenido = nuevo byte[(int) archivo.length() ];
FileInputStream finputstream = new FileInputStream(archivo);
finputstream.read(contenido);
finputstream.close();
imgBase64 = new String(Base64.encodeBase64 (contenido));
// imgBase64 = Base64Img.Bitmap2StrByBase64(mapa de bits);
if(imgBase64! =null||!imgBase64.equals("")){
PreferenceUtils.modifyStringValueInPreferences(CardActivity.this, Preferences.IMAGE_3, null);
}
} catch (IOException e) {
e.printStackTrace();
return;
}
// Obtener servicio
RpcService rpcService = ApiGatewayClient.getRpcService();
final ApiRequest apiRequest = new ApiRequest();
//Establecer la dirección, ruta y método de la solicitud p >
apiRequest.setAddress("");
apiRequest.setPath("/ rest/160601/ocr/ocr_idcard.json");
apiRequest.setMethod(HttpMethod.POST );
//Establece el cuerpo del formulario binario de acuerdo con el documento, admite la configuración de parámetros de consulta, parámetros de título y FormBody
apiRequest.setStringBody("{\"inputs\": [{\ "image\":{\"dataType\":50,\"dataValue\":\""+imgBase64+"\"\"\"\"\"\"\"\"\"\"\ "\" \"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\ "\" \" tipo de datos\":50,\"valor de datos\":\"{\\\\"lado\\\":\\\\"cara\"}}]");
/ /Establezca soporte para certificados autofirmados y otras formas de certificados. Si el certificado del lado del servidor es legítimo, no lo configure solo para desarrollo y pruebas, o para escenarios no rutinarios.
apiRequest.setTrustServerCertificate(true);
//Establecer tiempo de espera
apiRequest.setTimeout(10000);
rpcService.call( apiRequest, nueva ApiResponseCallback() {
@Override
public void onSuccess(ApiResponse apiResponse) {
//Manejar apiResponse
LoadingUtil.dismiss() ;
String s = apiResponse.getStringBody();
Resultado de NumBean = JSONObject.parseObject(s, NumBean.class);
String dataValue = resultado. getOutputs().get(0).getOutputValue().getDataValue();
DataValueBean dataValueBean = JSONObject.parseObject(dataValue, DataValueBean.class
Número = dataValueBean.getNum); ();
nombre = dataValueBean.getName();
dirección = dataValueBean.getAddress()
nacimiento = dataValueBean.
Nacionalidad = dataValueBean.getNationality();
sexo = dataValueBean.getSex()
if(dataValueBean.getError_msg()==null){
runOnUiThread(new Runnable() {
ejecución pública void() {
if(Número ==null||Número.equals("")||nombre == nulo|| nombre.equals("")||dirección == nulo||dirección.equals("")||nacimiento == nulo||nacimiento.equals( "")|sexo == nulo||sexo.equals("" )){
Toast.makeText(CardActivity.this, "Error de escaneo, vuelva a intentarlo", Toast.LENGTH_LONG)makeText(CardActivity.this, "Error de escaneo, vuelva a intentarlo", Toast.LENGTH_LONG).show ();
}
}});
}
}
@ Anular
public void onException(ApiInvokeException e) {
//Manejo de excepciones
LoadingUtil.dismiss();
"El análisis falló , inténtalo de nuevo.
dismiss();
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(CardActivity.this, "El análisis falló, por favor vuelva a intentarlo", Toast.LENGTH_LONG).show();
}
});
}
});
}
}
Adjunto:
la clase pública NumBean implementa Serializable{
lista privada Lista pública< OutputsBean> getOutputs() { devolver salidas; } public void setOutputs(Lista< OutputsBean> salidas) { this.outputs = salidas; } clase estática pública OutputsBean { cadena privadaoutputLabel; outputMultiBean privadooutputMulti; outputValueBeanoutputValue; cadena pública getOutputLabel() { returnoutputLabel; } public void setOutputLabel(String OutputLabel) { this.outputValue = OutputValue; } } clase estática pública OutputMultiBean { } clase estática pública OutputValueBean { tipo de datos int privado; valor de datos de cadena privada; p> p> public int getDataType() { return dataType; } public void setDataType(int dataType) { this.dataType = dataType; } } p >public String getDataValue() { return dataValue; } public void setDataValue(String dataValue) { this.dataValue = dataValue; } } } } la clase pública DataValueBean implementa la dirección de cadena privada serializable{ ; } p> cadena pública getNacimiento() {
p>devolver nacimiento;
}
public void setBirth(String nacimiento) {
this.birth = nacimiento;
}
cadena pública getConfig_str() {
return config_str;
}
public void setConfig_str(String config_str) {
this.config_str = config_str;
}
cadena pública getError_msg() {
return error_msg;
}
public void setError_msg( String error_msg) {
this.error_msg = error_msg;
}
public String getName() {
devolver nombre;
}
public void setName(nombre de cadena) {
this.name = nombre;
}
public String getNationality() {
devolver nacionalidad;
}
public void setNationality(String nacionalidad) {
this.nationality = nacionalidad;
}
public String getNum() {
return num;
} p>
public void setNum(String num) {
this.num = num;
}
public String getRequest_id() {
devolver solicitud _id;
}
public void setRequest_id(String request_id) {
this.request_id = request_id;
}
public String getSex() {
devolver sexo;
}
public void setSex(String sexo) { p>
this.sex = sexo;
}
public boolean isSuccess() {
devuelve éxito;
}
public void setSuccess(éxito booleano) {
this.success = éxito;
}
}
Hay una nueva función en AndroidManifest.xml en Agregar