You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.1 KiB
JavaScript
126 lines
4.1 KiB
JavaScript
//get folders of images to use as classes
|
|
const glob = require('glob');
|
|
const library = require('image-classifier');
|
|
const fs = require('fs');
|
|
// const
|
|
const path = require('path')
|
|
const cliProgress = require('cli-progress');
|
|
const multer = require('multer');
|
|
const express = require('express');
|
|
const tesseract = require('node-tesseract');
|
|
const app = express();
|
|
|
|
const upload = multer({
|
|
dest: './temp',
|
|
|
|
})
|
|
|
|
app.post('/classify', upload.single("file"), (req, res) => {
|
|
const tempPath = req.file.path;
|
|
console.log(tempPath);
|
|
classifier.predict(tempPath).then(async (result) => {
|
|
const readable = ['VIN', 'Data Plates', 'Dash Number', 'Door Tag'];
|
|
if(readable.includes(result.label)){
|
|
tesseract.process(path.resolve(__dirname, tempPath),{}, async (err, text) => {
|
|
result.processedText = text;
|
|
if(err) {
|
|
console.error('Error:', err);
|
|
}
|
|
|
|
await fs.unlink(tempPath, (err) =>{ if(err) console.error('Unlink Error:', err)});
|
|
res.status(200).json(result);
|
|
})
|
|
} else {
|
|
console.log('Not readable, continuing');
|
|
await fs.unlink(tempPath, (err) =>{ if(err) console.error('Unlink Error:', err)});
|
|
res.status(200).json(result);
|
|
}
|
|
|
|
// tesseract.process(tempPath, function(err, text) => {
|
|
// console.log()
|
|
// })
|
|
|
|
|
|
})
|
|
// res.status(200).json({message: 'Success'})
|
|
})
|
|
app.listen(2666);
|
|
|
|
var shouldRebuildModel = false;
|
|
|
|
process.argv.forEach((val, index, array) => {
|
|
console.log(val)
|
|
if(val === '--rebuild'){
|
|
shouldRebuildModel = true;
|
|
}
|
|
|
|
})
|
|
|
|
|
|
function getClass(file) {
|
|
return path.dirname(file).split('/').pop();
|
|
}
|
|
function pGlob(pattern) {
|
|
return new Promise((resolve, reject) => {
|
|
glob(pattern, (error, matches) => {
|
|
if(error) return reject(error);
|
|
resolve(matches);
|
|
})
|
|
})
|
|
}
|
|
var classifier;
|
|
|
|
async function runAsync() {
|
|
|
|
if(shouldRebuildModel) {
|
|
classifier = await library.create();
|
|
|
|
const matches = await pGlob('training images/**/*');
|
|
const startTime = new Date().getTime();
|
|
console.log(`Building model with ${matches.length} training items...`)
|
|
const rebuildBar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_grey);
|
|
rebuildBar.start(matches.length);
|
|
await Promise.all(matches.map(file => {
|
|
if(fs.lstatSync(file).isDirectory()) {
|
|
rebuildBar.increment();
|
|
return Promise.resolve();
|
|
}
|
|
const classA = getClass(file);
|
|
return classifier.addExample(classA, file).then(() => rebuildBar.increment())
|
|
})).catch(error => {
|
|
console.error(error);
|
|
});
|
|
rebuildBar.stop();
|
|
console.log('all examples loaded...');
|
|
console.log('saving dataset...')
|
|
await classifier.save('./export.json');
|
|
const now = new Date().getTime();
|
|
|
|
const elapsed = now - startTime;
|
|
console.log(`Time to build: ${elapsed / 1000}s`)
|
|
} else {
|
|
classifier = await library.load('./export.json');
|
|
}
|
|
// const matches = await pGlob('test images/**/*');
|
|
// const classifyBar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_grey);
|
|
// classifyBar.start(matches.length);
|
|
// await Promise.all(matches.map(async file => {
|
|
// const baseFileName = path.parse(file).name;
|
|
// const extension = path.extname(file);
|
|
// const newClass= await classifier.predict(file);
|
|
// // console.log(newClass);
|
|
// return new Promise((resolve, reject) => {
|
|
// if(!fs.existsSync(path.resolve('sorted images', newClass.label))){
|
|
// fs.mkdirSync(path.resolve('sorted images', newClass.label));
|
|
// }
|
|
// fs.copyFile(file, path.resolve('sorted images', newClass.label, `${baseFileName}.${extension}`), () => {
|
|
// classifyBar.increment();
|
|
// resolve()
|
|
// });
|
|
// })
|
|
// }))
|
|
// classifyBar.stop();
|
|
}
|
|
runAsync();
|
|
|