2.1.2 • Published 5 months ago

@jaak.ai/document-detector v2.1.2

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

Introducción

DocumentDetector es un componente independiente desarrollado en StencilJS que permite a los desarrolladores integrar la funcionalidad de captura y detección de imágenes de documentos de identificación en sus plataformas. Este componente ofrece dos principales capacidades:

Selección de archivos desde el dispositivo: Permite al usuario cargar imágenes desde el almacenamiento del dispositivo. El componente verifica si el archivo corresponde a un documento válido y, en caso afirmativo, emite la imagen procesada en formato Base64.

Captura de imágenes mediante la cámara: Activa la cámara del dispositivo, detecta automáticamente el documento y permite capturar una imagen cuando el documento está correctamente posicionado. La imagen capturada también se emite en formato Base64.

El uso de DocumentDetector, permite una implementar la funcionalidad de detección y procesamiento de documentos en sus aplicaciones, de forma fácil y sencilla proporcionando una experiencia ágil y confiable para los usuarios.

Instalación

Para integrar el componente web DocumentDetector en tu proyecto, es necesario utilizar npm, el gestor de paquetes de Node.js. Sigue estos pasos:

  1. Asegúrate de tener instalado Node.js y npm:
  • Descarga e instala Node.js desde nodejs.org. npm se incluye automáticamente con Node.js.
  • Verifica las versiones instaladas ejecutando:
    node -v
    npm -v
  1. Ubica la raíz de tu proyecto:
  • Navega hasta el directorio raíz de tu proyecto, donde se encuentra el archivo package.json.

Nota: Si no tienes un archivo package.json, inicializa un proyecto de node con el comando npm init

  1. Ejecuta el siguiente comando para instalar el componente:

    npm install @jaak.ai/document-detector 

Este comando añadirá el paquete "@jaak.ai/document-detector" como dependencia en tu proyecto, lo que permitirá utilizar el componente en tu código.

  1. Verifica la instalación:
  • Una vez instalado, asegúrate de que el componente aparece en las dependencias listadas en tu archivo package.json.

Setup y Configuración del Componente

El componente DocumentDetector requiere una configuración inicial mediante propiedades que se establecen como atributos en su instancia. Estas propiedades permiten personalizar su comportamiento y apariencia. A continuación, se detalla cada uno de los parámetros configurables:

PropiedadDescripciónRequeridoTipoValor por defecto
keyKey de autenticación proporcionado por el equipo de administración de JAAK al contratar los servicios. Contacte a soporte para más información.Sistring
modeDefine el modo de operación del componente: detección y captura mediante subida de archivos (upload-file) o mediante la cámara del dispositivo (video-camera).sivideo-cameraor upload-fileupload-file
documentDetectActiva la detección de documentos en el modo (video-camera).nobooleantrue
videoFeedbackActiva los mensajes en pantalla en la detección de documentos en el modo (video-camera).nobooleantrue
widthEspecifica el ancho del elemento HTML del componente.nostring500px
heightEspecifica el alto del elemento HTML del componente.nostring400px
progressiveDetectionActiva la detección progresiva, permitiendo que el componente siga detectando y capturando documentos de forma continua hasta que el desarrollador detenga manualmente la operación o elimine la instancia del componente.nobooleanfalse
placeholder(Modo 'upload-file') Define el texto que se mostrará como marcador de posición en el campo de selección de archivos.nostringN/A
buttonText(Modo 'upload-file') Define el texto que aparecerá en el botón para subir archivos.nostringN/A
size(Modo 'upload-file') Establece el tamaño máximo permitido para los archivos que se pueden subir, especificado en kilobytes (KB).nonumberN/A
translate(Modo 'video-camera') Permite personalizar los textos de las instrucciones para la captura del documento, proporcionando un objeto de traducciones.noObjectN/A
sdkConfigPermite configurar opciones avanzadas del SDK de reconocimiento de documentos.noObjectN/A

Configuración propiedad Translate:

Para configurar las instrucciones de los textos utiliza un objeto con las siguientes propiedades:

PropiedadTipoValor por defecto
frontstringAcerca la parte frontal de tu documento
backstringAcerca la parte trasera de tu documento
changeSidestringVoltea tu documento
adjustAnglestringAjustar el ángulo
cameraFeedbackBlurstringQuédate quieto
cameraFeedbackFacePhotoCoveredstringIncline o mueva el documento para eliminar los reflejos
cameraFeedbackGlarestringDar la vuelta al documento
cameraFeedbackWrongSidestringMantenga la foto de la cara completamente visible
moveCloserstringAcércate más
moveFartherstringMuévete más lejos

Configuración propiedad sdkConfig:

Para configurar opciones avanzadas del SDK de reconocimiento de documentos utiliza un objeto con las siguientes propiedades:

PropiedadTipoDescripciónValor por defecto
forceMobileModebooleanFuerza el modo móvil del SDK independientemente del dispositivo detectado.false
modelIdVariant'lightweight' \| 'full'Define la variante del SDK a utilizar: 'lightweight' para una versión más ligera o 'full' para todas las funcionalidades.'full'
initialMemorynumberEstablece la cantidad inicial de memoria (en MB) asignada al SDK.64
numberOfWorkersnumber \| nullDefine el número de workers que utilizará el SDK. Si es null, se utilizará el número óptimo según el dispositivo.null

Añade el Componente a tu archivo HTML

<!DOCTYPE html>
<html dir="ltr" lang="en">
<head>
  <meta charset="utf-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=5.0"/>
  <title>Jaak Web Components</title>
  <script type="module" src="https://unpkg.com/@jaak.ai/document-detector"></script>
  <style>
    .demo-container {
      display: flex;
      padding-top: 80px;
      justify-content: center;
      gap: 50px;
      flex-wrap: wrap;
    }
  </style>
</head>
<body>
<div class="demo-container">
  <document-detector></document-detector>
</div>
</body>
</html>

Ejemplo de Configuración

Para configurar el componente, añade un bloque <script> en tu archivo HTML. Dentro de este, obtendrás la instancia del componente y establecerás las configuraciones necesarias.

Paso 1: Obtener la instancia del componente

Utiliza el método document.querySelector para seleccionar el elemento DocumentDetector que has añadido en tu HTML:

<script>
  const detector = document.querySelector("document-detector");
</script>

Paso 2: Configurar las propiedades del componente

Define un objeto de configuración llamado userConfig con las propiedades deseadas. Luego, asigna este objeto a la propiedad config de la instancia del componente:

const userConfig = {
 key: 'your-access-key',
 width: '640px',
 height: '480px',
 mode: 'video-camera',
 placeholder: 'Upload your document',
 buttonText: 'Upload',
 size: 2048,
 translate: {
   front: 'Acerca el doc',
   back: 'Acerca el reverso del doc',
   changeSide: 'Voltea tu doc',
   adjustAngle: 'Rota tu doc',
   cameraFeedbackBlur: 'No te muevas'
 },
 sdkConfig: {
   forceMobileMode: false,
   modelIdVariant: 'full',
   initialMemory: 64,
   numberOfWorkers: null
 }
}

 detector.config = userConfig;

Obtener Resultados del DocumentDetector

Para recibir los resultados generados por el componente, utiliza un EventListener que escuche los eventos emitidos por el componente. Este evento proporciona los resultados a través del atributo detail del objeto del evento.

Añade el siguiente código dentro del bloque <script>:

detector.addEventListener("results", e => {
  // Los resultados emitidos por el componente
  console.log('RESULTS:');
  console.log(e.detail);
});

Response

{
  "documentData": {
    "generalData": {
      "type": "ID",
      "nationality": "MEXICAN",
      "name": "MARIA FERNANDA",
      "surname": "RODRIGUEZ",
      "motherSurname": "VALENCIA",
      "address": "AV REFORMA 247\nCOL JUAREZ 06600\nCUAUHTEMOC, CDMX",
      "expiryPermanent": false,
      "birthDate": "891225",
      "gender": "M",
      "documentImage": {
        "frontFull": "/9j/4AAQ...",
        "backFull": "/9j/4AAQ...",
        "front": "/9j/4AAQ...",
        "back": "/9j/4AAQ...",
        "signature": "/9j/4AAQ...",
        "face": "/9j/4AAQ..."
      }
    },
    "mechanicalReadingZone": "IDMEX8901234567<<8912254M2512311MEX<02<<12345<6\nRODRIGUEZ<VALENCIA<<MARIA<FERNANDA<<\n",
    "specificData": [
      {
        "label": "curp",
        "value": "ROVM123456MDFDRR78"
      },
      {
        "label": "electorKey",
        "value": "RDVLMF123456M789"
      },
      {
        "label": "registerYear",
        "value": 2023
      },
      {
        "label": "registerMonth",
        "value": 6
      },
      {
        "label": "emissionYear",
        "value": 2023
      },
      {
        "label": "identificationOCR",
        "value": "0123456789123"
      },
      {
        "label": "numIdentificationCredential",
        "value": "123456789"
      }
    ]
  }
}
LlaveTipo de DatoDescripción
documentDataObjetoContiene toda la información extraída del documento.
└── generalDataObjetoDatos generales del titular del documento.
└──── typeCadena (string)Tipo de documento identificado (ej. "ID").
└──── nationalityCadena (string)Nacionalidad del titular.
└──── nameCadena (string)Nombre(s) del titular.
└──── surnameCadena (string)Primer apellido del titular.
└──── motherSurnameCadena (string)Segundo apellido o apellido materno del titular.
└──── addressCadena (string)Dirección completa del titular.
└──── expiryPermanentBooleano (boolean)Indica si el documento tiene vigencia permanente.
└──── birthDateCadena (string)Fecha de nacimiento del titular.
└──── genderCadena (string)Género del titular.
└──── documentImageObjetoImágenes relacionadas con el documento.
└────── frontCadena (string)Imagen frontal del documento (puede estar vacía).
└────── backCadena (string)Imagen trasera del documento (puede estar vacía).
└────── signatureCadena (string)Imagen de la firma del titular (puede estar vacía).
└────── faceCadena (string)Imagen del rostro del titular (puede estar vacía).
└────── frontFullCadena (string)Imagen completa de la parte frontal del documento.
└────── backFullCadena (string)Imagen completa de la parte trasera del documento.
└── mechanicalReadingZoneCadena (string)Zona de lectura mecánica (MRZ) del documento.
└── specificDataArreglo de ObjetosInformación específica adicional del documento.
└──── labelCadena (string)Etiqueta identificadora del dato específico.
└──── valueVariado (string/int)Valor del dato específico (CURP, clave de elector, etc.).

Nota: La información extraída del documento puede variar según el tipo de documento identificado.

Resultado Final

Tu archivo HTML quedará estructurado de la siguiente forma:

<document-detector></document-detector>
<script>
  const detector = document.querySelector("document-detector");
  const userConfig = {
    key: 'your-access-key',
    width: '640px',
    height: '480px',
    mode: 'video-camera',
    placeholder: 'Upload your document',
    buttonText: 'Upload',
    size: 2048,
    translate: {
      front: 'Acerca el documento',
      back: 'Acerca el reverso del documento',
      changeSide: 'Voltea tu documento',
      adjustAngle: 'Rota tu documento',
      cameraFeedbackBlur: 'Mantén la cámara estable'
    }
  };
  detector.config = userConfig;
  detector.addEventListener("results", (e) => {
    console.log('RESULTS:');
    console.log(e.detail);
  });
</script>

Métodos Adicionales

La instancia del componente ofrece métodos adicionales que permiten acceder y ejecutar funcionalidades predefinidas del componente de manera sencilla.

MétodoDescripciónParámetrosRetorno
switchMode(newMode)Cambia el modo operativo del componente.newMode (string): Puede ser 'video-camera' o 'upload-file'.Ninguno (void).
getMode()Devuelve el modo operativo actual del componente.Ninguno(string): 'video-camera' o 'upload-file'.
uploadFile()Permite subir un archivo e iniciar el proceso de detección de documentos.NingunoNinguno (void).
startDetection()Inicia la detección de documentos utilizando la cámara del dispositivo.NingunoNinguno (void).
stopComponent()Detiene las operaciones del componente invocando internamente el método stopCore.NingunoNinguno (void).
restartComponent()Reinicia el componente, restableciéndolo a su estado inicial utilizando el método interno resetCore.NingunoNinguno (void).

Ejemplo de uso

En este ejemplo, añadiremos un botón a tu archivo HTML que permitirá alternar entre los dos modos operativos del componente (video-camera y upload-file).

Estructura HTML

Crea un contenedor que incluya el componente y un botón para realizar el cambio de modo:

<div class="demo-container">
  <document-detector></document-detector>
</div>


<button onclick="switchMode()">Switch mode</button>

Lógica del Botón

Dentro de la etiqueta <script>, añade el siguiente código para implementar la funcionalidad del botón:

<script>
  //...Código anterior
  //...
  //...
  async function switchMode() {
    detector.switchMode(await detector.getMode() === "video-camera" ? "upload-file" : "video-camera");
  }
</script>

Resultado

Con este código, al hacer clic en el botón, el componente alternará dinámicamente entre los modos video-camera y upload-file. Esto facilita cambiar la funcionalidad según las necesidades del usuario sin necesidad de recargar la página.

Eventos Adicionales

El componente emite diferentes eventos que permiten al desarrollador recibir información y retroalimentación sobre el estado y los resultados del componente. Estos eventos pueden ser utilizados para ejecutar lógica personalizada según las necesidades del proyecto.

EventoDescripciónDetalle del Evento
statusSe emite cuando el estado del componente cambia.(string): El nuevo estado del componente.
componentErrorSe emite cuando ocurre un error interno en el componente.(object): Detalles del error ocurrido.
resultsEmite los resultados de la detección de documentos.(ejemplo de uso descrito anteriormente)(object): Contiene los datos procesados del documento detectado.

Ejemplo de Uso

Puedes escuchar estos eventos utilizando el método addEventListener sobre la instancia del componente:

<script>
  const detector = document.querySelector("document-detector");
  // Tú Código
  // ...
  // ...
  // Escucha el evento 'status' 
  detector.addEventListener("status", (e) => {
    console.log("Nuevo estado del componente:", e.detail);
  });

  // Escucha el evento 'componentError'   
  detector.addEventListener("componentError", (e) => {
    console.error("Error en el componente:", e.detail);
  });
</script>

Eso en React

Paso 1: Configurar componente

Para usar como parte de un componente de React, simplemente impórtalo de la siguiente manera:

// Importarlo dentro del archivo de carga de la app App.tsx, main.tsx, index.tsx, etc.

import {defineCustomElements as defineDocumentDetector} from '@jaak.ai/document-detector/loader';

defineDocumentDetector(window);

Paso 2: Definir el componente para su uso en React

Declarar de manera global el componente en un archivo global.d.ts o seguido del archivo anterior

declare global {
  namespace JSX {
    interface IntrinsicElements {
      'document-detector': React.DetailedHTMLProps<
        React.HTMLAttributes<HTMLElement>,
        HTMLElement
      >;
    }
  }
}

Paso 3: Usar el componente en tu proyecto

Ahora lo podrás usar en tu proyecto de React:

function App() {
  const documentDetectorRef = useRef<any>(null);

  useEffect(() => {
    if (documentDetectorRef.current) {
      documentDetectorRef.current.config = {
        key: 'your-access-key',
        width: '640px',
        height: '480px',
        mode: 'video-camera',
        placeholder: 'Upload your document',
        buttonText: 'Upload',
        size: 2048,
        translate: {
          front: 'Acerca el documento',
          back: 'Acerca el reverso del documento',
          changeSide: 'Voltea tu documento',
          adjustAngle: 'Rota tu documento',
          cameraFeedbackBlur: 'Mantén la cámara estable'
        },
        sdkConfig: {
          forceMobileMode: false,
          modelIdVariant: 'full',
          initialMemory: 64,
          numberOfWorkers: null
        }
      };

      const documentDetector = documentDetectorRef.current;

      // Escucha el evento results
      documentDetector.addEventListener('results', (event: any) =>
        console.log('result ->', event.detail)
      );
    }
  }, []);

  return (
    <>
      <div>
        <document-detector
          ref={documentDetectorRef}
        ></document-detector>
      </div>
    </>
  );
}

export default App;

Uso en Angular

Paso 1: Configurar componente

En Angular Además, debes configurar CUSTOM_ELEMENTS_SCHEMA en el módulo donde se utilizara el componente.

schemas: [CUSTOM_ELEMENTS_SCHEMA]

Paso 2: Importar el componente

Impórtalo en el archivo main.ts de la siguiente manera:

// main.ts

import '@jaak.ai/document-detector';

Paso 3: Usar el componente en tu proyecto

<document-detector
  [config]="{
        key: 'your-access-key',
        width: '640px',
        height: '480px',
        mode: 'video-camera',
        placeholder: 'Upload your document',
        buttonText: 'Upload',
        size: 2048,
        translate: {
            front: 'Acerca el documento',
            back: 'Acerca el reverso del documento',
            changeSide: 'Voltea tu documento',
            adjustAngle: 'Rota tu documento',
            cameraFeedbackBlur: 'Mantén la cámara estable'
        },
        sdkConfig: {
            forceMobileMode: false,
            modelIdVariant: 'full',
            initialMemory: 64,
            numberOfWorkers: null
        }
    }"
  (results)="handleResults($event)"
  (status)="handleStatus($event)"
  (componentError)="handleComponentError($event)"
></document-detector>

Información Adicional

Este paquete puede requerir el uso de dependencias adicionales para su correcto funcionamiento, revise su versión de node:

npm install @jaak.ai/video-camera @jaak.ai/document-detector

This component is designed, developed and owned by JAAK and is their intellectual property. Visit more details inhttps://jaak.ai

1.2.0-dev.3

12 months ago

2.0.6-dev.1

7 months ago

1.2.2

11 months ago

1.2.0-dev.2

12 months ago

1.2.1

12 months ago

2.0.3

11 months ago

2.0.2

11 months ago

2.0.5

10 months ago

2.0.4

11 months ago

2.0.6

6 months ago

2.0.1

11 months ago

2.0.2-dev.2

11 months ago

2.0.2-dev.1

11 months ago

2.0.5-dev.1

10 months ago

1.2.2-dev.1

11 months ago

3.0.0-dev.4

5 months ago

2.0.1-dev.2

11 months ago

3.0.0-dev.3

5 months ago

2.0.1-dev.1

11 months ago

3.0.0-dev.5

5 months ago

3.0.0-dev.2

5 months ago

2.0.1-dev.4

11 months ago

3.0.0-dev.1

7 months ago

2.0.1-dev.3

11 months ago

2.1.2

5 months ago

2.1.1

5 months ago

2.0.4-dev.1

11 months ago

2.1.0

5 months ago

2.0.4-dev.2

10 months ago

1.2.1-dev.2

11 months ago

1.2.1-dev.1

12 months ago

2.0.3-dev.1

11 months ago

1.2.0

12 months ago

1.2.0-dev.1

12 months ago

1.1.5-dev.1

12 months ago

1.1.4-dev.2

12 months ago

1.1.5

12 months ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.3-dev.15

1 year ago

1.0.3-dev.14

1 year ago

1.0.3-dev.13

1 year ago

1.1.4

1 year ago

1.1.3

1 year ago

1.1.2

1 year ago

1.1.0-dev.2

1 year ago

1.1.0-dev.3

1 year ago

1.1.0-dev.1

1 year ago

1.1.0-dev.4

1 year ago

1.1.0-dev.5

1 year ago

1.0.3-dev.12

1 year ago

1.0.3-dev.11

1 year ago

1.0.3-dev.10

1 year ago

1.0.3-dev.5

1 year ago

1.0.3-dev.4

1 year ago

1.0.3-dev.3

1 year ago

1.0.3-dev.2

1 year ago

1.0.3-dev.9

1 year ago

1.0.3-dev.8

1 year ago

1.0.3-dev.7

1 year ago

1.0.3-dev.6

1 year ago

1.1.4-dev.1

1 year ago

1.0.3-dev.1

1 year ago

1.0.2-dev.2

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.2-dev.1

1 year ago

1.0.1-dev.2

1 year ago

1.0.1

1 year ago

1.0.0-dev.11

1 year ago

1.0.0-dev.10

1 year ago

1.0.1-dev.1

1 year ago

1.0.0-dev.9

1 year ago

1.0.0-dev.8

1 year ago

1.0.0-dev.7

1 year ago

1.0.0

1 year ago

1.0.0-dev.5

1 year ago

1.0.0-dev.6

1 year ago

1.0.0-dev.3

1 year ago

1.0.0-dev.4

1 year ago

0.0.1

1 year ago