From 8cbfd02008ba2cfc837b55e60b6bcf34a5e35dcf Mon Sep 17 00:00:00 2001 From: dongpd Date: Mon, 3 Feb 2020 15:19:51 +0700 Subject: [PATCH] don't save logs if loss track --- api/controllers/ApiController.js | 133 +++++++++++++++++++++---------- 1 file changed, 92 insertions(+), 41 deletions(-) diff --git a/api/controllers/ApiController.js b/api/controllers/ApiController.js index 08738ed..983de99 100644 --- a/api/controllers/ApiController.js +++ b/api/controllers/ApiController.js @@ -22,8 +22,46 @@ function makeDb(config) { }; } +function levenshtein(a, b) { + if (a.length === 0) + return b.length; + if (b.length === 0) + return a.length; + + var matrix = []; + + // increment along the first column of each row + var i; + for (i = 0; i <= b.length; i++) { + matrix[i] = [i]; + } + + // increment each column in the first row + var j; + for (j = 0; j <= a.length; j++) { + matrix[0][j] = j; + } + + // Fill in the rest of the matrix + for (i = 1; i <= b.length; i++) { + for (j = 1; j <= a.length; j++) { + if (b.charAt(i - 1) == a.charAt(j - 1)) { + matrix[i][j] = matrix[i - 1][j - 1]; + } else { + matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution + Math.min(matrix[i][j - 1] + 1, // insertion + matrix[i - 1][j] + 1)); // deletion + } + } + } + + return matrix[b.length][a.length]; +} + +var current = {"plate": "", "time": 0, "type": "in"}; + exports.SaveLogs = async function (req, res) { - console.log("req: ", req.body.plate); + console.log("req: ", req.body.plate, " current: ", current); var today = new Date(); var currentDate = today.getDate(); @@ -44,58 +82,71 @@ exports.SaveLogs = async function (req, res) { if (!fs.existsSync(rootDir + currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/frame")) fs.mkdirSync(rootDir + currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/frame"); var currentTimestamp = Math.round(today.getTime() / 1000); - var fileName = req.body.plate + "_" + currentTimestamp + ".png"; - var plateSaved = currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/plate/" + fileName; - var frameSaved = currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/frame/" + fileName; - await fs.writeFileSync(rootDir + plateSaved, req.body.plate_image, 'base64'); - await fs.writeFileSync(rootDir + frameSaved, req.body.frame_image, 'base64'); - - const db = makeDb(config); + var canSaveLogs = true; var vehicleInfo = {"status": false}; - var query_plate_raw = await db.query("SELECT * FROM vehicle WHERE plate='" + req.body.plate + "'"); - if (query_plate_raw.length > 0) { - vehicleInfo = {"status": true, "data": query_plate_raw[0]}; - if (req.body.type == "in") { - await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_in`,`frame_image_in`,`time_in`) VALUES ('" + query_plate_raw[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); - } - if (req.body.type == "out") { - var checkIn = await db.query("SELECT * FROM logs WHERE vehicle_id=" + query_plate_raw[0].id + " AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); - if (checkIn.length > 0) { - await db.query("UPDATE logs SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn[0].id); - } else { - await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_out`,`frame_image_out`,`time_out`) VALUES ('" + query_plate_raw[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); - } - } - } else { - var query_plate_levenshtein = await db.query("SELECT * FROM `vehicle` WHERE levenshtein('" + req.body.plate + "', `plate`) BETWEEN 0 AND 2 LIMIT 0,1"); - if (query_plate_levenshtein.length > 0) { - vehicleInfo = {"status": true, "data": query_plate_levenshtein[0]}; + if (req.body.type === current.type && (currentTimestamp - current.time) < 600) { + if (req.body.plate === current.plate) { + canSaveLogs = false; + } +// else if (levenshtein(req.body.type, current.type) < 3) { +// canSaveLogs = false; +// } + } + if (canSaveLogs) { + current = {"plate": req.body.plate, "time": currentTimestamp, "type": req.body.type}; + var fileName = req.body.plate + "_" + currentTimestamp + ".png"; + var plateSaved = currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/plate/" + fileName; + var frameSaved = currentYear + "/" + currentMonth + "/" + currentDate + "/" + req.body.type + "/frame/" + fileName; + + await fs.writeFileSync(rootDir + plateSaved, req.body.plate_image, 'base64'); + await fs.writeFileSync(rootDir + frameSaved, req.body.frame_image, 'base64'); + + const db = makeDb(config); + var query_plate_raw = await db.query("SELECT * FROM vehicle WHERE plate='" + req.body.plate + "'"); + if (query_plate_raw.length > 0) { + vehicleInfo = {"status": true, "data": query_plate_raw[0]}; if (req.body.type == "in") { - await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_in`,`frame_image_in`,`time_in`) VALUES ('" + query_plate_levenshtein[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); + await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_in`,`frame_image_in`,`time_in`) VALUES ('" + query_plate_raw[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); } if (req.body.type == "out") { - var checkIn = await db.query("SELECT * FROM logs WHERE vehicle_id=" + query_plate_levenshtein[0].id + " AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); + var checkIn = await db.query("SELECT * FROM logs WHERE vehicle_id=" + query_plate_raw[0].id + " AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); if (checkIn.length > 0) { await db.query("UPDATE logs SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn[0].id); } else { - await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_out`,`frame_image_out`,`time_out`) VALUES ('" + query_plate_levenshtein[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); + await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_out`,`frame_image_out`,`time_out`) VALUES ('" + query_plate_raw[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); } } } else { - if (req.body.type == "in") { - await db.query("INSERT INTO logs_unknow(`plate`,`plate_image_in`,`frame_image_in`,`time_in`) VALUES ('" + req.body.plate + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); - } - if (req.body.type == "out") { - var checkIn_raw = await db.query("SELECT * FROM logs_unknow WHERE plate=" + req.body.plate + " AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); - if (checkIn_raw.length > 0) { - await db.query("UPDATE logs_unknow SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn_raw[0].id); - } else { - var checkIn_levenshtein = await db.query("SELECT * FROM `logs_unknow` WHERE levenshtein('" + req.body.plate + "', `plate`) BETWEEN 0 AND 2 AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); - if (checkIn_levenshtein.length > 0) { - await db.query("UPDATE logs_unknow SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn_levenshtein[0].id); + var query_plate_levenshtein = await db.query("SELECT * FROM `vehicle` WHERE levenshtein('" + req.body.plate + "', `plate`) BETWEEN 0 AND 2 LIMIT 0,1"); + if (query_plate_levenshtein.length > 0) { + vehicleInfo = {"status": true, "data": query_plate_levenshtein[0]}; + if (req.body.type == "in") { + await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_in`,`frame_image_in`,`time_in`) VALUES ('" + query_plate_levenshtein[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); + } + if (req.body.type == "out") { + var checkIn = await db.query("SELECT * FROM logs WHERE vehicle_id=" + query_plate_levenshtein[0].id + " AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); + if (checkIn.length > 0) { + await db.query("UPDATE logs SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn[0].id); } else { - await db.query("INSERT INTO logs_unknow(`plate`,`plate_image_out`,`frame_image_out`,`time_out`) VALUES ('" + req.body.plate + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); + await db.query("INSERT INTO logs(`vehicle_id`,`plate_image_out`,`frame_image_out`,`time_out`) VALUES ('" + query_plate_levenshtein[0].id + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); + } + } + } else { + if (req.body.type == "in") { + await db.query("INSERT INTO logs_unknow(`plate`,`plate_image_in`,`frame_image_in`,`time_in`) VALUES ('" + req.body.plate + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); + } + if (req.body.type == "out") { + var checkIn_raw = await db.query("SELECT * FROM logs_unknow WHERE plate=" + req.body.plate + " AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); + if (checkIn_raw.length > 0) { + await db.query("UPDATE logs_unknow SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn_raw[0].id); + } else { + var checkIn_levenshtein = await db.query("SELECT * FROM `logs_unknow` WHERE levenshtein('" + req.body.plate + "', `plate`) BETWEEN 0 AND 2 AND time_out=0 ORDER BY time_in DESC LIMIT 0,1"); + if (checkIn_levenshtein.length > 0) { + await db.query("UPDATE logs_unknow SET `plate_image_out`='" + plateSaved + "',`frame_image_out`='" + frameSaved + "',`time_out`=" + currentTimestamp + " WHERE id=" + checkIn_levenshtein[0].id); + } else { + await db.query("INSERT INTO logs_unknow(`plate`,`plate_image_out`,`frame_image_out`,`time_out`) VALUES ('" + req.body.plate + "','" + plateSaved + "','" + frameSaved + "'," + currentTimestamp + ")"); + } } } }