Cómo integrar la función Corrección de corrección de sesgo ML | autor: Sherlock | Desarrolladores de Huawei | Octubre de 2020

En el anterior enviar, analizamos cómo usar la capacidad de reconocimiento de texto del HUAWEI ML Kit. Con esta función, solo necesita proporcionar a los usuarios una imagen y su aplicación reconocerá automáticamente toda la información clave. Pero, ¿y si la imagen está sesgada? ¿Podemos seguir obteniendo la misma información clave? ¡Si podemos! Capacidad de corrección de la inclinación del documento El ML Kit detecta automáticamente la posición del documento, corrige el ángulo de escaneo y permite a los usuarios ajustar los puntos del borde. Entonces, incluso si el documento está sesgado, sus usuarios aún pueden obtener toda la información que necesitan.

La corrección de la inclinación del documento es útil en una amplia variedad de situaciones. Por ejemplo, si su cámara está inclinada al tomar un documento en papel, la imagen resultante puede ser difícil de leer. Al corregir el bisel de un documento, puede ajustar el documento al ángulo correcto para facilitar la lectura.

La corrección de la inclinación del documento también funciona con pestañas.

Y si viaja, puede usarlo para enderezar las imágenes de las señales de tráfico que ha tomado desde un ángulo.

¿No es cómodo? Ahora te mostraré cómo integrar esta habilidad rápidamente.

1. Preparativos

En el sitio web se puede encontrar información detallada sobre los preparativos a realizar. Desarrolladores – proceso de desarrollo de HUAWEI.

Aquí analizamos los procedimientos más importantes.

1.1 Configure la dirección del repositorio de Maven en el archivo build.gradle a nivel de proyecto

buildscript   {repositories {...maven {url   'https://developer.huawei.com/repo/'}}}dependencies {...classpath   'com.huawei.agconnect:agcp:1.3.1.300'}allprojects   {repositories {...maven {url   'https://developer.huawei.com/repo/'}}}

1.2 Configurar dependencias de SDK en el archivo build.gradle a nivel de aplicación

dependencies{// Import the base SDK.implementation 'com.huawei.hms:ml-computer-vision-documentskew:2.0.2.300'// Import the document   detection/correction model package.implementation 'com.huawei.hms:ml-computer-vision-documentskew-model:2.0.2.300'}

1.3 Agregue la configuración al encabezado del archivo

apply plugin: 'com.huawei.agconnect'apply plugin: 'com.android.application'

1.4 Agregue estos comandos al archivo AndroidManifest.xml para que el modelo de aprendizaje automático se pueda actualizar automáticamente

<meta-dataandroid:name="com.huawei.hms.ml.DEPENDENCY"android:value= "dsc"/>

1.5 Solicitar permiso a la cámara y permiso para leer la imagen local

<uses-permission   android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

2 Desarrollo de código

2.1 Crear un analizador de detección / corrección de cuadros de texto

MLDocumentSkewCorrectionAnalyzerSetting setting = new MLDocumentSkewCorrectionAnalyzerSetting.Factory().create();
MLDocumentSkewCorrectionAnalyzer analyzer = MLDocumentSkewCorrectionAnalyzerFactory.getInstance().getDocumentSkewCorrectionAnalyzer(setting);

2.2 Cree un objeto MLFrame usando android.graphics.Bitmap para el analizador de detección de imágenes

Se admiten imágenes JPG, JPEG y PNG. Recomendamos limitar el tamaño de la imagen a 320 x 320 px y 1920 x 1920 px.

MLFrame frame = MLFrame.fromBitmap(bitmap);

2.3 Llame al método asyncDocumentSkewDetect asincrónico o al método AnalyFrame síncrono para detectar un campo de texto.

Cuando el código de retorno MLDocumentSkewCorrectionConstant.SUCCESS, se devuelven las coordenadas de las cuatro verticales del cuadro de texto. Estas coordenadas son relativas a las coordenadas de la imagen de entrada. Si las coordenadas son inconsistentes con las coordenadas del dispositivo, debe convertirlas. De lo contrario, los datos devueltos serán insignificantes.

// Call the asyncDocumentSkewDetect asynchronous method.Task<MLDocumentSkewDetectResult> detectTask = analyzer.asyncDocumentSkewDetect(mlFrame);detectTask.addOnSuccessListener(new OnSuccessListener<MLDocumentSkewDetectResult>() {@Overridepublic void onSuccess(MLDocumentSkewDetectResult detectResult) {// Detection success.}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {// Detection failure.}})// Call the analyseFrame synchronous method.SparseArray<MLDocumentSkewDetectResult> detect = analyzer.analyseFrame(mlFrame);if (detect != null && detect.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {// Detection success.} else {// Detection failure.}

2.4 Obtenga los datos de coordenadas de las cuatro verticales en el cuadro de texto tan pronto como la detección sea exitosa

Utilice el vértice superior izquierdo como punto de partida y agregue el vértice superior izquierdo, el vértice superior derecho, el vértice inferior derecho y el vértice inferior izquierdo a la lista (Lista ). Finalmente, crea MLDocumentSkewCorrectionCoordinateInput objeto.

Si el método sincrónico analyseFrame se llama, los resultados de la detección se obtendrán primero, como puede ver en la siguiente figura. (Si el método asincrónico asyncDocumentSkewDetect se llama, omita este paso.)

MLDocumentSkewDetectResult detectResult = detect.get(0);

Obtenga los datos de coordenadas para las cuatro verticales del cuadro de texto y cree MLDocumentSkewCorrectionCoordinateInput objeto.

Point leftTop = detectResult.getLeftTopPosition();Point rightTop = detectResult.getRightTopPosition();Point leftBottom = detectResult.getLeftBottomPosition();Point rightBottom = detectResult.getRightBottomPosition();List<Point> coordinates = new ArrayList<>();coordinates.add(leftTop);coordinates.add(rightTop);coordinates.add(rightBottom);coordinates.add(leftBottom);MLDocumentSkewCorrectionCoordinateInput coordinateData = new MLDocumentSkewCorrectionCoordinateInput(coordinates);

2.5 Corrija el cuadro de texto llamando al método asincrónico asyncDocumentSkewCorrect o al método sincrónico syncDocumentSkewCorrect

// Call the asyncDocumentSkewCorrect asynchronous method.Task<MLDocumentSkewCorrectionResult> correctionTask = analyzer.asyncDocumentSkewCorrect(mlFrame, coordinateData);correctionTask.addOnSuccessListener(new OnSuccessListener<MLDocumentSkewCorrectionResult>() {@Overridepublic void onSuccess(MLDocumentSkewCorrectionResult refineResult) {// Detection success.}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {// Detection failure.}});// Call the syncDocumentSkewCorrect synchronous method.SparseArray<MLDocumentSkewCorrectionResult> correct= analyzer.syncDocumentSkewCorrect(mlFrame, coordinateData);if (correct != null && correct.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {// Correction success.} else {// Correction failure.}

2.6 Detenga el analizador y libere las fuentes de detección cuando se complete la detección

if (analyzer != null) {analyzer.stop();}

Efecto de demostración

Ahora tenemos una demostración que puede escanear documentos desde cualquier ángulo y ajustarlos a la vista frontal. Bastante genial, ¿no?

La corrección de la inclinación de los documentos también permite la capacidad de reconocimiento de documentos para ajustar los documentos inclinados desde el frente y convierte rápidamente los documentos en papel en documentos electrónicos, por lo que los usuarios pueden ser mucho más eficientes en el registro de información.

Código fuente de Github

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *