4.5 KiB
Perfetto. Ora il reset è davvero pulito:
Nessun processo della galleria attivo Nessun processo usa SQLite Lock daemon volti assente Lock daemon prototype assente database.sqlite assente WAL e SHM assenti
- Ricrea il database vuoto cd /home/nvme/dockerdata/prove/s137js || exit 1
node db/init.js
Dovresti vedere la creazione delle tabelle e infine:
✅ init completato
- Verifica subito i conteggi
Fallo prima di avviare server o daemon:
sqlite3 -header -column
api_v1/database.sqlite
"
SELECT
(SELECT COUNT(*) FROM photos)
AS photos,
(SELECT COUNT(*) FROM faces)
AS faces,
(SELECT COUNT(*) FROM persons)
AS persons,
(SELECT COUNT(*) FROM face_scan_jobs)
AS scan_jobs,
(SELECT COUNT(*) FROM face_cluster_runs)
AS cluster_runs,
(SELECT COUNT(*) FROM face_prototype_jobs)
AS prototype_jobs,
(SELECT COUNT(*) FROM person_face_prototypes)
AS prototypes;
"
Il risultato deve essere:
photos faces persons scan_jobs cluster_runs prototype_jobs prototypes
0 0 0 0 0 0 0
- Verifica specificamente le persone
sqlite3 -header -column
api_v1/database.sqlite
" SELECT id, user, name, created_at FROM persons; "
Deve restituire zero righe. In particolare, Jessica non deve comparire.
-
Verifica che non esistano vecchie run sqlite3 -header -column
api_v1/database.sqlite
" SELECT (SELECT COUNT(*) FROM face_cluster_runs) AS cluster_runs,(SELECT COUNT(*) FROM face_clusters) AS clusters,
( SELECT COUNT(*) FROM face_cluster_memberships ) AS memberships,
( SELECT COUNT(*) FROM person_face_reference_exclusions ) AS reference_exclusions,
( SELECT COUNT(*) FROM face_recognition_index_state ) AS recognition_index_states; "
Atteso:
cluster_runs 0 clusters 0 memberships 0 reference_exclusions 0 recognition_index_states 0
- Controlla l’integrità
sqlite3
api_v1/database.sqlite
"PRAGMA integrity_check;"
Atteso:
ok
- Avvia i processi Terminale 1: server cd /home/nvme/dockerdata/prove/s137js || exit 1
npm start
Controlla nel log:
DB PATH: /home/nvme/dockerdata/prove/s137js/api_v1/database.sqlite
Terminale 2: daemon scansione volti cd /home/nvme/dockerdata/prove/s137js || exit 1
npm run face:daemon
Terminale 3: daemon prototype cd /home/nvme/dockerdata/prove/s137js || exit 1
npm run prototype:daemon
All’avvio, il daemon prototype dovrebbe mostrare:
pending_jobs: 0
- Controlla processi e lock
Da un quarto terminale:
pgrep -af
'runFaceScanDaemon|runPrototypeDaemon|server.js'
Controlla i lock:
cd /home/nvme/dockerdata/prove/s137js || exit 1
ls -l
face-scan-daemon.lock
prototype-worker-daemon.lock
Entrambi devono esistere mentre i daemon sono attivi.
- Verifica nuovamente le persone
Dopo l’avvio del server e dei daemon:
sqlite3 -header -column
api_v1/database.sqlite
"
SELECT
id,
user,
name,
created_at
FROM persons;
"
Deve essere ancora vuoto.
È normale che nel frattempo vengano ricreati automaticamente:
photos face_scan_jobs faces embedding
Non devono invece essere ricreati automaticamente:
persons face_cluster_runs person_face_prototypes person_face_reference_exclusions face_prototype_jobs
- Attendi il completamento della scansione
Controlla:
npm run face:status
Quando avrai:
pending: 0 processing: 0 error: 0
verifica gli embedding:
sqlite3 -header -column
api_v1/database.sqlite
"
SELECT
(SELECT COUNT(*) FROM photos)
AS photos,
(SELECT COUNT(*) FROM faces)
AS faces,
(
SELECT COUNT(*)
FROM faces
WHERE length(embedding) = 512
) AS valid_embeddings,
(
SELECT COUNT(*)
FROM persons
) AS persons,
(
SELECT COUNT(*)
FROM face_cluster_runs
) AS cluster_runs;
"
A scansione conclusa è plausibile ottenere nuovamente:
photos 84 faces 30 valid_embeddings 30 persons 0 cluster_runs 0
Solo dopo questa verifica esegui il clustering persistente:
npm run face:cluster --
--user Fabio
--scope all
--min-cluster-size 3
--min-samples 2
--persist
Questa volta la prima run del nuovo database dovrà essere quella appena generata, senza vecchie run precedenti.ù