332 lines
15 KiB
Java
332 lines
15 KiB
Java
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<br>PER FOTOEVENTI: PERCORSO DOVE RISIEDONO I SORGENTI DI FACE (NFS)<BR>ATTENZIONE!! Percorso ASSOLUTO.<BR>TUTTI I PERCORSI DEVONO FINIRE PER /<BR>Produzione: /home/sites/regalamiunsorriso/RUS/<br>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<br>ATTENZIONE!! Percorso ASSOLUTO.<BR>TUTTI I PERCORSI DEVONO FINIRE PER /<BR>Produzione: tbd/<br>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<br>ATTENZIONE!! Percorso ASSOLUTO.<BR>TUTTI I PERCORSI DEVONO FINIRE PER /<BR>Produzione: tbd/<br>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.<BR>QUESTO DETERMINA IL NUMERO DEI THREAD MASSIMO, OVVERO NUM_PROCESSORI_CUDA_EFFETTIVI * NUM_THREAD_X_PROCESSORE_CUDA<br>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).<BR>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.<BR>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<br>/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.<br>I percorsi devono essere condivisi tra i container.<br>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. <br>0: cosine<br>1: norm_l1.<br>Defaults to 0");
|
|
bean.save();
|
|
StatusMsg.deleteMsgByTag(ap, "INIT");
|
|
super.initApplicationParms(ap);
|
|
FaceRecognitionApi.initApplicationParms(ap);
|
|
}
|
|
}
|
|
|
|
public Vectumerator<Users> 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;
|
|
}
|
|
}
|
|
}
|