Ir para o conteúdo principal

QR Code: inventário de bens móveis pelo celular

Realizar estudo de viabilidade técnica de implementação de uso do QR Code no processo de inventário de bens móveis em e-Patrimônio.

OBJETIVO

Definir a melhor abordagem para implementação de leitura de ...Qr-code em aplicações javascript.

 

JUSTIFICATIVA

...Definir a melhor abordagem para implementação de leitura de Qr-code em aplicações javascript.

 

RESULTADOS ESPERADOS

....Permitir a interação com o sistema atras de leituras de Qr-codes, reduzindo a necessidade de digitação e melhorando o uso de sistemas em dispositivos moveis.

 

ENVOLVIDOS:
  • Assessor:
    • Diego Gonçalves de Almeida
  • Equipe Técnica:
    • Diego Barros de Oliveira
    • Alef Carvalho da Silva
    • Anderson Soares Cardoso
  • Gerente de Desenvolvimento:
    • Janderson de Castro Thomaz
  • Product Owner:
    • Jônatas Justiniano Lima
  • Scrum Master:
    • Edson Masami Hiraçaka

 

GLOSSÁRIO
  • PostGreSql-NPM Banco- Node Package Manager;
  • Node.js - é um ambiente de Dadosexecução relacionalJavaScript openSourceopen-source comque maisfunciona deutilizando 30o anosmecanismo deChrome desenvolvimentoV8;
  • ativo;
  • WebWorker - ;
  • QR-Code - ;
  • ReactJS - ;
  • HTML - ;
  • Javascript - ;
  • Low Level - ;
  • Engine - ;

 

DESENVOLVIMENTO

REACT-QR-READER (https://www.npmjs.com/package/react-qr-reader)

    • Componente pronto para utilização em aplicações react;
    • Utiliza WebWorker para computar dados do qr-code evitando que a interface fique lenta;
    • Publicado no NPM 2 anos atras;
    • Ultima atualização do repositório 2 anos;

A biblioteca 'react-qr-reader' fornece um componente pronto para utilização em aplicações react, ela tem com dependência (core) a jsQR (https://github.com/cozmo/jsQR), uma biblioteca que realiza a conversão da imagem com o qr-code para o dado esperado.

Apesar da react-qr-reader não receber atualizações a muito tempo ela se mostrou uma opção viável em aplicações React pois o core da biblioteca se mantem atualizado.

import React, { Component } from 'react'
import QrReader from 'react-qr-reader'
 
const Scanner = () => {
  	const [result, setResult] = React.useState('')
 
 	const handleScan = data => {
    	if (data) {
      		setResult(data)
      	}
    }
  
  	const handleError = err => {
    	console.error(err)
  	}
  
    return (
      	<div>
        	<QrReader
          		delay={300}
          		onError={handleError}
          		onScan={handleScan}
          		style={{ width: '100%' }}
            />
        	<p>{result}</p>
      </div>
    )
}

 

QR-SCANNER (https://www.npmjs.com/package/qr-scanner)

    • Biblioteca javascript agnóstica a frameworks, pode ser usada com React, Vue, Svelte, Vanilla, etc...;
    • Utiliza WebWorker para computar dados do qr-code evitando que a interface fique lenta;
    • Publicado no NPM 6 anos atras;
    • Ultima atualização do repositório a 7 dias;

Apesar da abordagem mais 'low level' a biblioteca se mostrou muito boa, utiliza também o jsQR como engine de decodificação de qr-code e também WebWorkers, o que torna a leitura muito fluida. Ela e agnóstica a frameworks, permitindo assim a implementação em diversas especies de aplicações front end, seja usando algum framework ou implementações utilizando apenas HTML e Javascript.

Exemplo utilizando ReactJS:

import { useEffect, useRef } from "react";
import QrScanner from "qr-scanner";
import QrWorker from "!!file-loader!..

/node_modules/qr-scanner/qr-scanner-worker.min.js"; import "./modal.css"; QrScanner.WORKER_PATH = QrWorker; export const Modal = ({ onRead, onClose }) => { const videRef = useRef(null); const selectRef = useRef(null); useEffect(() => { console.log("montando qrscanner"); const scanner = new QrScanner( videRef.current, (result) => { console.log(result); onRead(result); onClose(); return scanner.stop(); }, (err) => { console.log(err); }, (video) => {}, ); scanner.start().then(() => { QrScanner.listCameras(true).then((cameras) => cameras.forEach((camera) => { const option = document.createElement("option"); option.value = camera.id; option.text = camera.label; selectRef.current?.add(option); }), ); }); return () => { scanner.stop(); console.log("desmontando qrscanner"); }; }, []); return ( <div className="modal" onClick={onClose}> <div> <video ref={videRef}></video> <select ref={selectRef}></select> </div> </div> ); };

 

CONCLUSÃO

...

 

REFERÊNCIAS

....