-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathscanner.js
More file actions
143 lines (121 loc) · 3.46 KB
/
scanner.js
File metadata and controls
143 lines (121 loc) · 3.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
class BarcodeScanner {
/**
* Create a barcode scanner
* @param {str} selector Selector of the element to mount the scanner canvas to.
*/
constructor(selector) {
this.selector = selector;
// Intialize empty callbacks
this.detectedCallback = () => {};
this.successCallback = () => {};
this.errorCallback = () => {};
// Audio to play when an item is scanned.
this.beepAudio = new Audio("/audios/scanner-beep.mp3");
// Detected handler
this.detectedHandler = (result) => {
// Play the beep audio
this.beepAudio.play();
// Stop Quagga
Quagga.stop();
// Trigger callback
this.detectedCallback(result);
};
}
/**
* Callback when the setup was successful.
*/
set onSuccess(successCallback) {
this.successCallback = successCallback;
}
/**
* Callback when the setup failed.
*/
set onError(errorCallback) {
this.errorCallback = errorCallback;
}
/**
* Callback when the scanner has detected a barcode.
*/
set onDetected(detectedCallback) {
this.detectedCallback = detectedCallback;
}
/**
* Initialize the barcode scanner.
* @param scanCallback Callback, receiving the barcode, when a barcode has been scanned.
*/
init() {
// Initialize the barcode scanner
Quagga.init(
{
// Video input stream
inputStream: {
name: "Live",
type: "LiveStream",
target: document.querySelector(this.selector),
constraints: {
facingMode: "environment",
},
},
// Available decoders for decoding barcodes.
decoder: {
readers: ["ean_reader"],
},
// Disable auto-locate of barcodes on the screen.
// This is turned off to prevent bad auto-focus.
// We will show a guidebox to guide the user.
// Enable the scanner to look for barcodes around the screen.
locate: true,
// Locator settings
// Used when locate is enabled
locator: {
patchSize: "medium",
halfSample: true,
},
},
(error) => {
// Catch a potential error by calling the error callback.
if (error) {
this.errorCallback(error);
return;
}
Quagga.start();
this.successCallback();
// Attempt to apply some settings, like autofocus, when supported.
try {
// Quagga internal MediaStreamTrack instance.
const track = Quagga.CameraAccess.getActiveTrack();
// Get the track MediaTrackCapabilities object.
const capabilities = track.getCapabilities();
console.log(capabilities);
console.log(track.getSettings());
// Set the framerate to 0
if (capabilities.saturation) {
track.applyConstraints({
advanced: [{ saturation: 50 }],
});
}
// Set focusMode to "continuous" if supported.
if (capabilities.focusMode) {
track.applyConstraints({
advanced: [
{
focusMode: "continuous",
},
],
});
}
} catch (e) {}
}
);
// When a barcode has been detected
Quagga.onDetected(this.detectedHandler);
}
/**
* Destroy the barcode scanner.
*/
destroy() {
Quagga.stop();
Quagga.offDetected(this.detectedHandler);
}
}
window.BarcodeScanner = BarcodeScanner;