Added optical character recognition.
This commit is contained in:
133
server.js
133
server.js
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user