Add Face Recognition executables and scripts for Windows and Unix
All checks were successful
Publish FaceAI Container / publish (push) Successful in 11m44s
All checks were successful
Publish FaceAI Container / publish (push) Successful in 11m44s
This commit is contained in:
parent
774d304220
commit
5df2185c1d
11 changed files with 337 additions and 1 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -7,7 +7,6 @@
|
|||
/build/
|
||||
/out/
|
||||
/dist/
|
||||
/bin/
|
||||
|
||||
# Webapp build artifacts and generated classes
|
||||
/WEB-INF/classes/
|
||||
|
|
|
|||
BIN
bin/Face_Recognition_Unix/face_encoder_cpu
Normal file
BIN
bin/Face_Recognition_Unix/face_encoder_cpu
Normal file
Binary file not shown.
BIN
bin/Face_Recognition_Unix/face_encoder_gpu
Normal file
BIN
bin/Face_Recognition_Unix/face_encoder_gpu
Normal file
Binary file not shown.
BIN
bin/Face_Recognition_Unix/face_matcher
Normal file
BIN
bin/Face_Recognition_Unix/face_matcher
Normal file
Binary file not shown.
107
bin/Face_Recognition_Unix/istruzioni.txt
Normal file
107
bin/Face_Recognition_Unix/istruzioni.txt
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
#########################################
|
||||
# #
|
||||
# Face Recognition - UNIX #
|
||||
# #
|
||||
#########################################
|
||||
|
||||
|
||||
|
||||
===== [CONTENUTO] =============================================================================================
|
||||
|
||||
# face_encoder_cpu versione Unix della prima parte del programma che utilizza il processore
|
||||
|
||||
La versione CPU è universale ed è abilitata al multicore.
|
||||
|
||||
# face_encoder_gpu versione Unix della prima parte del programma che utilizza la scheda grafica
|
||||
|
||||
La versione GPU funziona solamente in un ambiente che dispone di una scheda grafica,
|
||||
altrimenti il programma segnala l'errore e termina. Utilizza le librerie CUDA per maggiore precisione.
|
||||
|
||||
# face_matcher versione Unix della seconda parte del programma
|
||||
|
||||
|
||||
|
||||
===== [ESEGUIRE FACE_ENCODER] =================================================================================
|
||||
|
||||
Avvia il terminale nella cartella del programma e lancia il comando
|
||||
|
||||
face_encoder_cpu [-h/--help] -i IMAGES/--images IMAGES [-o OUT/--out OUT] [-l LOG/--log LOG] [-r/--recursive] [-t/--include-tn] [-m/--multicore]
|
||||
face_encoder_gpu [-h/--help] -i IMAGES/--images IMAGES [-o OUT/--out OUT] [-l LOG/--log LOG] [-r/--recursive] [-t/--include-tn]
|
||||
|
||||
rispettivamente per la versione CPU o GPU.
|
||||
|
||||
----- <DESCRIZIONE> -------------------------------------------------------------------------------------------
|
||||
--help mostra la guida del programma
|
||||
|
||||
--images imposta il percorso da cui leggere le immagini da codificare
|
||||
|
||||
--out imposta il percorso in cui generare il file di encodings .pkl
|
||||
|
||||
Il programma accetta sia il percorso di un file da creare (es. "./output/gara2/face_encodings_gara2.pkl"),
|
||||
sia quello di una cartella (es. "./output/gara2/") in cui verrà generato un file default "face_encodings_DATETIME.pkl".
|
||||
Tutte le sottocartelle presenti nel percorso, se non esistenti, verranno create.
|
||||
Se non impostato, di default il programma genererà il file al percorso "./output/face_encodings_DATETIME.pkl".
|
||||
|
||||
--log imposta il percorso in cui generare il file di log .txt
|
||||
|
||||
Il programma accetta sia il percorso di un file da creare (es. "./output/gara2/encoder_log_gara2.txt"),
|
||||
sia quello di una cartella (es. "./output/gara2/") in cui verrà generato un file default "encoder_log_DATETIME.txt".
|
||||
Tutte le sottocartelle presenti nel percorso, se non esistenti, verranno create.
|
||||
Se non impostato, di default il programma genererà il file al percorso "./output/encoder_log_DATETIME.txt".
|
||||
|
||||
--recursive abilita la ricerca ricorsiva in tutte le sotto cartelle all'interno di "IMAGES"
|
||||
|
||||
Se non impostato, di default il programma ignorerà tutte le sottocartelle nel percorso indicato.
|
||||
|
||||
--include-tn disabilita il filtro-tn, includendo nell'elaborazione anche le immagini thumbnail
|
||||
|
||||
Se non impostato, di default il programma abilita il filtro e ignora ciascuna immagine che inizia per "tn_".
|
||||
|
||||
--multicore [!SOLO PER CPU!] imposta il livello di parallelismo con cui avviare l'elaborazione
|
||||
|
||||
Accetta valori {1, 2, 3, 4, 5} che corrispondono all'utilizzo di {1/8, 1/4, 1/2, 3/4, n-2} dei core.
|
||||
Se non impostato, di default il programma imposterà il livello di multicore a 3 e utilizzerà dunque 1/2 dei core.
|
||||
|
||||
----- <LEGENDA> -----------------------------------------------------------------------------------------------
|
||||
[ ] indica che il parametro è opzionale
|
||||
/ indica che per impostare quel parametro puoi usare una delle due scritture
|
||||
IMAGES è il percorso della cartella contenente le immagini da elaborare e da codificare
|
||||
OUT è il percorso della cartella o del file di output contenente gli encodings in formato .pkl
|
||||
DATETIME è la data nel formato "yyyymmdd_hhmmss" in cui è stato generato il file
|
||||
|
||||
|
||||
|
||||
===== [ESEGUIRE FACE_MATCHER] =================================================================================
|
||||
|
||||
Avvia il terminale nella cartella del programma e lancia il comando
|
||||
|
||||
face_matcher [-h/--help] -i IMAGE/--image IMAGE -e ENCODINGS/--encodings ENCODINGS [-o OUT/--out OUT] [-l LOG/--log LOG]
|
||||
|
||||
----- <DESCRIZIONE> -------------------------------------------------------------------------------------------
|
||||
--help mostra la guida del programma
|
||||
|
||||
--image imposta il percorso da cui leggere il volto di cui fare il match
|
||||
|
||||
--encodings imposta il percorso da cui leggere gli encodings con cui eseguire il match
|
||||
|
||||
--out imposta il percorso in cui generare il file dei risultati .csv
|
||||
|
||||
Il programma accetta sia il percorso di un file da creare (es. "./output/gara2/result_gara2.csv"),
|
||||
sia quello di una cartella (es. "./output/gara2/") in cui verrà generato un file default "result_DATETIME.csv".
|
||||
Tutte le sottocartelle presenti nel percorso, se non esistenti, verranno create.
|
||||
Se non impostato, di default il programma genererà il file al percorso "./output/result_DATETIME.csv".
|
||||
|
||||
--log imposta il percorso in cui generare il file di log .txt
|
||||
|
||||
Il programma accetta sia il percorso di un file da creare (es. "./output/gara2/matcher_log_gara2.txt"),
|
||||
sia quello di una cartella (es. "./output/gara2/") in cui verrà generato un file default "matcher_log_DATETIME.txt".
|
||||
Tutte le sottocartelle presenti nel percorso, se non esistenti, verranno create.
|
||||
Se non impostato, di default il programma genererà il file al percorso "./output/matcher_log_DATETIME.txt".
|
||||
|
||||
----- <LEGENDA> -----------------------------------------------------------------------------------------------
|
||||
[ ] indica che il parametro è opzionale
|
||||
/ indica che per impostare quel parametro puoi usare una delle due scritture
|
||||
IMAGE è il percorso dell'immagine contenente il volto di cui fare il match
|
||||
ENCODINGS è il percorso del file .pkl che contiene gli encodings delle foto con cui eseguire il match
|
||||
OUT è il percorso della cartella o del file di output contenente il risultato in formato .csv
|
||||
DATATIME è la data nel formato "yyyymmdd_hhmmss" in cui è stato generato il file
|
||||
Binary file not shown.
Binary file not shown.
BIN
bin/Face_Recognition_Windows/face_matcher.exe
Normal file
BIN
bin/Face_Recognition_Windows/face_matcher.exe
Normal file
Binary file not shown.
111
bin/Face_Recognition_Windows/istruzioni.txt
Normal file
111
bin/Face_Recognition_Windows/istruzioni.txt
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
#########################################
|
||||
# #
|
||||
# Face Recognition - WINDOWS #
|
||||
# #
|
||||
#########################################
|
||||
|
||||
|
||||
|
||||
===== [CONTENUTO] =============================================================================================
|
||||
|
||||
# face_encoder_cpu cartella contenente la versione CPU della prima parte del programma
|
||||
|
||||
La versione CPU è universale ed è abilitata al multicore.
|
||||
Contiene anche una cartella nascosta _internal con dentro le librerie che servono all'eseguibile.
|
||||
Per spostare il programma è quindi necessario spostare l'intera cartella e non solo l'eseguibile al suo interno.
|
||||
|
||||
# face_encoder_gpu cartella contenente la versione GPU della prima parte del programma
|
||||
|
||||
La versione GPU funziona solamente in un ambiente che dispone di una scheda grafica,
|
||||
altrimenti il programma segnala l'errore e termina. Utilizza le librerie CUDA per maggiore precisione.
|
||||
Contiene anche una cartella nascosta _internal con dentro le librerie che servono all'eseguibile.
|
||||
Per spostare il programma è quindi necessario spostare l'intera cartella e non solo l'eseguibile al suo interno.
|
||||
|
||||
# face_matcher.exe versione Windows della seconda parte del programma
|
||||
|
||||
|
||||
|
||||
===== [ESEGUIRE FACE_ENCODER] =================================================================================
|
||||
|
||||
Avvia il terminale nella cartella del programma e lancia il comando
|
||||
|
||||
face_encoder_cpu.exe [-h/--help] -i IMAGES/--images IMAGES [-o OUT/--out OUT] [-l LOG/--log LOG] [-r/--recursive] [-t/--include-tn] [-m/--multicore]
|
||||
face_encoder_gpu.exe [-h/--help] -i IMAGES/--images IMAGES [-o OUT/--out OUT] [-l LOG/--log LOG] [-r/--recursive] [-t/--include-tn]
|
||||
|
||||
rispettivamente per la versione CPU o GPU.
|
||||
|
||||
----- <DESCRIZIONE> -------------------------------------------------------------------------------------------
|
||||
--help mostra la guida del programma
|
||||
|
||||
--images imposta il percorso da cui leggere le immagini da codificare
|
||||
|
||||
--out imposta il percorso in cui generare il file di encodings .pkl
|
||||
|
||||
Accetta sia il percorso di un file da creare (es. "./output/gara2/face_encodings_gara2.pkl"),
|
||||
sia quello di una cartella (es. "./output/gara2/") in cui verrà generato un file default "face_encodings_DATETIME.pkl".
|
||||
Tutte le sottocartelle presenti nel percorso, se non esistenti, verranno create.
|
||||
Se non impostato, di default il programma genererà il file al percorso "./output/face_encodings_DATETIME.pkl".
|
||||
|
||||
--log imposta il percorso in cui generare il file di log .txt
|
||||
|
||||
Accetta sia il percorso di un file da creare (es. "./output/gara2/encoder_log_gara2.txt"),
|
||||
sia quello di una cartella (es. "./output/gara2/") in cui verrà generato un file default "encoder_log_DATETIME.txt".
|
||||
Tutte le sottocartelle presenti nel percorso, se non esistenti, verranno create.
|
||||
Se non impostato, di default il programma genererà il file al percorso "./output/encoder_log_DATETIME.txt".
|
||||
|
||||
--recursive abilita la ricerca ricorsiva in tutte le sotto cartelle all'interno di "IMAGES"
|
||||
|
||||
Se non impostato, di default il programma ignorerà tutte le sottocartelle nel percorso indicato.
|
||||
|
||||
--include-tn disabilita il filtro-tn, includendo nell'elaborazione anche le immagini thumbnail
|
||||
|
||||
Se non impostato, di default il programma abilita il filtro e ignora ciascuna immagine che inizia per "tn_".
|
||||
|
||||
--multicore [!SOLO PER CPU!] imposta il livello di parallelismo con cui avviare l'elaborazione
|
||||
|
||||
Accetta valori {1, 2, 3, 4, 5} che corrispondono all'utilizzo di {1/8, 1/4, 1/2, 3/4, n-2} dei core.
|
||||
Se non impostato, di default il programma imposterà il livello di multicore a 3 e utilizzerà dunque 1/2 dei core.
|
||||
|
||||
----- <LEGENDA> -----------------------------------------------------------------------------------------------
|
||||
[ ] indica che il parametro è opzionale
|
||||
/ indica che per impostare quel parametro puoi usare una delle due scritture
|
||||
IMAGES è il percorso della cartella contenente le immagini da elaborare e da codificare
|
||||
OUT è il percorso della cartella o del file di output contenente gli encodings in formato .pkl
|
||||
DATETIME è la data nel formato "yyyymmdd_hhmmss" in cui è stato generato il file
|
||||
|
||||
|
||||
|
||||
===== [ESEGUIRE FACE_MATCHER] =================================================================================
|
||||
|
||||
Avvia il terminale nella cartella del programma e lancia il comando
|
||||
|
||||
face_matcher.exe [-h/--help] -i IMAGE/--image IMAGE -e ENCODINGS/--encodings ENCODINGS [-o OUT/--out OUT] [-l LOG/--log LOG]
|
||||
|
||||
----- <DESCRIZIONE> -------------------------------------------------------------------------------------------
|
||||
--help mostra la guida del programma
|
||||
|
||||
--image imposta il percorso da cui leggere il volto di cui fare il match
|
||||
|
||||
--encodings imposta il percorso da cui leggere gli encodings con cui eseguire il match
|
||||
|
||||
--out imposta il percorso in cui generare il file dei risultati .csv
|
||||
|
||||
Il programma accetta sia il percorso di un file da creare (es. "./output/gara2/result_gara2.csv"),
|
||||
sia quello di una cartella (es. "./output/gara2/") in cui verrà generato un file default "result_DATETIME.csv".
|
||||
Tutte le sottocartelle presenti nel percorso, se non esistenti, verranno create.
|
||||
Se non impostato, di default il programma genererà il file al percorso "./output/result_DATETIME.csv".
|
||||
|
||||
--log imposta il percorso in cui generare il file di log .txt
|
||||
|
||||
Il programma accetta sia il percorso di un file da creare (es. "./output/gara2/matcher_log_gara2.txt"),
|
||||
sia quello di una cartella (es. "./output/gara2/") in cui verrà generato un file default "matcher_log_DATETIME.txt".
|
||||
Tutte le sottocartelle presenti nel percorso, se non esistenti, verranno create.
|
||||
Se non impostato, di default il programma genererà il file al percorso "./output/matcher_log_DATETIME.txt".
|
||||
|
||||
----- <LEGENDA> -----------------------------------------------------------------------------------------------
|
||||
[ ] indica che il parametro è opzionale
|
||||
/ indica che per impostare quel parametro puoi usare una delle due scritture
|
||||
IMAGE è il percorso dell'immagine contenente il volto di cui fare il match
|
||||
ENCODINGS è il percorso del file .pkl che contiene gli encodings delle foto con cui eseguire il match
|
||||
OUT è il percorso della cartella o del file di output contenente il risultato in formato .csv
|
||||
DATATIME è la data nel formato "yyyymmdd_hhmmss" in cui è stato generato il file
|
||||
3
bin/Face_Recognition_Windows/run_face_encoder.bat
Normal file
3
bin/Face_Recognition_Windows/run_face_encoder.bat
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
@echo off
|
||||
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%~dp0run_face_encoder.ps1"
|
||||
pause
|
||||
116
bin/Face_Recognition_Windows/run_face_encoder.ps1
Normal file
116
bin/Face_Recognition_Windows/run_face_encoder.ps1
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
# --- Selezione livello multicore ---
|
||||
Write-Host ""
|
||||
Write-Host "Seleziona il livello di multicore per l'elaborazione CPU:"
|
||||
Write-Host " 1 = 1/8 dei core"
|
||||
Write-Host " 2 = 1/4 dei core"
|
||||
Write-Host " 3 = 1/2 dei core (predefinito)"
|
||||
Write-Host " 4 = 3/4 dei core"
|
||||
Write-Host " 5 = n-2 core"
|
||||
Write-Host ""
|
||||
$input = Read-Host "Inserisci il livello (1-5) oppure premi Invio per usare il predefinito (3)"
|
||||
|
||||
if ($input -match '^[1-5]$') {
|
||||
$multicore = [int]$input
|
||||
} else {
|
||||
$multicore = -1
|
||||
}
|
||||
|
||||
# --- Modern folder picker (IFileOpenDialog, Vista+) ---
|
||||
Add-Type -TypeDefinition @'
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
public class ModernFolderPicker {
|
||||
private const uint FOS_PICKFOLDERS = 0x00000020;
|
||||
private const int SIGDN_FILESYSPATH = unchecked((int)0x80028000);
|
||||
|
||||
public static string Show(string title = "Select Folder") {
|
||||
var dialog = (IFileOpenDialog)new FileOpenDialogClass();
|
||||
try {
|
||||
uint options;
|
||||
dialog.GetOptions(out options);
|
||||
dialog.SetOptions(options | FOS_PICKFOLDERS);
|
||||
dialog.SetTitle(title);
|
||||
if (dialog.Show(IntPtr.Zero) != 0) return null; // cancelled
|
||||
IShellItem item;
|
||||
dialog.GetResult(out item);
|
||||
string path;
|
||||
item.GetDisplayName(SIGDN_FILESYSPATH, out path);
|
||||
Marshal.ReleaseComObject(item);
|
||||
return path;
|
||||
} finally {
|
||||
Marshal.ReleaseComObject(dialog);
|
||||
}
|
||||
}
|
||||
|
||||
[ComImport, ClassInterface(ClassInterfaceType.None), Guid("DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7")]
|
||||
private class FileOpenDialogClass {}
|
||||
|
||||
[ComImport, Guid("D57C7288-D4AD-4768-BE02-9D969532D960"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||
private interface IFileOpenDialog {
|
||||
[PreserveSig] int Show(IntPtr hwndOwner);
|
||||
void SetFileTypes(uint cFileTypes, IntPtr rgFilterSpec);
|
||||
void SetFileTypeIndex(uint iFileType);
|
||||
void GetFileTypeIndex(out uint piFileType);
|
||||
void Advise(IntPtr pfde, out uint pdwCookie);
|
||||
void Unadvise(uint dwCookie);
|
||||
void SetOptions(uint fos);
|
||||
void GetOptions(out uint pfos);
|
||||
void SetDefaultFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi);
|
||||
void SetFolder([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi);
|
||||
void GetFolder([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
||||
void GetCurrentSelection([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
||||
void SetFileName([MarshalAs(UnmanagedType.LPWStr)] string pszName);
|
||||
void GetFileName([MarshalAs(UnmanagedType.LPWStr)] out string pszName);
|
||||
void SetTitle([MarshalAs(UnmanagedType.LPWStr)] string pszTitle);
|
||||
void SetOkButtonLabel([MarshalAs(UnmanagedType.LPWStr)] string pszText);
|
||||
void SetFileNameLabel([MarshalAs(UnmanagedType.LPWStr)] string pszLabel);
|
||||
void GetResult([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);
|
||||
void AddPlace([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, int fdap);
|
||||
void SetDefaultExtension([MarshalAs(UnmanagedType.LPWStr)] string pszDefaultExtension);
|
||||
void Close(int hr);
|
||||
void SetClientGuid([In] ref Guid guid);
|
||||
void ClearClientData();
|
||||
void SetFilter(IntPtr pFilter);
|
||||
void GetResults(out IntPtr ppenum);
|
||||
void GetSelectedItems(out IntPtr ppenum);
|
||||
}
|
||||
|
||||
[ComImport, Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||
private interface IShellItem {
|
||||
void BindToHandler(IntPtr pbc, [In] ref Guid bhid, [In] ref Guid riid, out IntPtr ppv);
|
||||
void GetParent(out IShellItem ppsi);
|
||||
void GetDisplayName(int sigdnName, [MarshalAs(UnmanagedType.LPWStr)] out string ppszName);
|
||||
void GetAttributes(uint sfgaoMask, out uint psfgaoAttribs);
|
||||
void Compare(IShellItem psi, uint hint, out int piOrder);
|
||||
}
|
||||
}
|
||||
'@
|
||||
|
||||
$inputPath = [ModernFolderPicker]::Show("Select the folder containing images to encode")
|
||||
|
||||
if (-not $inputPath) {
|
||||
Write-Host "No folder selected. Exiting."
|
||||
exit 0
|
||||
}
|
||||
|
||||
# --- Build argument list ---
|
||||
$encoderExe = Join-Path $PSScriptRoot "face_encoder_cpu\face_encoder_cpu.exe"
|
||||
|
||||
$encoderArgs = [System.Collections.Generic.List[string]]::new()
|
||||
$encoderArgs.Add("-i")
|
||||
$encoderArgs.Add($inputPath)
|
||||
$encoderArgs.Add("-r")
|
||||
|
||||
if ($multicore -ge 0) {
|
||||
$encoderArgs.Add("-m")
|
||||
$encoderArgs.Add([string]$multicore)
|
||||
}
|
||||
|
||||
# --- Run encoder ---
|
||||
Write-Host "Input folder : $inputPath"
|
||||
Write-Host "Multicore : $(if ($multicore -ge 0) { $multicore } else { 'default (3)' })"
|
||||
Write-Host "Command : $encoderExe $encoderArgs"
|
||||
Write-Host ""
|
||||
|
||||
& $encoderExe @encoderArgs
|
||||
Loading…
Add table
Add a link
Reference in a new issue