QR Code: inventário de bens móveis pelo celular
Data: 18/10/21
Autores:
- Diego Gonçalves de Almeida (Assessor)
1. Objetivo
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. Definir a melhor abordagem para implementação de leitura de Qr-code em aplicações javascript.
2. Introdução
Definir a melhor abordagem para implementação de leitura de Qr-code em aplicações javascript. 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.
3. Desenvolvimento
REACT-QR-READER (https://www.npmjs.com/package/react-qr-reader)
3.1 Componente pronto para utilização em aplicações react;
3.2 Utiliza WebWorker para computar dados do qr-code evitando que a interface fique lenta;
3.3 Publicado no NPM 2 anos atras;
3.4 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)
3.5 Biblioteca javascript agnóstica a frameworks, pode ser usada com React, Vue, Svelte, Vanilla, etc...;
3.6 Utiliza WebWorker para computar dados do qr-code evitando que a interface fique lenta;
3.7 Publicado no NPM 6 anos atras;
3.8 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>
);
};
4. Conclusão
Ambas as bibliotecas estudadas trouxeram resultados satisfatórios:
4.1 react-qr-reader: melhor em aplicações react pois e de fácil implementação;
4.2 qr-scanner: utilizar em aplicações que utilizam javascript puro em seu front end;
5. Referências
[1] REACT-QR-READER. Disponível em: https://www.npmjs.com/package/react-qr-reader. Acesso em: 31 ago. 2021.
[2] QR-SCANNER. Disponível em: https://www.npmjs.com/package/qr-scanner. Acesso em: 31 ago. 2021.