galleria_photo_face_rknn_op.../start_server_con_clean.md
2026-10-03 12:16:58 +02:00

4.5 KiB
Raw Blame History

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

  1. 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

  1. 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

  1. 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.

  1. 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

  1. Controlla l’integrità sqlite3
    api_v1/database.sqlite
    "PRAGMA integrity_check;"

Atteso:

ok

  1. 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

  1. 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.

  1. 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

  1. 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.ù

https://prova.patachina.it/faces.html?v=70