Reload faces if albums or media is deleted
This commit is contained in:
parent
d4552c7724
commit
26996b45e5
|
@ -12,6 +12,7 @@ import (
|
||||||
"github.com/photoview/photoview/api/graphql/auth"
|
"github.com/photoview/photoview/api/graphql/auth"
|
||||||
"github.com/photoview/photoview/api/graphql/models"
|
"github.com/photoview/photoview/api/graphql/models"
|
||||||
"github.com/photoview/photoview/api/scanner"
|
"github.com/photoview/photoview/api/scanner"
|
||||||
|
"github.com/photoview/photoview/api/scanner/face_detection"
|
||||||
"github.com/photoview/photoview/api/utils"
|
"github.com/photoview/photoview/api/utils"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
|
@ -359,6 +360,10 @@ func (r *mutationResolver) UserRemoveRootAlbum(ctx context.Context, userID int,
|
||||||
deletedAlbumIDs = nil
|
deletedAlbumIDs = nil
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := face_detection.GlobalFaceDetector.ReloadFacesFromDatabase(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/photoview/photoview/api/graphql/models"
|
"github.com/photoview/photoview/api/graphql/models"
|
||||||
|
"github.com/photoview/photoview/api/scanner/face_detection"
|
||||||
"github.com/photoview/photoview/api/utils"
|
"github.com/photoview/photoview/api/utils"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
@ -49,6 +50,11 @@ func CleanupMedia(db *gorm.DB, albumId int, albumMedia []*models.Media) []error
|
||||||
if err := db.Delete(models.Media{}, mediaIDs).Error; err != nil {
|
if err := db.Delete(models.Media{}, mediaIDs).Error; err != nil {
|
||||||
deleteErrors = append(deleteErrors, errors.Wrap(err, "delete old media from database"))
|
deleteErrors = append(deleteErrors, errors.Wrap(err, "delete old media from database"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reload faces after deleting media
|
||||||
|
if err := face_detection.GlobalFaceDetector.ReloadFacesFromDatabase(); err != nil {
|
||||||
|
deleteErrors = append(deleteErrors, errors.Wrap(err, "reload faces from database"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return deleteErrors
|
return deleteErrors
|
||||||
|
@ -116,5 +122,10 @@ func deleteOldUserAlbums(db *gorm.DB, scannedAlbums []*models.Album, user *model
|
||||||
deleteErrors = append(deleteErrors, err)
|
deleteErrors = append(deleteErrors, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reload faces after deleting albums
|
||||||
|
if err := face_detection.GlobalFaceDetector.ReloadFacesFromDatabase(); err != nil {
|
||||||
|
deleteErrors = append(deleteErrors, err)
|
||||||
|
}
|
||||||
|
|
||||||
return deleteErrors
|
return deleteErrors
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,6 +68,23 @@ func getSamplesFromDatabase(db *gorm.DB) (samples []face.Descriptor, faceGroupID
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReloadFacesFromDatabase replaces the in-memory face descriptors with the ones in the database
|
||||||
|
func (fd *FaceDetector) ReloadFacesFromDatabase() error {
|
||||||
|
faceDescriptors, faceGroupIDs, imageFaceIDs, err := getSamplesFromDatabase(fd.db)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fd.mutex.Lock()
|
||||||
|
defer fd.mutex.Unlock()
|
||||||
|
|
||||||
|
fd.faceDescriptors = faceDescriptors
|
||||||
|
fd.faceGroupIDs = faceGroupIDs
|
||||||
|
fd.imageFaceIDs = imageFaceIDs
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// DetectFaces finds the faces in the given image and saves them to the database
|
// DetectFaces finds the faces in the given image and saves them to the database
|
||||||
func (fd *FaceDetector) DetectFaces(media *models.Media) error {
|
func (fd *FaceDetector) DetectFaces(media *models.Media) error {
|
||||||
if err := fd.db.Model(media).Preload("MediaURL").First(&media).Error; err != nil {
|
if err := fd.db.Model(media).Preload("MediaURL").First(&media).Error; err != nil {
|
||||||
|
|
Loading…
Reference in New Issue