Barcode Detection API - Parte 2

Usando a câmera para detectar código

Desta vez usaremos TypeScript e para que isso seja feito sem alertas de erro no código, precisaremos que a API esteja devidamente tipada, porém, não temos disponível no arquivo lib.dom.ts do TypeScript. Eu mesmo escrevi um seguindo a especificação, vai servir por enquanto.

barcode.d.ts

Crie um arquivo barcode.d.ts com o conteúdo a seguir.

interface BarcodeDetector {
  new (barcodeDetectorOptions?: BarcodeDetectorOptions): BarcodeDetector;

  static getSupportedFormats(): Promise<BarcodeFormat[]>;

  detect(image: ImageBitmapSource): Promise<DetectedBarcode[]>;
}

declare var BarcodeDetector: {
  prototype: BarcodeDetector;
  new (barcodeDetectorOptions?: BarcodeDetectorOptions): BarcodeDetector;
};

interface BarcodeDetectorOptions {
  formats: BarcodeFormat;
}

interface Point2D {
  x: number
  y: number
}

interface DetectedBarcode {
  boundingBox: DOMRectReadOnly;
  rawValue: string;
  format: BarcodeFormat;
  cornerPoints: Point2D[];
}

type BarcodeFormat =
  | "aztec"
  | "code_128"
  | "code_39"
  | "code_93"
  | "codabar"
  | "data_matrix"
  | "ean_13"
  | "ean_8"
  | "itf"
  | "pdf417"
  | "qr_code"
  | "unknown"
  | "upc_a"
  | "upc_e";

Agora sim, partimos para implementação.

Basicamente o que precisamos fazer é:

  1. Capturar o stream de vídeo do dispositivo

  2. Desenhar o video em um elemento canvas

  3. Executar o método de detecção no canvas

  4. Se houver resultados, desenhar no canvas

Vamos lá!

main.ts

Vamos separar a função draw

draw.ts

De volta ao main.ts, vamos finalizar!

E então, o que achou? Espero que tenha gostado!

Abraço

Last updated

Was this helpful?