Face Manager : Add Entire Face (folder of images) deletion at once

build-default-monitor-config-from-definitions
Moe 2020-04-24 10:50:05 -07:00
parent 59bf04c5d5
commit 1eef597159
3 changed files with 87 additions and 17 deletions

View File

@ -42,6 +42,30 @@ module.exports = function(s,config,lang,app,io){
callback(faces)
})
}
const getFaceImagesByName = (name,callback) => {
var stats = fs.statSync(config.facesFolder + name)
if(stats.isDirectory()){
var images
try{
images = fs.readdirSync(config.facesFolder + name)
}catch(err){
images = []
}
callback(images)
}else{
callback([])
}
}
const deletePath = (deletionPath,callback) => {
if(fs.existsSync(deletionPath)){
fs.unlink(deletionPath,() => {
s.file('delete',deletionPath)
if(callback)callback()
})
}else{
if(callback)callback(true)
}
}
app.get(config.webPaths.superApiPrefix+':auth/faceManager/names', function (req,res){
s.superAuth(req.params,function(resp){
getFaceFolderNames((faces)=>{
@ -83,22 +107,40 @@ module.exports = function(s,config,lang,app,io){
s.superAuth(req.params,function(resp){
res.setHeader('Content-Type', 'application/json')
const imagePath = config.facesFolder + req.params.name + '/' + req.params.image
if(fs.existsSync(imagePath)){
fs.unlink(imagePath,() => {
s.file('delete',imagePath)
sendDataToConnectedSuperUsers({
f:'faceManagerImageDeleted',
faceName: req.params.name,
fileName: req.params.image,
})
getFaceFolderNames((faces) => {
s.sendToAllDetectors({
f: 'recompileFaceDescriptors',
faces: faces
})
deletePath(imagePath,() => {
sendDataToConnectedSuperUsers({
f:'faceManagerImageDeleted',
faceName: req.params.name,
fileName: req.params.image,
})
getFaceFolderNames((faces) => {
s.sendToAllDetectors({
f: 'recompileFaceDescriptors',
faces: faces
})
})
}
})
res.end(s.prettyPrint({
ok: true,
}))
},res,req)
})
app.get(config.webPaths.superApiPrefix+':auth/faceManager/delete/:name', function (req,res){
s.superAuth(req.params,function(resp){
res.setHeader('Content-Type', 'application/json')
const facePath = config.facesFolder + req.params.name
deletePath(facePath,() => {
getFaceFolderNames((faces) => {
s.sendToAllDetectors({
f: 'recompileFaceDescriptors',
faces: faces
})
})
})
sendDataToConnectedSuperUsers({
f:'faceManagerFolderDeleted',
faceName: req.params.name,
})
res.end(s.prettyPrint({
ok: true,
}))

View File

@ -4,6 +4,8 @@
"Click to Upload Images": "Click to Upload Images",
"Face Name": "Face Name",
"faceManager": "Face Manager",
"deleteFace": "Delete Face",
"deleteFaceText": "Are you sure you want to delete ALL the images for this face? they will not be recoverable.",
"deleteImage": "Delete Image",
"deleteImageText": "Are you sure you want to delete this image? it will not be recoverable."
}

View File

@ -13,6 +13,11 @@ $(document).ready(function(){
callback(response)
})
}
var deleteFaceFolder = function(name,callback){
$.get(superApiPrefix + $user.sessionKey + '/faceManager/delete/' + name,function(response){
callback(response)
})
}
var moveFaceImage = function(name,image,newFaceName,callback){
$.get(superApiPrefix + $user.sessionKey + '/faceManager/image/' + name + '/' + image + '/move/' + newFaceName + '/' + image + '?websocketResponse=1' ,function(response){
callback(response)
@ -36,14 +41,14 @@ $(document).ready(function(){
</div>`
}
var createFaceHeader = function(name){
return `<span class="mt-4 mb-2 badge bg-dark badge-lg face-title">${name}</span>`
return `<div face="${name}" class="mt-4 mb-2 face-title"><span class="badge bg-dark badge-lg">${name}</span> <a class="badge badge-danger badge-lg deleteFolder" face="${name}"><i class="fa fa-times text-danger"></i></a></div>`
}
var drawFaceImages = function(){
getFaceImages(function(faces){
var html = ''
$.each(faces,function(name,images){
// if(images.length === 0)return
html += `${createFaceHeader(name)}<div class="row" face="${name}">`
html += `${createFaceHeader(name)}<div class="row face-container" face="${name}">`
$.each(images,function(n,image){
html += getFaceImageHtml(name,image)
})
@ -139,6 +144,24 @@ $(document).ready(function(){
})
return false;
})
faceManagerImages.on('click','.deleteFolder',function(e){
e.preventDefault()
var faceName = $(this).attr('face')
$.confirm.create({
title: lang.deleteFace,
body: lang.deleteFaceText,
clickOptions: {
class: 'btn-danger',
title: lang.Delete,
},
clickCallback: function(){
deleteFaceFolder(faceName,function(response){
console.log(response)
})
}
})
return false;
})
$('#fileinput').change(function(){
var name = faceNameField.val()
$.ajax({
@ -160,7 +183,7 @@ $(document).ready(function(){
case'faceManagerImageUploaded':
var row = faceManagerImages.find(`.row[face="${d.faceName}"]`)
if(row.length === 0){
faceManagerImages.append(`${createFaceHeader(d.faceName)}<div class="row" face="${d.faceName}"></div>`)
faceManagerImages.append(`${createFaceHeader(d.faceName)}<div class="row face-container" face="${d.faceName}"></div>`)
row = faceManagerImages.find(`.row[face="${d.faceName}"]`)
activateDroppableContainer(d.faceName)
}
@ -171,6 +194,9 @@ $(document).ready(function(){
case'faceManagerImageDeleted':
$(`.face-image[face="${d.faceName}"][image="${d.fileName}"]`).remove()
break;
case'faceManagerFolderDeleted':
$(`[face="${d.faceName}"]`).remove()
break;
}
})
})