mirror of
https://github.com/Expand-sys/whoscatrevival
synced 2026-03-22 09:47:08 +11:00
196 lines
4.4 KiB
JavaScript
196 lines
4.4 KiB
JavaScript
const express = require('express');
|
|
const path = require('path');
|
|
const bb = require('express-busboy');
|
|
const multer = require('multer');
|
|
const tf = require('@tensorflow/tfjs')
|
|
const tfn = require('@tensorflow/tfjs-node')
|
|
const mobilenet = require('@tensorflow-models/mobilenet');
|
|
const fs = require('fs');
|
|
const jpeg = require('jpeg-js');
|
|
|
|
|
|
//init app
|
|
const app = express();
|
|
|
|
|
|
|
|
bb.extend(app, {
|
|
upload: true,
|
|
path: './public/uploads/',
|
|
allowedPath: /./
|
|
});
|
|
|
|
|
|
|
|
var temp
|
|
async function catdetector(imagePath){
|
|
const image = fs.readFileSync(imagePath.toString());
|
|
const decodedImage = tfn.node.decodeImage(image, 3);
|
|
|
|
const model = await mobilenet.load();
|
|
const predictions = await model.classify(decodedImage);
|
|
return (predictions);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const storage = multer.diskStorage({
|
|
destination: function(req,res, cb){
|
|
cb(null, './public/uploads/')
|
|
},
|
|
filename: function(req, file, cb){
|
|
cb(null, 'asdf' + path.extname(file.originalname));
|
|
}
|
|
});
|
|
|
|
|
|
const upload = multer({
|
|
storage: storage,
|
|
fileFilter: function(req, file, cb){
|
|
checkFileType(file, cb)
|
|
}
|
|
}).single('file');
|
|
|
|
|
|
function move(oldPath, newPath, callback) {
|
|
|
|
fs.rename(oldPath, newPath, function (err) {
|
|
if (err) {
|
|
if (err.code === 'EXDEV') {
|
|
copy();
|
|
} else {
|
|
callback(err);
|
|
}
|
|
return;
|
|
}
|
|
callback();
|
|
});
|
|
|
|
function copy() {
|
|
var readStream = fs.createReadStream(oldPath);
|
|
var writeStream = fs.createWriteStream(newPath);
|
|
|
|
readStream.on('error', callback);
|
|
writeStream.on('error', callback);
|
|
|
|
readStream.on('close', function () {
|
|
fs.unlink(oldPath, callback.toString());
|
|
});
|
|
|
|
readStream.pipe(writeStream);
|
|
}
|
|
}
|
|
|
|
app.post('/upload', upload, function(req,res){
|
|
var id = req.params.id;
|
|
var dir = req.files.upload;
|
|
var filecheck = req.files.file;
|
|
var notdetected = 0;
|
|
const detection = new Promise((resolve, reject) => {
|
|
if (filecheck.mimetype == "image/png" || filecheck.mimetype == "image/jpg" || filecheck.mimetype == "image/jpeg") {
|
|
const data = catdetector(req.files.file.file);
|
|
resolve(data);
|
|
} else resolve(null);
|
|
})
|
|
|
|
|
|
if(filecheck == undefined){
|
|
res.redirect('/')
|
|
}else{
|
|
var ext = path.parse(req.files.file.filename).ext;
|
|
detection.then((result) => {
|
|
var string;
|
|
for(const i in result){
|
|
string += JSON.stringify(result[i])
|
|
}
|
|
if(result == null){
|
|
fs.rmdir('./public/uploads/' +req.files.file.uuid, {recursive: true}, function(err){
|
|
if(err){
|
|
console.log(err);
|
|
//punchsand
|
|
}
|
|
})
|
|
res.redirect('/nottodaybatman')
|
|
}else if(string.indexOf('cat') != -1){
|
|
|
|
move(req.files.file.file , 'public/uploads/cats/'+ Date.now() + ext, function (err) {
|
|
if (err) {
|
|
console.log(err);
|
|
}
|
|
})
|
|
fs.rmdir('./public/uploads/' +req.files.file.uuid, {recursive: true}, function(err){
|
|
if(err){
|
|
console.log(err);
|
|
//punchsand
|
|
}
|
|
})
|
|
res.redirect('/minebitch')
|
|
}else{
|
|
console.log('fail');
|
|
move(req.files.file.file , 'public/uploads/bin/'+ Date.now() + ext, function (err) {
|
|
if (err) {
|
|
console.log(err);
|
|
}
|
|
})
|
|
fs.rmdir('./public/uploads/' +req.files.file.uuid, {recursive: true}, function(err){
|
|
if(err){
|
|
console.log(err);
|
|
//punchsand
|
|
}
|
|
})
|
|
res.redirect('/notacat');
|
|
}
|
|
})
|
|
}
|
|
})
|
|
|
|
|
|
// load view engine
|
|
app.set('views', path.join(__dirname, 'views'));
|
|
app.set('view engine', 'pug');
|
|
|
|
|
|
//set public folder
|
|
app.use(express.static(path.join(__dirname, 'public')));
|
|
|
|
|
|
|
|
app.get('/', function(req, res){
|
|
res.render('index')
|
|
});
|
|
app.get('/cats', function(req, res){
|
|
|
|
const catsfolder = './public/uploads/cats/';
|
|
|
|
|
|
res.render('cats', {
|
|
images: fs.readdirSync(catsfolder.toString()),
|
|
})
|
|
})
|
|
app.get('/bin', function(req, res){
|
|
|
|
const catsfolder = './public/uploads/bin/';
|
|
|
|
|
|
res.render('bin', {
|
|
images: fs.readdirSync(catsfolder.toString()),
|
|
})
|
|
})
|
|
|
|
|
|
|
|
app.get('/minebitch', function(req, res){
|
|
res.render('minebitch');
|
|
})
|
|
app.get('/notacat', function(req, res){
|
|
res.render('notacat');
|
|
})
|
|
|
|
app.listen(3000, '0.0.0.0', function(){
|
|
console.log('Server started on port 3000...');
|
|
});
|