Added optical character recognition.

This commit is contained in:
2023-09-28 12:09:35 -05:00
parent 321b8fe50c
commit b09fc5af11
11 changed files with 2521 additions and 40 deletions

133
server.js
View File

@@ -15,6 +15,8 @@ var https = require('https');
var MongoClient = require('mongodb').MongoClient;
var sanitize = require('mongo-sanitize');
var cheerio = require("cheerio"); //jQuery Substitute
var puppeteer = require("puppeteer");
const { createWorker } = require("tesseract.js");
const pug = require('pug');
@@ -26,11 +28,109 @@ app.set('view engine', "pug")
app.use("/images", express.static(path.join(__dirname, '/images')));
app.use("/static", express.static(path.join(__dirname, "/static")));
const baseFilePath = "./savedImages";
app.get('/', function (req, res) {
res.send('Hello World');
});
app.get("/takeScreenshot", async function(req, res){
let url = req.query["url"];
let name = req.query["name"];
puppeteer.launch({
headless: "new",
defaultViewport: {
width: 1280,
height: 2000,
},
})
.then(async (browser) => {
const page = await browser.newPage();
await page.goto(url);
await page.screenshot({ path: `${baseFilePath}/${name}.png` });
await browser.close();
});
res.send("204 no content");
res.end();
});
app.get("/getValueFromImage", async function(req, res){
console.log("Pulling info from image");
let name = req.query["name"];
let top = req.query["top"]; //374
let left = req.query["left"]; //596
let width = req.query["width"];//75
let height = req.query["height"];//30
const img = fs.readFileSync(`${baseFilePath}/${name}.png`);
const worker = await createWorker("eng");
const rectangle = { left: left, top: top, width: width, height: height };
let myText = "Default";
(async () => {
const {
data: { text },
} = await worker.recognize(img,
{ rectangle }
);
res.send(text);
res.end();
console.log(text);
await worker.terminate();
})();
});
app.get("/getVisualPrice", async function(req, res){
console.log("Getting Visual Price");
let url = req.query["url"];
let name = req.query["name"];
let top = req.query["top"]; //374
let left = req.query["left"]; //596
let width = req.query["width"];//75
let height = req.query["height"];//30
puppeteer.launch({
headless: "new",
defaultViewport: {
width: 1280,
height: 2000,
},
})
.then(async (browser) => {
const page = await browser.newPage();
await page.goto(url);
await page.screenshot({ path: `${baseFilePath}/${name}.png` });
await browser.close();
console.log("Reading Image");
const img = fs.readFileSync(`${baseFilePath}/${name}.png`);
const worker = await createWorker("eng");
const rectangle = {
left: left,
top: top,
width: width,
height: height,
};
let myText = "Default";
(async () => {
console.log("Finding text");
const {
data: { text },
} = await worker.recognize(img, { rectangle });
res.send(text);
res.end();
console.log(text);
await worker.terminate();
})();
});
});
app.get("/getPrice", async function(req, res){
try{
console.log(`Getting Price!`);
@@ -39,24 +139,39 @@ app.get("/getPrice", async function(req, res){
let prefix = req.query["prefix"];
let instanceCount = parseInt(req.query["instanceCount"]);
let idName = req.query["idName"];
let finalAnswer = "";
console.log(`Get Price Info:\n
Prefix: ${prefix}\n
InstanceCount: ${instanceCount}\n
idName: ${idName}\n
URL: ${url}\n
`);
`);
request(url, (err, resp, html) => {
const $ = cheerio.load(html);
finalAnswer = "";
$(idName).each((i, el) => {
if(i == instanceCount){
const item = $(el).text();
finalAnswer = item.split(prefix).reverse()[0];
}
});
console.log(html);
let finalAnswer = "";
if(instanceCount == 0){
console.log("Getting single instance");
let item = {};
console.log($(idName));
$(idName).each((i, el) => {
//console.log("item");
//console.log(el);
item = $(el).text();
});
console.log(JSON.stringify(item));
finalAnswer = item;
}else{
$(idName).each((i, el) => {
if(i == instanceCount){
const item = $(el).text();
finalAnswer = item.split(prefix).reverse()[0];
}
});
}
console.log(`Answer: ${finalAnswer}`);
res.send(`Answer: ${finalAnswer}`);
res.end();