navigator.mediaDevices.getUserMedia({
video: {
width: {min: 1280},
- height: {min: 720},
+ height: {min: 1280},
facingMode: {exact: "environment"}
}, audio: false
}).then(function (stream) {
input.getContext('2d').drawImage(video, 0, 0, input.width, input.height);
var start = Date.now();
var contour = detectBoard('input', input.width, input.height, true);
- cleanOpencvReferences();
if (contour !== false) {
console.log(Date.now() - start);
correctPerspective(contour);
function onTesseractReady() {
console.log('onTesseractReady()');
- let types = {malus: 'abc', bonus: 'd', 'number': 'efghijklmnopqrstuvwxyz'};
+ let types = {
+ malus: {chars: 'abc', seg: '10'},
+ bonus: {chars: 'd', seg: '10'},
+ number: {chars: 'efghijklmnopqrstuvwxyz', seg: '7'}
+ };
window.tesseract = {};
(async () => {
for (var type in types) {
await worker.loadLanguage('font');
await worker.initialize('font');
await worker.setParameters({
- tessedit_char_whitelist: types[type],
+ tessedit_char_whitelist: types[type].chars,
+ tessedit_pageseg_mode: types[type].seg,
+ tessjs_create_box: '1',
});
window.tesseract[type].addWorker(worker);
}
function recognizeChars(canvas) {
let src = cv.imread(canvas);
+ opencvReferences.push(src);
var areas = {
'blue': {
'bonus': [333, 588, 40, 53, 0],
function extractRegion(src, region, color, area) {
+ console.log('Extract region');
+
let drawId = 'color_' + color + '_' + area;
- var coef = 500 / 500;
+ var coef = 1000 / 500;
region[0] *= coef;
region[1] *= coef;
region[2] *= coef;
let rect = new cv.Rect(region[0], region[1], region[2], region[3]);
let dst = src.roi(rect);
+ opencvReferences.push(dst);
let res = new cv.Mat();
- let w, h;
+ opencvReferences.push(res);
+ let w, h, h2;
w = region[2];
h = region[3];
cv.bitwise_not(res, res);
// Grayscale
cv.cvtColor(res, res, cv.COLOR_RGBA2GRAY, 0);
+
+ var brightness = 2;
+ h2 = 30 * coef;
+
// Brightness
- cv.convertScaleAbs(res, res, 2.25, 100);
+ cv.convertScaleAbs(res, res, brightness, 100);
// Contrast
cv.equalizeHist(res, res);
function ocr(image, color, area) {
(async () => {
- const {data: {text}} = await window.tesseract[area].addJob('recognize', image);
- regions[color][area] = translate(text);
+ const res = await window.tesseract[area].addJob('recognize', image);
+ regions[color][area] = translate();
decodedRegions++;
if (decodedRegions === 12) {
document.getElementById('res').innerText = JSON.stringify(regions);
+ window.navigator.vibrate([100, 100, 200]);
+ cleanOpencvReferences();
}
})();
}
cv.warpPerspective(src, finalDest, M, dsize, cv.INTER_LINEAR, cv.BORDER_CONSTANT, new cv.Scalar());
// Resize the board to be a square
- var finalSize = 500;
+ var finalSize =1000;
let boardSized = cv.Mat.zeros(finalSize, finalSize, cv.CV_8UC3);
let boardSize = new cv.Size(finalSize, finalSize)
cv.resize(finalDest, boardSized, boardSize, 0, cv.INTER_LINEAR);