Update documentation and face scan build verification
This commit is contained in:
parent
73b44d24e5
commit
e78abcf9a2
3 changed files with 320 additions and 105 deletions
255
README.md
255
README.md
|
|
@ -1,129 +1,174 @@
|
||||||
# Galleria con json-server e protetto con JWT S6J
|
git clone https://forgit.patachina.it/Fabio/gallery_server_client.git a
|
||||||
|
cd a
|
||||||
|
|
||||||
|
clear
|
||||||
|
ls -lh models
|
||||||
|
ls -lh native/face-knn
|
||||||
|
ls -lh bin/face_scan
|
||||||
|
find . -name "*.sqlite"
|
||||||
|
|
||||||
## Installazione
|
## Installazione
|
||||||
|
|
||||||
clonare questa repo e installare tutte le dipendenze con `npm ci`
|
|
||||||
|
|
||||||
|
|
||||||
## Start/Stop servers
|
|
||||||
|
|
||||||
| Description | Script |
|
|
||||||
| ------------------------- | -------------------- |
|
|
||||||
| Start server senza auth | `npm start-no-auth` |
|
|
||||||
| Start server con auth | `npm run start` |
|
|
||||||
|
|
||||||
## Tools
|
|
||||||
|
|
||||||
| Description | Script |
|
|
||||||
| ------------------------------ | ------------------- |
|
|
||||||
| Generate user hashed passwords | `npm run hash` |
|
|
||||||
|
|
||||||
|
|
||||||
[json-server api reference](https://github.com/typicode/json-server)
|
|
||||||
|
|
||||||
## Come usarlo
|
|
||||||
|
|
||||||
clonare e poi installare con
|
|
||||||
|
|
||||||
```
|
```
|
||||||
npm ci
|
npm ci
|
||||||
|
node db/init.js
|
||||||
|
npm start
|
||||||
```
|
```
|
||||||
|
|
||||||
nel file .env ci sono tutti i dati da modificare
|
|
||||||
|
|
||||||
poi inserire in user.json user e password utilizzati per fare il login
|
se serve aggiornare i file di face in c++
|
||||||
|
|
||||||
la password da inserire è criptata e viene generata con npm run hash
|
|
||||||
|
|
||||||
il nome viene utilizzato come cartella da scansionare, si trova dentro photos
|
|
||||||
|
|
||||||
es:
|
|
||||||
```
|
|
||||||
name: Fabio
|
|
||||||
|
|
||||||
public/photos
|
|
||||||
└── Fabio
|
|
||||||
└── original
|
|
||||||
└── 2017Irlanda19-29ago
|
|
||||||
├── IMG_0092.JPG
|
|
||||||
├── IMG_0099.JPG
|
|
||||||
├── IMG_0100.JPG
|
|
||||||
```
|
|
||||||
poi dentro Fabio genererà thumbs con tutti i thumbs
|
|
||||||
|
|
||||||
- npm run start
|
|
||||||
- su IP:4000 ci sarà la galleria e andando su impostazioni si potrà fare lo scan di tutte le foto
|
|
||||||
|
|
||||||
dopo aver fatto lo scan è possibile richiedere il json al server con tutte le informazioni anche senza autorizzazione
|
|
||||||
|
|
||||||
basta farlo partire con npm run start-no-auth e le info si possono vedere con
|
|
||||||
|
|
||||||
ip:4000/photos
|
|
||||||
|
|
||||||
- npm start
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### FIT parse (utilizzo di python)
|
|
||||||
|
|
||||||
Per avere il parse dei fit installare python, pipx e i seguenyi packages
|
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo apt install pipx
|
cd docs/face-scan-source
|
||||||
pipx ensurepath
|
|
||||||
pipx install fitdecode
|
make clean
|
||||||
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
usa per sapere dove è installato python
|
dovrebbe produrre
|
||||||
|
|
||||||
```
|
```
|
||||||
pipx list
|
bin/face_scan
|
||||||
```
|
bin/face_recognition
|
||||||
in api_v1/scanner/parsers/parseFit.js va inserito il riferimento
|
|
||||||
|
|
||||||
in questo caso
|
|
||||||
|
|
||||||
```
|
|
||||||
async function parseFit(absPath) {
|
|
||||||
const frames = await new Promise((resolve, reject) => {
|
|
||||||
execFile(
|
|
||||||
"/home/orangepi/.local/pipx/venvs/fitdecode/bin/python",
|
|
||||||
["api_v1/scanner/parsers/parse_fit.py", absPath],
|
|
||||||
{ maxBuffer: 1024 * 1024 * 50 }, // 50 MB
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Inspired in this [post](https://www.techiediaries.com/fake-api-jwt-json-server/) by [Techiediaries](https://www.techiediaries.com/)
|
|
||||||
|
|
||||||
#### Interrogazioni manuali
|
|
||||||
|
|
||||||
per vedere il token
|
|
||||||
|
|
||||||
```
|
```
|
||||||
curl -s -X POST https://prova.patachina.it/auth/login \
|
cd docs/face-knn-source
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d '{"email":"fabio@gmail.com","password":"master66"}'
|
g++ \
|
||||||
|
-std=c++17 \
|
||||||
|
-O2 \
|
||||||
|
-Wall \
|
||||||
|
-Wextra \
|
||||||
|
-Wpedantic \
|
||||||
|
-Iinclude \
|
||||||
|
src/face_knn.cc \
|
||||||
|
src/knn_opencl.cc \
|
||||||
|
src/knn_opencl_backend.cc \
|
||||||
|
-lOpenCL \
|
||||||
|
-ldl \
|
||||||
|
-lpthread \
|
||||||
|
-o bin/face_knn
|
||||||
```
|
```
|
||||||
|
|
||||||
per salvare il token
|
### Face Scan (RKNN)
|
||||||
|
|
||||||
```
|
Per funzionare servono:
|
||||||
TOKEN=$(curl -s -X POST https://prova.patachina.it/auth/login \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-d '{"email":"fabio@gmail.com","password":"master66"}' \
|
|
||||||
| jq -r '.token')
|
|
||||||
```
|
|
||||||
|
|
||||||
per interrogare le foto
|
bin/face_scan
|
||||||
|
|
||||||
```
|
|
||||||
curl -s "https://prova.patachina.it/photos/" \
|
|
||||||
-H "Authorization: Bearer $TOKEN"
|
|
||||||
```
|
|
||||||
|
|
||||||
per interrogare le attività
|
e inoltre:
|
||||||
|
|
||||||
|
models/
|
||||||
|
├── SCRFD_500M_KPS_640.rknn
|
||||||
|
└── face_recognition_sface_2021dec.rknn
|
||||||
|
|
||||||
|
|
||||||
|
e:
|
||||||
|
|
||||||
|
lib/
|
||||||
|
└── librknnrt.so
|
||||||
|
|
||||||
|
Esempio
|
||||||
|
|
||||||
|
Sul server:
|
||||||
|
|
||||||
|
s190js/
|
||||||
|
├── bin/
|
||||||
|
│ └── face_scan
|
||||||
|
├── models/
|
||||||
|
│ ├── SCRFD_500M_KPS_640.rknn
|
||||||
|
│ └── face_recognition_sface_2021dec.rknn
|
||||||
|
└── lib/
|
||||||
|
└── librknnrt.so
|
||||||
|
|
||||||
|
### Face KNN (OpenCL)
|
||||||
|
|
||||||
|
Per funzionare servono:
|
||||||
|
|
||||||
|
native/face-knn/
|
||||||
|
|
||||||
|
|
||||||
|
completa:
|
||||||
|
|
||||||
|
native/face-knn/
|
||||||
|
├── bin/
|
||||||
|
│ └── face_knn
|
||||||
|
├── kernels/
|
||||||
|
│ └── knn_float4_topk.cl
|
||||||
|
├── config.json
|
||||||
|
├── run-face-knn.sh
|
||||||
|
└── SHA256SUMS
|
||||||
|
|
||||||
|
Copia completa
|
||||||
|
cp -a \
|
||||||
|
docs/face-knn-source/bin/face_knn \
|
||||||
|
s190js/native/face-knn/bin/
|
||||||
|
|
||||||
|
cp -a \
|
||||||
|
docs/face-knn-source/kernels \
|
||||||
|
s190js/native/face-knn/
|
||||||
|
|
||||||
|
cp \
|
||||||
|
s190js/native/face-knn/config.json \
|
||||||
|
s190js/native/face-knn/
|
||||||
|
|
||||||
|
|
||||||
|
In pratica il modo più sicuro è copiare tutta:
|
||||||
|
|
||||||
|
native/face-knn/
|
||||||
|
|
||||||
|
Per ricompilare in futuro
|
||||||
|
|
||||||
|
Conserverei anche:
|
||||||
|
|
||||||
|
docs/face-scan-source/
|
||||||
|
docs/face-knn-source/
|
||||||
|
|
||||||
|
|
||||||
|
perché contengono:
|
||||||
|
|
||||||
|
Face Scan
|
||||||
|
Makefile
|
||||||
|
src/
|
||||||
|
include/
|
||||||
|
models/
|
||||||
|
lib/
|
||||||
|
|
||||||
|
Face KNN
|
||||||
|
src/
|
||||||
|
include/
|
||||||
|
kernels/
|
||||||
|
original-build/
|
||||||
|
COMPILAZIONE_FACE_KNN.md
|
||||||
|
|
||||||
|
Backup completo consigliato
|
||||||
|
|
||||||
|
Se dovessi ripristinare tutto su una macchina nuova io copierei:
|
||||||
|
|
||||||
|
bin/
|
||||||
|
models/
|
||||||
|
lib/
|
||||||
|
native/face-knn/
|
||||||
|
|
||||||
|
docs/face-scan-source/
|
||||||
|
docs/face-knn-source/
|
||||||
|
|
||||||
|
|
||||||
|
Così avresti:
|
||||||
|
|
||||||
|
✅ eseguibili pronti
|
||||||
|
|
||||||
|
✅ modelli .rknn
|
||||||
|
|
||||||
|
✅ runtime RKNN
|
||||||
|
|
||||||
|
✅ kernel OpenCL
|
||||||
|
|
||||||
|
✅ sorgenti
|
||||||
|
|
||||||
|
✅ documentazione di build
|
||||||
|
|
||||||
|
✅ oggetti originali .o
|
||||||
|
|
||||||
```
|
|
||||||
curl -s "https://prova.patachina.it/activities/" \
|
|
||||||
-H "Authorization: Bearer $TOKEN"
|
|
||||||
```
|
|
||||||
|
|
|
||||||
129
README1.md
Normal file
129
README1.md
Normal file
|
|
@ -0,0 +1,129 @@
|
||||||
|
# Galleria con json-server e protetto con JWT S6J
|
||||||
|
|
||||||
|
## Installazione
|
||||||
|
|
||||||
|
clonare questa repo e installare tutte le dipendenze con `npm ci`
|
||||||
|
|
||||||
|
|
||||||
|
## Start/Stop servers
|
||||||
|
|
||||||
|
| Description | Script |
|
||||||
|
| ------------------------- | -------------------- |
|
||||||
|
| Start server senza auth | `npm start-no-auth` |
|
||||||
|
| Start server con auth | `npm run start` |
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
|
||||||
|
| Description | Script |
|
||||||
|
| ------------------------------ | ------------------- |
|
||||||
|
| Generate user hashed passwords | `npm run hash` |
|
||||||
|
|
||||||
|
|
||||||
|
[json-server api reference](https://github.com/typicode/json-server)
|
||||||
|
|
||||||
|
## Come usarlo
|
||||||
|
|
||||||
|
clonare e poi installare con
|
||||||
|
|
||||||
|
```
|
||||||
|
npm ci
|
||||||
|
```
|
||||||
|
|
||||||
|
nel file .env ci sono tutti i dati da modificare
|
||||||
|
|
||||||
|
poi inserire in user.json user e password utilizzati per fare il login
|
||||||
|
|
||||||
|
la password da inserire è criptata e viene generata con npm run hash
|
||||||
|
|
||||||
|
il nome viene utilizzato come cartella da scansionare, si trova dentro photos
|
||||||
|
|
||||||
|
es:
|
||||||
|
```
|
||||||
|
name: Fabio
|
||||||
|
|
||||||
|
public/photos
|
||||||
|
└── Fabio
|
||||||
|
└── original
|
||||||
|
└── 2017Irlanda19-29ago
|
||||||
|
├── IMG_0092.JPG
|
||||||
|
├── IMG_0099.JPG
|
||||||
|
├── IMG_0100.JPG
|
||||||
|
```
|
||||||
|
poi dentro Fabio genererà thumbs con tutti i thumbs
|
||||||
|
|
||||||
|
- npm run start
|
||||||
|
- su IP:4000 ci sarà la galleria e andando su impostazioni si potrà fare lo scan di tutte le foto
|
||||||
|
|
||||||
|
dopo aver fatto lo scan è possibile richiedere il json al server con tutte le informazioni anche senza autorizzazione
|
||||||
|
|
||||||
|
basta farlo partire con npm run start-no-auth e le info si possono vedere con
|
||||||
|
|
||||||
|
ip:4000/photos
|
||||||
|
|
||||||
|
- npm start
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### FIT parse (utilizzo di python)
|
||||||
|
|
||||||
|
Per avere il parse dei fit installare python, pipx e i seguenyi packages
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt install pipx
|
||||||
|
pipx ensurepath
|
||||||
|
pipx install fitdecode
|
||||||
|
```
|
||||||
|
|
||||||
|
usa per sapere dove è installato python
|
||||||
|
|
||||||
|
```
|
||||||
|
pipx list
|
||||||
|
```
|
||||||
|
in api_v1/scanner/parsers/parseFit.js va inserito il riferimento
|
||||||
|
|
||||||
|
in questo caso
|
||||||
|
|
||||||
|
```
|
||||||
|
async function parseFit(absPath) {
|
||||||
|
const frames = await new Promise((resolve, reject) => {
|
||||||
|
execFile(
|
||||||
|
"/home/orangepi/.local/pipx/venvs/fitdecode/bin/python",
|
||||||
|
["api_v1/scanner/parsers/parse_fit.py", absPath],
|
||||||
|
{ maxBuffer: 1024 * 1024 * 50 }, // 50 MB
|
||||||
|
```
|
||||||
|
|
||||||
|
Inspired in this [post](https://www.techiediaries.com/fake-api-jwt-json-server/) by [Techiediaries](https://www.techiediaries.com/)
|
||||||
|
|
||||||
|
#### Interrogazioni manuali
|
||||||
|
|
||||||
|
per vedere il token
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s -X POST https://prova.patachina.it/auth/login \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"email":"fabio@gmail.com","password":"master66"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
per salvare il token
|
||||||
|
|
||||||
|
```
|
||||||
|
TOKEN=$(curl -s -X POST https://prova.patachina.it/auth/login \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"email":"fabio@gmail.com","password":"master66"}' \
|
||||||
|
| jq -r '.token')
|
||||||
|
```
|
||||||
|
|
||||||
|
per interrogare le foto
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s "https://prova.patachina.it/photos/" \
|
||||||
|
-H "Authorization: Bearer $TOKEN"
|
||||||
|
```
|
||||||
|
|
||||||
|
per interrogare le attività
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -s "https://prova.patachina.it/activities/" \
|
||||||
|
-H "Authorization: Bearer $TOKEN"
|
||||||
|
```
|
||||||
|
|
@ -279,3 +279,44 @@ Data documentazione:
|
||||||
```text
|
```text
|
||||||
2026-10-26
|
2026-10-26
|
||||||
```
|
```
|
||||||
|
## Verifica ricompilazione Face Scan
|
||||||
|
|
||||||
|
**Data verifica:** 2026-10-26
|
||||||
|
|
||||||
|
### Ambiente utilizzato
|
||||||
|
|
||||||
|
Repository: `/home/nvme/dockerdata/prove/a/docs/face-scan-source`
|
||||||
|
|
||||||
|
Comandi eseguiti:
|
||||||
|
|
||||||
|
make clean
|
||||||
|
make
|
||||||
|
|
||||||
|
### Confronto binari
|
||||||
|
|
||||||
|
| File | SHA256 |
|
||||||
|
|------|---------|
|
||||||
|
| Binario compilato | `7b5148ee602f9bb1aa52e3c5c269c584b9dbea05b94296b049d32ec9985c69aa` |
|
||||||
|
| Binario s190js | `7b5148ee602f9bb1aa52e3c5c269c584b9dbea05b94296b049d32ec9985c69aa` |
|
||||||
|
|
||||||
|
### Esito
|
||||||
|
|
||||||
|
✅ Ricompilazione verificata con successo.
|
||||||
|
|
||||||
|
Il binario generato dalla compilazione dei sorgenti presenti nel repository produce un file identico bit per bit al binario utilizzato in:
|
||||||
|
|
||||||
|
`/home/nvme/dockerdata/prove/s190js/bin/face_scan`
|
||||||
|
|
||||||
|
### Conclusione
|
||||||
|
|
||||||
|
Sono stati verificati:
|
||||||
|
|
||||||
|
- sorgenti
|
||||||
|
- header
|
||||||
|
- Makefile
|
||||||
|
- libreria RKNN
|
||||||
|
- modelli `.rknn`
|
||||||
|
|
||||||
|
Il repository contiene tutto il necessario per rigenerare il binario `face_scan` senza dipendenze aggiuntive.
|
||||||
|
|
||||||
|
**Riproducibilità confermata.**
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue