package it.acxent.face;
import it.acxent.common.Parm;
import it.acxent.common.StatusMsg;
import it.acxent.db.ApplParmFull;
import it.acxent.db.WcString;
import it.acxent.face.api.FaceRecognitionApi;
import it.acxent.util.StringTokenizer;
import it.acxent.util.Vectumerator;
import java.sql.PreparedStatement;
public class Users extends it.acxent.anag.Users {
public Users() {}
public Users(ApplParmFull newApplParmFull) {
super(newApplParmFull);
}
public void initApplicationParms(ApplParmFull ap) {
if (ap != null) {
String l_tipoParm = "";
Parm bean = new Parm(ap);
l_tipoParm = "FACE";
StatusMsg.updateMsgByTag(ap, "INIT", l_tipoParm);
bean.findByCodice("MAX_CONCURRENT_THREAD");
bean.delete();
bean.findByCodice("PATHFOTO_FACE");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("PATHFOTO_FACE");
bean.setDescrizione("PATHFOTO_FACE");
bean.setFlgTipo(0L);
if (bean.getTesto().isEmpty())
bean.setTesto("/Users/acolzi/Downloads/_RUS/");
bean.setNota("PER FACE:Percorso dove risiedono tutte le foto sorgenti
PER FOTOEVENTI: PERCORSO DOVE RISIEDONO I SORGENTI DI FACE (NFS)
ATTENZIONE!! Percorso ASSOLUTO.
TUTTI I PERCORSI DEVONO FINIRE PER /
Produzione: /home/sites/regalamiunsorriso/RUS/
Test: /Users/acolzi/Downloads/_RUS/");
bean.save();
bean.findByCodice("PATHFACES");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("PATHFACES");
bean.setDescrizione("PATHFACES");
bean.setFlgTipo(0L);
if (bean.getTesto().isEmpty())
bean.setTesto("/Users/acolzi/Downloads/_RUS/");
bean.setNota("Percorso dove risiedono tutti i visi delle foto
ATTENZIONE!! Percorso ASSOLUTO.
TUTTI I PERCORSI DEVONO FINIRE PER /
Produzione: tbd/
Test: /Users/acolzi/Downloads/_RUS/");
bean.save();
bean.findByCodice("PATHFACES_REMOTO");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("PATHFACES_REMOTO");
bean.setDescrizione("PATHFACES_REMOTO");
bean.setFlgTipo(0L);
if (bean.getTesto().isEmpty())
bean.setTesto("/Users/acolzi/Downloads/_RUS/_REMOTOFACES/");
bean.setNota("Percorso dove risiedono tutti i visi delle foto che mi prendo da fr remoto, per evitare tutte le volte di fare la chiamata al servizio
ATTENZIONE!! Percorso ASSOLUTO.
TUTTI I PERCORSI DEVONO FINIRE PER /
Produzione: tbd/
Test: /Users/acolzi/Downloads/_RUS/_REMOTOFACES/");
bean.save();
bean.findByCodice("SERVER_CHIAMETE_REMOTO_WWW");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("SERVER_CHIAMETE_REMOTO_WWW");
bean.setDescrizione("SERVER_CHIAMETE_REMOTO_WWW");
bean.setFlgTipo(0L);
if (bean.getTesto().isEmpty())
bean.setTesto("https://www.fotoeventi.com/RemoteCmd.abl");
bean.setNota("Server remoto www. Serve per inviare i comandi da ovunque a chiunque. In pratica per le notifiche su ricerca per selfie....");
bean.save();
bean.findByCodice("PREVIEW_W");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("PREVIEW_W");
bean.setDescrizione("PREVIEW_W");
bean.setFlgTipo(1L);
bean.setNota("Larghezza preview su ricerca e indicizza. L'altezza ha la precedenza, ovvero se altezza>0, questo parametro viene ignorato.");
bean.save();
bean.findByCodice("PREVIEW_H");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("PREVIEW_H");
bean.setDescrizione("PREVIEW_H");
bean.setFlgTipo(1L);
if (bean.getNumero() <= 0.0D)
bean.setNumero(400.0D);
bean.setNota("Altezza preview su ricerca e indicizza. Ha la precedenza sulla larghezza.");
bean.save();
bean.findByCodice("MAX_NUMBER_OF_THREAD_PF_SCORING_LVL_1");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("MAX_NUMBER_OF_THREAD_PF_SCORING_LVL_1");
bean.setDescrizione("MAX_NUMBER_OF_THREAD_PF_SCORING_LVL_1");
bean.setFlgTipo(1L);
if (bean.getNumero() < 0.0D)
bean.setNumero(1.0D);
bean.setNota("Numero thread (punti foto) contemporanei per il processo di scoring lvl1. Se==0 --> numero di punti foto");
bean.save();
bean.findByCodice("MAX_NUMBER_OF_THREAD_SCORING_LVL_1");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("MAX_NUMBER_OF_THREAD_SCORING_LVL_1");
bean.setDescrizione("MAX_NUMBER_OF_THREAD_SCORING_LVL_1");
bean.setFlgTipo(1L);
if (bean.getNumeroInt() <= 0)
bean.setNumero(300.0D);
bean.setNota("Numero di thread per fase di scoring livello1. Non dipende dalla potenza della macchina ma da quanto i servizi di scoring riescono a assorbire. Per 2 macchine scoring con rtx proviamo con 20. Fare qualche test");
bean.save();
bean.findByCodice("NUM_QUERY_CALLABLE_LVL_1");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("NUM_QUERY_CALLABLE_LVL_1");
bean.setDescrizione("NUM_QUERY_CALLABLE_LVL_1");
bean.setFlgTipo(1L);
if (bean.getNumeroInt() <= 0)
bean.setNumero(98.0D);
bean.setNota("Numero di query face da inviare a zoo per fase di scoring livello 1. In genere da 80 a 95 con 5 servizi. Utile se Num. Foto No Score ==0 (confronto tutte le face dell'evento...)");
bean.save();
bean.findByCodice("STEP_STATUS_MSG_SCORING");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("STEP_STATUS_MSG_SCORING");
bean.setDescrizione("STEP_STATUS_MSG_SCORING");
bean.setFlgTipo(1L);
if (bean.getNumeroInt() <= 0)
bean.setNumero(300.0D);
bean.setNota("Numero di cicli senza status msg durante lo scoring. NUmero basso rallenta parecchio. In genere 300");
bean.save();
bean.findByCodice("MAX_NUMBER_OF_THREAD_SCORING_LVL_2");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("MAX_NUMBER_OF_THREAD_SCORING_LVL_2");
bean.setDescrizione("MAX_NUMBER_OF_THREAD_SCORING_LVL_2");
bean.setFlgTipo(1L);
if (bean.getNumeroInt() <= 0)
bean.setNumero(300.0D);
bean.setNota("Numero di thread per fase di scoring livello 2 o 7(face to face). Non dipende dalla potenza della macchina ma da quanto i servizi di scoring riescono a assorbire. Per 2 macchine scoring con rtx proviamo con 20");
bean.save();
bean.findByCodice("NUM_QUERY_CALLABLE_LVL_2");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("NUM_QUERY_CALLABLE_LVL_2");
bean.setDescrizione("NUM_QUERY_CALLABLE_LVL_2");
bean.setFlgTipo(1L);
if (bean.getNumeroInt() <= 0)
bean.setNumero(98.0D);
bean.setNota("Numero di query face da inviare a zoo per fase di scoring livello 2 (face to face). In genere da 80 a 95 con 5 servizi, dipende da NUM_QUERY_CALLABLE_LVL_2 e dal numero di servizi disponibili. Su scoring 7 รจ dinamico");
bean.save();
bean.findByCodice("MAX_NUMBER_OF_THREAD_INDEXING_SCALING");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("MAX_NUMBER_OF_THREAD_INDEXING_SCALING");
bean.setDescrizione("MAX_NUMBER_OF_THREAD_INDEXING_SCALING");
bean.setFlgTipo(1L);
if (bean.getNumeroInt() <= 0)
bean.setNumero(30.0D);
bean.setNota("Numero Tthread per la fase di indexing e scaling. Di solito 30 con un servizio...");
bean.save();
l_tipoParm = "FACE SCORING";
StatusMsg.updateMsgByTag(ap, "INIT", l_tipoParm);
bean.findByCodice("NUM_PROCESSORI_CUDA_EFFETTIVI");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("NUM_PROCESSORI_CUDA_EFFETTIVI");
bean.setDescrizione("NUM_PROCESSORI_CUDA_EFFETTIVI");
bean.setFlgTipo(1L);
if (bean.getNumero() <= 0.0D)
bean.setNumero(4.0D);
bean.setNota("NUMERO PROCESSORI CUDA DI PARTENZA. VEDI P_NUM_THREAD_X_PROCESSORE_CUDA X NUMERO THREAD MASSIMO PER SCORING CENTRALIZZATO ");
bean.save();
bean.findByCodice("NUM_THREAD_X_PROCESSORE_CUDA");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("NUM_THREAD_X_PROCESSORE_CUDA");
bean.setDescrizione("NUM_THREAD_X_PROCESSORE_CUDA");
bean.setFlgTipo(1L);
if (bean.getNumero() < 0.0D)
bean.setNumero(0.0D);
bean.setNota("NUMERO THREAD PER SCORING CENTRALIZZATO. IN PRATICA DETERMINO QUANTI THREAD MASSIMO PER PROCESSORI CUDA.
QUESTO DETERMINA IL NUMERO DEI THREAD MASSIMO, OVVERO NUM_PROCESSORI_CUDA_EFFETTIVI * NUM_THREAD_X_PROCESSORE_CUDA
VIENE UTILIZZATO SE VOGLIO FORZARE IL VALORE NONOSTANTE LA TABELLA SCORING_VELOX. VIENE AZZERATO UNA VOLTA LETTO.");
bean.save();
bean.findByCodice("NUM_QYERY_CALLABLE");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("NUM_QYERY_CALLABLE");
bean.setDescrizione("NUM_QYERY_CALLABLE");
bean.setFlgTipo(1L);
if (bean.getNumero() < 0.0D)
bean.setNumero(0.0D);
bean.setNota("NUMERO ELEMENTI NELLA QUERY CALLABLE (PACCHETTO DA INVIARE AI PROCESSORI CUDA).
VIENE UTILIZZATO SE VOGLIO FORZARE IL VALORE NONOSTANTE LA TABELLA SCORING_VELOX. VIENE AZZERATO UNA VOLTA LETTO.");
bean.save();
bean.findByCodice("NUM_QUERY_CALLABLE_MIN");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("NUM_QUERY_CALLABLE_MIN");
bean.setDescrizione("NUM_QUERY_CALLABLE_MIN");
bean.setFlgTipo(1L);
if (bean.getNumero() <= 0.0D)
bean.setNumero(150.0D);
bean.setNota("VALORE MINIMO PER SINGOLA CALLABLE. VALORI TROPPO BASSI O TROPPO ALTI SONO INEFFICIENTI.
IL VALORE EFFETTIVO DEL NUMERO QUERY CALLABLE VIENE MODIFICATO DINAMICAMENTE MA MAI SOTTO QUESTO VALORE");
bean.save();
l_tipoParm = "FACE BUILDER";
StatusMsg.updateMsgByTag(ap, "INIT", l_tipoParm);
bean.findByCodice("CONFIDENCE_FOTO_FACE_SEC_DISTANCE_MAX");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("CONFIDENCE_FOTO_FACE_SEC_DISTANCE_MAX");
bean.setDescrizione("CONFIDENCE_FOTO_FACE_SEC_DISTANCE_MAX");
bean.setFlgTipo(1L);
if (bean.getNumero() <= 0.0D)
bean.setNumero(1.0D);
bean.setNota("VALORE SECONDI TRA FOTO PER CONFIDENCE NEAR (1)");
bean.save();
bean.findByCodice("CONFIDENCE_NO_LEVEL_1");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("CONFIDENCE_NO_LEVEL_1");
bean.setDescrizione("CONFIDENCE_NO_LEVEL_1");
bean.setFlgTipo(1L);
if (bean.getNumero() <= 0.0D)
bean.setNumero(40.0D);
bean.setNota("CONFIDENCE SOTTO LA QUALE CONSIDERE LE FOTO SICURAMENTE NON APPARTENTENENTI ALLA STESSA CLASSE");
bean.save();
bean.findByCodice("CONFIDENCE_OK_LEVEL_1");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("CONFIDENCE_OK_LEVEL_1");
bean.setDescrizione("CONFIDENCE_OK_LEVEL_1");
bean.setFlgTipo(1L);
if (bean.getNumero() <= 0.0D)
bean.setNumero(65.0D);
bean.setNota("VALORE CONFIDENCE 1 (65) < DI CONFIDENCE 2");
bean.save();
bean.findByCodice("CONFIDENCE_OK_LEVEL_2");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("CONFIDENCE_OK_LEVEL_2");
bean.setDescrizione("CONFIDENCE_OK_LEVEL_2");
bean.setFlgTipo(1L);
if (bean.getNumero() <= 0.0D)
bean.setNumero(75.0D);
bean.setNota("VALORE CONFIDENCE 2 (75) > DI CONFIDENCE 1");
bean.save();
bean.findByCodice("CONFIDENCE_OK_NEAR");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("CONFIDENCE_OK_NEAR");
bean.setDescrizione("CONFIDENCE_OK_NEAR");
bean.setFlgTipo(1L);
if (bean.getNumero() <= 0.0D)
bean.setNumero(60.0D);
bean.setNota("VALORE CONFIDENCE (60) CHE UTILIZZO SE LE FOTO SONO VICINE TRA LORO");
bean.save();
bean.findByCodice("CONFIDENCE_MAX_LABEL_X_EVENTO");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("CONFIDENCE_MAX_LABEL_X_EVENTO");
bean.setDescrizione("CONFIDENCE_MAX_LABEL_X_EVENTO");
bean.setFlgTipo(1L);
if (bean.getNumero() <= 0.0D)
bean.setNumero(50.0D);
bean.setNota("NUMERO MASSIMO LABEL PER EVENTO (50)");
bean.save();
bean.findByCodice("FULL_PATH_SELFIE");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("FULL_PATH_SELFIE");
bean.setDescrizione("FULL_PATH_SELFIE");
bean.setFlgTipo(0L);
if (bean.getTesto().isEmpty())
bean.setTesto("/Users/acolzi/Downloads/_FE/_selfie/");
bean.setNota("Percorso completo dove vengono memorizzati i selfie
/Users/acolzi/Downloads/_FE/_selfie/");
bean.save();
bean.findByCodice("FACE_DETECTION_USE_PATH");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("FACE_DETECTION_USE_PATH");
bean.setDescrizione("FACE_DETECTION_USE_PATH");
bean.setFlgTipo(5L);
bean.setNota("Se true su richeieste face detection YUNET ZOO mando il path.
I percorsi devono essere condivisi tra i container.
Dovrei attivarlo anche per gli altri");
bean.save();
bean.findByCodice("ZOO_YUNET_SCORING_DYS_TYPE");
bean.setFlgAdmin(1L);
bean.setTipoParm(l_tipoParm);
bean.setCodice("ZOO_YUNET_SCORING_DYS_TYPE");
bean.setDescrizione("ZOO_YUNET_SCORING_DYS_TYPE");
bean.setFlgTipo(1L);
bean.setNota("Distance type.
0: cosine
1: norm_l1.
Defaults to 0");
bean.save();
StatusMsg.deleteMsgByTag(ap, "INIT");
super.initApplicationParms(ap);
FaceRecognitionApi.initApplicationParms(ap);
}
}
public Vectumerator findByCR(UsersCR CR, int pageNumber, int pageRows) {
String s_Sql_Find = "select A.* from USERS AS A";
WcString wc = new WcString();
wc.addWc("dataFineVld is null");
wc = managePolicyFind(CR, wc);
if (!CR.isCode1())
wc.addWc("A.id_users <>1");
if (!CR.getFlgValido().isEmpty())
wc.addWc("A.flgValido='" + CR.getFlgValido() + "'");
if (!CR.getSearchTxt().trim().isEmpty()) {
String temp = CR.getSearchTxt().trim().replace("*", "%");
StringTokenizer st = new StringTokenizer(temp, " ");
StringBuffer txt = new StringBuffer("(");
int countToken = 0;
while (st.hasMoreTokens()) {
String token = prepareSqlString(st.nextToken());
countToken++;
if (countToken > 1)
token = "%" + token;
txt.append("(A.nome like'%" + token + "%' or A.cognome like'%" + token + "%' or A.eMail like'%" + token + "%' or A.codFisc like'%" + token + "%' or A.login like'%" + token + "%')");
if (st.hasMoreTokens())
txt.append(" and ");
}
txt.append(")");
wc.addWc(txt.toString());
}
if (!CR.getEMail().isEmpty())
wc.addWc("A.eMail like'%" + CR.getEMail() + "%'");
if (CR.getFlgMl() == 0L) {
wc.addWc("(A.flgMl is null or A.flgMl=0)");
} else if (CR.getFlgMl() > 0L) {
wc.addWc("A.flgMl =" + CR.getFlgMl());
}
try {
PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find);
return findRows(stmt, pageNumber, pageRows);
} catch (Exception e) {
handleDebug(e);
return AB_EMPTY_VECTUMERATOR;
}
}
}