npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@jaak.ai/document-detector

v2.0.5

Published

Stencil Component Starter

Downloads

1,038

Readme

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 -
    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:

| Propiedad | Descripción | Requerido | Tipo | Valor por defecto | |----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|--------------------------------|-------------------| | key | Key de autenticación proporcionado por el equipo de administración de JAAK al contratar los servicios. Contacte a soporte para más información. | Si | string | | | mode | Define 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). | si | video-cameraor upload-file | upload-file | | documentDetect | Activa la detección de documentos en el modo (video-camera). | no | boolean | true | | videoFeedback | Activa los mensajes en pantalla en la detección de documentos en el modo (video-camera). | no | boolean | true | | width | Especifica el ancho del elemento HTML del componente. | no | string | 500px | | height | Especifica el alto del elemento HTML del componente. | no | string | 400px | | progressiveDetection | Activa 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. | no | boolean | false | | placeholder | (Modo 'upload-file') Define el texto que se mostrará como marcador de posición en el campo de selección de archivos. | no | string | N/A | | buttonText | (Modo 'upload-file') Define el texto que aparecerá en el botón para subir archivos. | no | string | N/A | | size | (Modo 'upload-file') Establece el tamaño máximo permitido para los archivos que se pueden subir, especificado en kilobytes (KB). | no | number | N/A | | translate | (Modo 'video-camera') Permite personalizar los textos de las instrucciones para la captura del documento, proporcionando un objeto de traducciones. | no | Object | N/A |

Configuración propiedad Translate:

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

| Propiedad | Tipo | Valor por defecto | |----------------------------------|----------|---------------------------------------------------------| | front | string | Acerca la parte frontal de tu documento | | back | string | Acerca la parte trasera de tu documento | | changeSide | string | Voltea tu documento | | adjustAngle | string | Ajustar el ángulo | | cameraFeedbackBlur | string | Quédate quieto | | cameraFeedbackFacePhotoCovered | string | Incline o mueva el documento para eliminar los reflejos | | cameraFeedbackGlare | string | Dar la vuelta al documento | | cameraFeedbackWrongSide | string | Mantenga la foto de la cara completamente visible | | moveCloser | string | Acércate más | | moveFarther | string | Muévete más lejos |

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'
 };

 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);
});

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étodo | Descripción | Parámetros | Retorno | |-------------------------|--------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------|-------------------------------------------------| | 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. | Ninguno | Ninguno (void). | | startDetection() | Inicia la detección de documentos utilizando la cámara del dispositivo. | Ninguno | Ninguno (void). | | stopComponent() | Detiene las operaciones del componente invocando internamente el método stopCore. | Ninguno | Ninguno (void). | | restartComponent() | Reinicia el componente, restableciéndolo a su estado inicial utilizando el método interno resetCore. | Ninguno | Ninguno (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.

| Evento | Descripción | Detalle del Evento | |--------------------|--------------------------------------------------------------------------------------------|--------------------------------------------------------------------| | status | Se emite cuando el estado del componente cambia. | (string): El nuevo estado del componente. | | componentError | Se emite cuando ocurre un error interno en el componente. | (object): Detalles del error ocurrido. | | results | Emite 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'
        }
      };

      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'
        }
    }"
  (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