ericblade / quagga2

An advanced barcode-scanner written in Javascript and TypeScript - Continuation from https://github.com/serratus/quaggajs
MIT License
749 stars 85 forks source link

config.debug ignored. console.warn only contains debug info #541

Open lewismoten opened 4 months ago

lewismoten commented 4 months ago

Hello. I've had fun with the Barcode Detection API, but found that Safari and Chrome doesn't support it on iOS. I have found your library looking for a way to work around the issues and polyfill the API.

Every time I call Quagga to decodeSingle, it adds a bunch of warnings to the console to the point that its difficult to debug anything else when streaming video. It seems that these warnings are diagnostic information for debugging rather than actual warnings. I have tried changing the configuration debug setting to false, but the warnings still appear.

* initCanvas getCanvasAndContext
* initCanvas getCanvasAndContext
*** frame_grabber_browser: willReadFrequency=undefined canvas= <canvas class="imgBuffer" width="800" height="500">
Invalid asm.js: Unexpected token

Here is my code. In this case, the src is a data url from canvas.toDataURL()

// https://cdn.jsdelivr.net/npm/@ericblade/quagga2/dist/quagga.min.js

const config = {
  src,
  decoder: {
    readers: ['code_128_reader']
  },
  debug: false
};
const callback = result => {
  if(result) {
    console.log('got a result', result);
  } else {
    console.log('nothing');
  }
};
window.Quagga.decodeSingle(config, callback)

I reviewed the quagga2 source code and found that all of the console messages are hard-coded to write output without checking any of the configuration debug settings.

https://github.com/search?q=repo%3Aericblade%2Fquagga2%20console.warn&type=code

github-actions[bot] commented 4 months ago

Thank you for filing an issue! Please be patient. :-)

lewismoten commented 4 months ago

The workaround that I'm using is to hijack the console.warn method temporarily and restore it after the decoder responds.

const warn = console.warn;
console.warn = () => {};
const config = {
  src,
  decoder: {
    readers: ['code_128_reader']
  },
  debug: false
};
const callback = result => {
  console.warn = warn.bind(console);
  if(result) {
    console.log('got a result', result);
  }
  resolve([])
};
window.Quagga.decodeSingle(config, callback)
ericblade commented 4 months ago

Thanks for reporting that, probably left some stuff in there while I was diagnosing a previous failure. My bad.

I haven't had much time to go routing around in my working application lately. Apologies. :D