78 lines
2.6 KiB
JavaScript
78 lines
2.6 KiB
JavaScript
const {v4: uuidv4} = require("uuid");
|
|
const tesseract = require("node-tesseract-ocr");
|
|
const OCRResult = require("../models/OCRResult");
|
|
|
|
function delay(delayInMs) {
|
|
return new Promise(resolve => {
|
|
setTimeout(() => {
|
|
resolve(2);
|
|
}, delayInMs);
|
|
});
|
|
}
|
|
|
|
const config = {
|
|
lang: "eng",
|
|
oem: 1,
|
|
psm: 3,
|
|
}
|
|
|
|
const MESSAGE_URL_VALIDATION_FR = "Nous avons envoyé un lien par e-mail."
|
|
const MESSAGE_URL_VALIDATION_EN = "Please click on the link we sent by email"
|
|
const CAPTCHA_ERROR_MESSAGE = "Error verifying captcha, please try again"
|
|
const CAPTCHA_ERROR_MESSAGE_FR = "La vérification du captcha a échoué"
|
|
const BLOCKED_MSG_EN = "have been blocked"
|
|
const BLOCKED_MSG_FR = "avez été bloqué"
|
|
const CHECKING_MSG_FR = "Verifying"
|
|
const ERR_CACHE_MISS = "ERR_CACHE_MISS"
|
|
const SLIDING_CAPTCHA_FR = "Glissez vers la droite"
|
|
const MESSAGE_FILL_FIELD_FR = "Demande de rendez-vous pour"
|
|
const WELCOME_MESSAGE_FR = "Bienvenue dans Chrome"
|
|
const PAGE_OPTIMIZATION_CHROME_FR = "Oui, j'accepte"
|
|
|
|
class OCRChecker {
|
|
|
|
constructor(device, contact) {
|
|
this.device = device;
|
|
this.contact = contact;
|
|
}
|
|
|
|
get_file_name() {
|
|
let uuid = uuidv4();
|
|
return this.contact.passportNumber + "_" + uuid + ".png"
|
|
}
|
|
|
|
async get_result() {
|
|
let fileName = await this.take_screen_shot()
|
|
let result = await tesseract
|
|
.recognize(fileName, config)
|
|
console.log(result)
|
|
if (result.includes(MESSAGE_URL_VALIDATION_EN) || result.includes(MESSAGE_URL_VALIDATION_FR)) {
|
|
return OCRResult.SUCCESS
|
|
} else if (result.includes(CAPTCHA_ERROR_MESSAGE) || result.includes(CAPTCHA_ERROR_MESSAGE_FR)) {
|
|
return OCRResult.RECAPTCHA_ERROR
|
|
} else if (result.includes(BLOCKED_MSG_EN) || result.includes(BLOCKED_MSG_FR)) {
|
|
return OCRResult.BLOCKED
|
|
} else if (result.includes(ERR_CACHE_MISS)) {
|
|
return OCRResult.TO_REFRESH
|
|
} else if (result.includes(CHECKING_MSG_FR)) {
|
|
return OCRResult.RECHECK
|
|
} else if (result.includes(SLIDING_CAPTCHA_FR)) {
|
|
return OCRResult.SLIDING_CAPTCHA
|
|
} else if (result.includes(MESSAGE_FILL_FIELD_FR)) {
|
|
return OCRResult.FILL_FIELD
|
|
} else if (result.includes(WELCOME_MESSAGE_FR)) {
|
|
return OCRResult.NEED_TO_CLICK_LATE_BTN
|
|
}
|
|
}
|
|
|
|
async take_screen_shot() {
|
|
let name = this.get_file_name()
|
|
await this.device.screenshot({path: name});
|
|
await delay(1000);
|
|
return name
|
|
// console.log(`stdout: ${stdout1}`);
|
|
}
|
|
}
|
|
|
|
module.exports = OCRChecker
|