www in docker support
This commit is contained in:
parent
539a848e95
commit
c227fce036
2145 changed files with 399596 additions and 58 deletions
|
|
@ -0,0 +1,889 @@
|
|||
package it.acxent.face;
|
||||
|
||||
import it.acxent.anag.Clifor;
|
||||
import it.acxent.db.ApplParm;
|
||||
import it.acxent.db.ApplParmFull;
|
||||
import it.acxent.db.DBAdapter;
|
||||
import it.acxent.db.ResParm;
|
||||
import it.acxent.db.WcString;
|
||||
import it.acxent.dm.FaceDetectionMethod;
|
||||
import it.acxent.face.api.FaceRecognitionApi;
|
||||
import it.acxent.face.api.FaceRecognitionApiResult;
|
||||
import it.acxent.face.api.vision.GoogleVisionApi;
|
||||
import it.acxent.face.api.vision.GoogleVisionResult;
|
||||
import it.acxent.util.Vectumerator;
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Time;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class FotoVision extends DBAdapter implements Serializable, FotoI {
|
||||
private static final long serialVersionUID = 1683972369916L;
|
||||
|
||||
private long id_foto;
|
||||
|
||||
private String fileName;
|
||||
|
||||
private String pettorali;
|
||||
|
||||
private String fileNameMd5;
|
||||
|
||||
private String md5;
|
||||
|
||||
private Timestamp tsInserimento;
|
||||
|
||||
private long flgFotoSearch;
|
||||
|
||||
private Evento evento;
|
||||
|
||||
private long id_evento;
|
||||
|
||||
private long id_puntoFoto;
|
||||
|
||||
private PuntoFoto puntoFoto;
|
||||
|
||||
private Time tempo;
|
||||
|
||||
private long flgVideo;
|
||||
|
||||
private String fotoFaceRowid;
|
||||
|
||||
public static final String DIR_MP4_JPG = DBAdapter.SEPARATOR;
|
||||
|
||||
public FotoVision(ApplParmFull newApplParmFull) {
|
||||
super(newApplParmFull);
|
||||
}
|
||||
|
||||
public FotoVision() {}
|
||||
|
||||
public void setId_foto(long newId_foto) {
|
||||
this.id_foto = newId_foto;
|
||||
}
|
||||
|
||||
public void setFileName(String newFileName) {
|
||||
this.fileName = newFileName;
|
||||
}
|
||||
|
||||
public void setPettorali(String newPettorali) {
|
||||
this.pettorali = newPettorali;
|
||||
}
|
||||
|
||||
public void setFileNameMd5(String newFileNameMd5) {
|
||||
this.fileNameMd5 = newFileNameMd5;
|
||||
}
|
||||
|
||||
public void setMd5(String newMd5) {
|
||||
this.md5 = newMd5;
|
||||
}
|
||||
|
||||
public long getId_foto() {
|
||||
return this.id_foto;
|
||||
}
|
||||
|
||||
public String getFileName() {
|
||||
return (this.fileName == null) ? "" : this.fileName.trim();
|
||||
}
|
||||
|
||||
public String getPettorali() {
|
||||
return (this.pettorali == null) ? "" : this.pettorali.trim();
|
||||
}
|
||||
|
||||
public String getFileNameMd5() {
|
||||
return (this.fileNameMd5 == null) ? "" : this.fileNameMd5.trim();
|
||||
}
|
||||
|
||||
public String getMd5() {
|
||||
return (this.md5 == null) ? "" : this.md5.trim();
|
||||
}
|
||||
|
||||
protected ResParm checkDeleteCascade() {
|
||||
return new ResParm(true);
|
||||
}
|
||||
|
||||
protected void deleteCascade() {}
|
||||
|
||||
public static final ResParm loadFacesByFaceRecognition(FotoI foto) {
|
||||
ResParm rp = new ResParm();
|
||||
if (foto.getId_foto() == 0L || foto.getApFull() == null) {
|
||||
rp.setStatus(false);
|
||||
rp.setMsg("Errore! Foto non valida");
|
||||
}
|
||||
if (foto.hasFotoFaces());
|
||||
System.out.println("loadFacesByFaceRecognition: " + foto.getId_foto() + " " + foto.getFileNameFaceRecognition());
|
||||
String userFR = foto.getParm("FACE_RECOGNITION_API_USER").getTesto();
|
||||
String pwdFR = foto.getParm("FACE_RECOGNITION_API_PWD").getTesto();
|
||||
FaceRecognitionApi bean = new FaceRecognitionApi(foto.getApFull(), userFR, pwdFR);
|
||||
boolean usePath = foto.getApFull().getParm("FACE_DETECTION_USE_PATH").isTrue();
|
||||
FaceRecognitionApiResult resF = bean.__detectFaces(foto.getFileNameFaceRecognition(), foto.getMd5(), 99L, true,
|
||||
foto.getDetectFaceConfidentThresold(), usePath);
|
||||
if (resF.isOk())
|
||||
return loadFacesByFaceRecognitionJson(foto, (JSONObject)resF.getResult());
|
||||
rp.setStatus(false);
|
||||
rp.setMsg(resF.getMsg());
|
||||
return rp;
|
||||
}
|
||||
|
||||
public static final ResParm loadFacesByGoogleVisionJson(FotoI foto, JSONObject jo) {
|
||||
ResParm rp = new ResParm();
|
||||
if (foto.getId_foto() == 0L || foto.getApFull() == null) {
|
||||
rp.setStatus(false);
|
||||
rp.setMsg("Errore! Foto non valida ");
|
||||
}
|
||||
StringBuilder msg = new StringBuilder();
|
||||
FotoFace ff = new FotoFace(foto.getApFull());
|
||||
ff.deleteFotoFaceByFoto(foto.getId_foto(), true);
|
||||
JSONArray jaResponses = jo.getJSONArray("responses");
|
||||
boolean visiTrovati = false;
|
||||
for (int i = 0; i < jaResponses.length(); i++) {
|
||||
JSONObject joResponse = jaResponses.getJSONObject(i);
|
||||
if (joResponse.has("faceAnnotations")) {
|
||||
visiTrovati = true;
|
||||
JSONArray jaFaceAnnotations = joResponse.getJSONArray("faceAnnotations");
|
||||
for (int j = 0; j < jaFaceAnnotations.length(); j++) {
|
||||
JSONObject joFaceAnnotation = jaFaceAnnotations.getJSONObject(j);
|
||||
ff = new FotoFace(foto.getApFull());
|
||||
ff.setId_foto(foto.getId_foto());
|
||||
JSONObject joFace = new JSONObject();
|
||||
JSONObject joFdBoundingPoly = joFaceAnnotation.getJSONObject("fdBoundingPoly");
|
||||
joFace.put("fdBoundingPoly", joFdBoundingPoly);
|
||||
JSONArray jaLandmarks = joFaceAnnotation.getJSONArray("landmarks");
|
||||
joFace.put("landmarks", jaLandmarks);
|
||||
ff.setJsonData(joFace.toString());
|
||||
rp = ff.save();
|
||||
if (!rp.getStatus())
|
||||
msg.append("Errore: impossibile caricare fotoface da json per foto id " + foto.getId_foto() + ": " + rp.getMsg() + "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!visiTrovati) {
|
||||
ff = new FotoFace(foto.getApFull());
|
||||
ff.setId_foto(foto.getId_foto());
|
||||
rp = ff.save();
|
||||
}
|
||||
if (rp.getStatus())
|
||||
if (foto.getMd5().isEmpty()) {
|
||||
foto.setMd5(DBAdapter.getFileMd5(foto.getFileNameFaceRecognition()));
|
||||
rp.append(foto.save());
|
||||
}
|
||||
if (msg.length() > 0) {
|
||||
rp.setStatus(false);
|
||||
rp.setMsg(msg.toString());
|
||||
}
|
||||
return rp;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
String hostname = "localhost:3308";
|
||||
String db = "fotoeventi4";
|
||||
System.out.println("Db: " + db);
|
||||
ApplParmFull apTarget = new ApplParmFull(new ApplParm(17, "//" + hostname + "/" + db, db, "root", "root", 1, 10, 300));
|
||||
apTarget.setDebug(false);
|
||||
FotoVision fotoVision = new FotoVision(apTarget);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public String getFileNameFaceRecognition() {
|
||||
return getFileNameFullPath();
|
||||
}
|
||||
|
||||
public String getFileNameFullPath() {
|
||||
if (getFlgFotoSearch() == 1L)
|
||||
return
|
||||
DBAdapter.convertPathToCurrentFileSystemSeparator(getDocBase() + "_selfie/" + getDocBase() + DBAdapter.SEPARATOR);
|
||||
return getPuntoFoto().getPathCompletoFoto() + getPuntoFoto().getPathCompletoFoto() + DBAdapter.SEPARATOR;
|
||||
}
|
||||
|
||||
public ResParm _ricalcolaFotoFaces() {
|
||||
ResParm rp = new ResParm();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
FotoFace ff = new FotoFace(getApFull());
|
||||
Vectumerator<FotoFace> vec = ff.findByFoto(getId_foto());
|
||||
while (vec.hasMoreElements()) {
|
||||
FotoFace row = (FotoFace)vec.nextElement();
|
||||
rp = row.save();
|
||||
if (!rp.getStatus()) {
|
||||
sb.append(getFileName() + " " + getFileName());
|
||||
sb.append("<br>");
|
||||
}
|
||||
}
|
||||
rp.setMsg(sb.toString());
|
||||
return rp;
|
||||
}
|
||||
|
||||
public boolean hasFotoFaces() {
|
||||
FotoFace ff = new FotoFace(getApFull());
|
||||
Vectumerator<FotoFace> vec = ff.findByFoto(getId_foto());
|
||||
return vec.hasMoreElements();
|
||||
}
|
||||
|
||||
public Timestamp getTsInserimento() {
|
||||
return this.tsInserimento;
|
||||
}
|
||||
|
||||
public void setTsInserimento(Timestamp tsInserimento) {
|
||||
this.tsInserimento = tsInserimento;
|
||||
}
|
||||
|
||||
public long getFlgFotoSearch() {
|
||||
return this.flgFotoSearch;
|
||||
}
|
||||
|
||||
public void setFlgFotoSearch(long flgFotoSearch) {
|
||||
this.flgFotoSearch = flgFotoSearch;
|
||||
}
|
||||
|
||||
public void findByMd5(String l_md5) {
|
||||
String s_Sql_Find = "select A.* from FOTO AS A";
|
||||
String s_Sql_Order = "";
|
||||
WcString wc = new WcString();
|
||||
wc.addWc("A.md5='" + l_md5 + "'");
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find + wc.toString());
|
||||
findFirstRecord(stmt);
|
||||
} catch (SQLException e) {
|
||||
removeCPConnection();
|
||||
handleDebug(e);
|
||||
}
|
||||
}
|
||||
|
||||
public FotoFace getFotoFaceFirst() {
|
||||
if (getId_foto() > 0L && getApFull() != null) {
|
||||
FotoFace ff = new FotoFace(getApFull());
|
||||
ff.findFirstByFoto(getId_foto());
|
||||
return ff;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Vectumerator<FotoFace> getFotoFaces() {
|
||||
if (getId_foto() > 0L && getApFull() != null) {
|
||||
FotoFace ff = new FotoFace(getApFull());
|
||||
return ff.findByFoto(getId_foto());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ResParm elaboraFaceRecog(Vectumerator<FotoVision> vecFoto) {
|
||||
ResParm rp = new ResParm();
|
||||
if (getId_foto() > 0L) {
|
||||
FotoFace ffSelfie = getFotoFaceFirst();
|
||||
List<Double> fvSelfie = ffSelfie.getFetureVetctor1list();
|
||||
int i = 0;
|
||||
if (fvSelfie != null)
|
||||
while (vecFoto.hasMoreElements()) {
|
||||
FotoVision row = (FotoVision)vecFoto.nextElement();
|
||||
if (row.getId_foto() == 5192210L)
|
||||
println(row.getId_foto());
|
||||
Vectumerator<FotoFace> vecFf = row.getFotoFaces();
|
||||
if (vecFf != null)
|
||||
while (vecFf.hasMoreElements()) {
|
||||
i++;
|
||||
FotoFace rowFf = (FotoFace)vecFf.nextElement();
|
||||
if (rowFf.getFeatureVector1().isEmpty())
|
||||
rowFf.save();
|
||||
if (!rowFf.getFeatureVector1().isEmpty()) {
|
||||
FaceRecog fr = new FaceRecog(getApFull());
|
||||
fr.findByFotoFace1FotoFace2(ffSelfie.getId_fotoFace(), rowFf.getId_fotoFace());
|
||||
fr.setId_fotoFace1(ffSelfie.getId_fotoFace());
|
||||
fr.setId_fotoFace2(rowFf.getId_fotoFace());
|
||||
List<Double> fvFF = rowFf.getFetureVetctor1list();
|
||||
fr.setEDistance(FotoFace.calculateEuclideanDistance(fvSelfie, fvFF));
|
||||
fr.setCosineSim(FotoFace.calculateDotProduct(fvSelfie, fvFF));
|
||||
System.out.println("" + i + " ed: " + i + " cd: " + fr.getEDistance());
|
||||
if (i == 129)
|
||||
System.out.println("" + i + " stop!");
|
||||
rp = fr.save();
|
||||
continue;
|
||||
}
|
||||
System.out.println("" + i + " fotoface " + i + " foto " + rowFf.getId_fotoFace() + " nome: " + rowFf.getId_foto() + " senza fv");
|
||||
}
|
||||
}
|
||||
}
|
||||
return rp;
|
||||
}
|
||||
|
||||
public Evento getEvento() {
|
||||
this.evento = (Evento)getSecondaryObject(this.evento, Clifor.class, getId_evento());
|
||||
return this.evento;
|
||||
}
|
||||
|
||||
public Vectumerator<FotoFace> findFotoFace() {
|
||||
FotoFace ff = new FotoFace(getApFull());
|
||||
return ff.findByFoto(getId_foto());
|
||||
}
|
||||
|
||||
public void setEvento(Evento evento) {
|
||||
this.evento = evento;
|
||||
}
|
||||
|
||||
public long getId_evento() {
|
||||
return this.id_evento;
|
||||
}
|
||||
|
||||
public void setId_evento(long id_evento) {
|
||||
this.id_evento = id_evento;
|
||||
setEvento(null);
|
||||
}
|
||||
|
||||
public long getNextId_foto(FotoCR CR) {
|
||||
long l_id_foto = getId_foto();
|
||||
String s_Sql_Find = "select A.* from FOTO AS A";
|
||||
String s_Sql_Order = " order by A.fileName ";
|
||||
WcString wc = new WcString();
|
||||
if (CR.getId_evento() != 0L)
|
||||
wc.addWc("A.id_evento=" + CR.getId_evento());
|
||||
if (CR.getId_puntoFoto() != 0L)
|
||||
wc.addWc("A.id_puntoFoto=" + CR.getId_puntoFoto());
|
||||
wc.addWc("A.fileName >'" + getFileName() + "'");
|
||||
if (!CR.getFileName().isEmpty())
|
||||
wc.addWc("A.fileName like '%" + CR.getFileName() + "%'");
|
||||
if (!CR.getPettorale().isEmpty())
|
||||
wc.addWc("A.pettorali like '%," + CR.getPettorale() + ",%'");
|
||||
if (CR.getFlgIndicizzate() == 0L) {
|
||||
wc.addWc("(A.pettorali is null or length(A.pettorali)=0)");
|
||||
} else if (CR.getFlgIndicizzate() == 1L) {
|
||||
wc.addWc("(A.pettorali is not null or length(A.pettorali)>0)");
|
||||
}
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find + wc.toString());
|
||||
Vectumerator<FotoVision> vec = findRows(stmt, 1, 1);
|
||||
if (vec.hasMoreElements()) {
|
||||
FotoVision row = (FotoVision)vec.nextElement();
|
||||
l_id_foto = row.getId_foto();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
handleDebug(e);
|
||||
}
|
||||
return l_id_foto;
|
||||
}
|
||||
|
||||
public long getPrevId_foto(FotoCR CR) {
|
||||
long l_id_foto = getId_foto();
|
||||
String s_Sql_Find = "select A.* from FOTO AS A";
|
||||
String s_Sql_Order = " order by A.fileName desc";
|
||||
WcString wc = new WcString();
|
||||
if (CR.getId_evento() != 0L)
|
||||
wc.addWc("A.id_evento=" + CR.getId_evento());
|
||||
if (CR.getId_puntoFoto() != 0L)
|
||||
wc.addWc("A.id_puntoFoto=" + CR.getId_puntoFoto());
|
||||
wc.addWc("A.fileName <'" + getFileName() + "'");
|
||||
if (!CR.getFileName().isEmpty())
|
||||
wc.addWc("A.fileName like '%" + CR.getFileName() + "%'");
|
||||
if (!CR.getPettorale().isEmpty())
|
||||
wc.addWc("A.pettorali like '%," + CR.getPettorale() + ",%'");
|
||||
if (CR.getFlgIndicizzate() == 0L) {
|
||||
wc.addWc("(A.pettorali is null or length(A.pettorali)=0)");
|
||||
} else if (CR.getFlgIndicizzate() == 1L) {
|
||||
wc.addWc("(A.pettorali is not null or length(A.pettorali)>0)");
|
||||
}
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find + wc.toString());
|
||||
Vectumerator<FotoVision> vec = findRows(stmt, 1, 1);
|
||||
if (vec.hasMoreElements()) {
|
||||
FotoVision row = (FotoVision)vec.nextElement();
|
||||
l_id_foto = row.getId_foto();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
handleDebug(e);
|
||||
}
|
||||
return l_id_foto;
|
||||
}
|
||||
|
||||
public boolean hasPuntoFotoFoto(long l_id_puntofoto) {
|
||||
StringBuffer s_Sql_Find = new StringBuffer("select A.* from FOTO AS A");
|
||||
WcString wc = new WcString();
|
||||
wc.addWc("A.id_puntoFoto=" + l_id_puntofoto);
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(String.valueOf(s_Sql_Find) + String.valueOf(s_Sql_Find));
|
||||
Vectumerator vec = findRows(stmt, 1, 1);
|
||||
if (vec.getTotNumberOfRecords() > 0)
|
||||
return true;
|
||||
return false;
|
||||
} catch (SQLException e) {
|
||||
handleDebug(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public long getId_puntoFoto() {
|
||||
return this.id_puntoFoto;
|
||||
}
|
||||
|
||||
public PuntoFoto getPuntoFoto() {
|
||||
this.puntoFoto = (PuntoFoto)getSecondaryObject(this.puntoFoto, PuntoFoto.class, getId_puntoFoto());
|
||||
return this.puntoFoto;
|
||||
}
|
||||
|
||||
public void setId_puntoFoto(long id_puntoFoto) {
|
||||
this.id_puntoFoto = id_puntoFoto;
|
||||
setPuntoFoto(null);
|
||||
}
|
||||
|
||||
public void setPuntoFoto(PuntoFoto newPuntoFoto) {
|
||||
this.puntoFoto = newPuntoFoto;
|
||||
}
|
||||
|
||||
public ResParm deleteFotoByPuntoFoto(long l_id_puntoFoto) {
|
||||
return delete("delete from FOTO where id_puntoFoto=" + l_id_puntoFoto);
|
||||
}
|
||||
|
||||
public void findByFilenamePuntoFoto(String l_filename, long l_id_puntoFoto) {
|
||||
String s_Sql_Find = "select A.* from FOTO AS A";
|
||||
String s_Sql_Order = "";
|
||||
WcString wc = new WcString();
|
||||
wc.addWc("A.filename='" + l_filename + "'");
|
||||
wc.addWc("A.id_puntoFoto=" + l_id_puntoFoto);
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find + wc.toString());
|
||||
findFirstRecord(stmt);
|
||||
} catch (SQLException e) {
|
||||
handleDebug(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void findByFilenameEvento(String l_filename, long l_id_evento) {
|
||||
String s_Sql_Find = "select A.* from FOTO AS A";
|
||||
String s_Sql_Order = "";
|
||||
WcString wc = new WcString();
|
||||
wc.addWc("A.filename='" + l_filename + "'");
|
||||
wc.addWc("A.id_evento=" + l_id_evento);
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find + wc.toString());
|
||||
findFirstRecord(stmt);
|
||||
} catch (SQLException e) {
|
||||
handleDebug(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static final synchronized ResParm syncAggiornaPettorale_2(FotoVision bean, String l_pettorali) {
|
||||
String temp = l_pettorali.trim();
|
||||
if (!temp.isEmpty()) {
|
||||
if (!temp.startsWith(","))
|
||||
temp = "," + temp;
|
||||
if (!temp.endsWith(","))
|
||||
temp = temp + ",";
|
||||
while (temp.indexOf(",,") >= 0)
|
||||
temp = temp.replaceAll(",,", ",");
|
||||
}
|
||||
String s_sql = "update FOTO SET pettorali='" + temp + "' where id_foto=" + bean.getId_foto();
|
||||
ResParm rp = bean.update(s_sql);
|
||||
if (rp.getStatus())
|
||||
bean.setPettorali(temp);
|
||||
return rp;
|
||||
}
|
||||
|
||||
public Time getTempo() {
|
||||
return this.tempo;
|
||||
}
|
||||
|
||||
public void setTempo(Time newTempo) {
|
||||
this.tempo = newTempo;
|
||||
}
|
||||
|
||||
public long getFlgVideo() {
|
||||
return this.flgVideo;
|
||||
}
|
||||
|
||||
public void setFlgVideo(long flgVideo) {
|
||||
this.flgVideo = flgVideo;
|
||||
}
|
||||
|
||||
public Vectumerator findByPuntofoto(long l_id_puntofoto) {
|
||||
String s_Sql_Find = "select A.* from FOTO AS A";
|
||||
String s_Sql_Order = " ";
|
||||
WcString wc = new WcString();
|
||||
wc.addWc("A.id_puntofoto=" + l_id_puntofoto);
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find + wc.toString());
|
||||
return findRows(stmt);
|
||||
} catch (SQLException e) {
|
||||
return AB_EMPTY_VECTUMERATOR;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isPuntoFotoInviata(long l_id_puntofoto, boolean inviata) {
|
||||
StringBuffer s_Sql_Find = new StringBuffer("select A.* from FOTO AS A");
|
||||
WcString wc = new WcString();
|
||||
wc.addWc("A.id_puntoFoto=" + l_id_puntofoto);
|
||||
if (inviata) {
|
||||
wc.addWc("(A.flgFotoInviata is null or A.flgFotoInviata=0)");
|
||||
} else {
|
||||
wc.addWc("A.flgFotoInviata =1");
|
||||
}
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(String.valueOf(s_Sql_Find) + String.valueOf(s_Sql_Find));
|
||||
Vectumerator vec = findRows(stmt, 1, 1);
|
||||
if (vec.getTotNumberOfRecords() > 0)
|
||||
return false;
|
||||
return true;
|
||||
} catch (SQLException e) {
|
||||
handleDebug(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public Vectumerator<FaceRecog> findFaceRecogBySelfie(FotoI selfie) {
|
||||
if (getId_foto() > 0L && selfie != null && selfie.getId_foto() > 0L) {
|
||||
FaceRecog fr = new FaceRecog(getApFull());
|
||||
return fr.findByFoto1Foto2(selfie.getId_foto(), getId_foto());
|
||||
}
|
||||
return AB_EMPTY_VECTUMERATOR;
|
||||
}
|
||||
|
||||
public String getFileNameReale() {
|
||||
if (getFileNameMd5().isEmpty())
|
||||
return getFileName();
|
||||
return getFileNameMd5();
|
||||
}
|
||||
|
||||
public Vectumerator<FotoVision> findByCR(FotoCR CR, int pageNumber, int pageRows) {
|
||||
if (CR.getFotoSelfie() != null)
|
||||
return findByCRFotoSelfie(CR, pageNumber, pageRows);
|
||||
boolean flgOttimizzo = true;
|
||||
if (pageNumber == 0 && pageRows == 0)
|
||||
flgOttimizzo = false;
|
||||
StringBuffer s_Sql_Find = new StringBuffer("select A.* from FOTO AS A");
|
||||
StringBuffer s_Sql_Order = new StringBuffer(" order by A.fileName ");
|
||||
WcString wc = new WcString();
|
||||
findByCRCreateWC(CR, s_Sql_Find, wc);
|
||||
try {
|
||||
PreparedStatement stmt;
|
||||
if ((pageNumber == 0 && pageRows == 0) || !flgOttimizzo) {
|
||||
stmt = getConn().prepareStatement(String.valueOf(s_Sql_Find) + String.valueOf(s_Sql_Find) + wc.toString());
|
||||
} else {
|
||||
if (pageNumber == 0)
|
||||
pageNumber = 1;
|
||||
int start = (pageNumber - 1) * pageRows;
|
||||
int stop = start + pageRows;
|
||||
stmt = getConn().prepareStatement(String.valueOf(s_Sql_Find) + String.valueOf(s_Sql_Find) + wc.toString() + " limit " + String.valueOf(s_Sql_Order) + "," + start);
|
||||
}
|
||||
Vectumerator<FotoVision> vec = findRows(stmt, 1, pageRows);
|
||||
vec.setPageNumber(pageNumber);
|
||||
vec.setTotNumberOfRecords(findByCRTotRecord(CR));
|
||||
return vec;
|
||||
} catch (SQLException e) {
|
||||
handleDebug(e);
|
||||
return AB_EMPTY_VECTUMERATOR;
|
||||
}
|
||||
}
|
||||
|
||||
protected void findByCRCreateWC(FotoCR CR, StringBuffer s_Sql_Find, WcString wc) {
|
||||
if (CR.getId_evento() != 0L)
|
||||
wc.addWc("A.id_evento=" + CR.getId_evento());
|
||||
if (CR.getId_fotoS() != 0L)
|
||||
wc.addWc("A.id_foto=" + CR.getId_fotoS());
|
||||
if (CR.getFlgConPettorali() == 1L)
|
||||
wc.addWc("A.pettorali is not null");
|
||||
if (CR.getId_puntoFoto() != 0L)
|
||||
wc.addWc("A.id_puntoFoto=" + CR.getId_puntoFoto());
|
||||
if (!CR.getFileName().isEmpty())
|
||||
wc.addWc("A.fileName like '%" + CR.getFileName() + "%'");
|
||||
if (CR.getFlgIndicizzate() == 0L) {
|
||||
wc.addWc("(A.pettorali is null or length(A.pettorali)=0)");
|
||||
} else if (CR.getFlgIndicizzate() == 1L) {
|
||||
wc.addWc("(A.pettorali is not null or length(A.pettorali)>0)");
|
||||
}
|
||||
if (CR.getFlgVideo() == 0L) {
|
||||
wc.addWc("(A.flgVideo is null or A.flgVideo=0)");
|
||||
} else if (CR.getFlgVideo() == 1L) {
|
||||
wc.addWc("A.flgVideo=1");
|
||||
}
|
||||
if (!CR.getPettorale().isEmpty())
|
||||
wc.addWc("A.pettorali like'%," + CR.getPettorale() + ",%'");
|
||||
}
|
||||
|
||||
public Vectumerator<FotoVision> findByCRFotoSelfie(FotoCR CR, int pageNumber, int pageRows) {
|
||||
if (CR.getFotoSelfie() == null)
|
||||
return findByCR(CR, pageNumber, pageRows);
|
||||
String s_Sql_Find1 = "select C.cosineSim , A.* from FOTO AS A inner join FOTO_FACE AS B ON A.id_foto=B.id_foto inner join FACE_RECOG AS C ON C.id_fotoFace2 = B.id_fotoFace inner join FOTO_FACE AS S ON S.id_fotoFace=C.id_fotoFace1";
|
||||
String s_Sql_Find2 = "select C.cosineSim ,A.* from FOTO AS A inner join FOTO_FACE AS B ON A.id_foto=B.id_foto inner join FACE_RECOG AS C ON C.id_fotoFace2 = B.id_fotoFace";
|
||||
String s_Sql_Order = " order by C.cosineSim DESC ";
|
||||
if ((pageNumber == 0 && pageRows == 0) || pageRows == 999)
|
||||
s_Sql_Order = " order by rand() ";
|
||||
WcString wc = new WcString();
|
||||
if (CR.getId_evento() != 0L)
|
||||
wc.addWc("A.id_evento=" + CR.getId_evento());
|
||||
if (CR.getId_puntoFoto() != 0L)
|
||||
wc.addWc("A.id_puntoFoto=" + CR.getId_puntoFoto());
|
||||
if (!CR.getFileName().isEmpty())
|
||||
wc.addWc("A.fileName like '%" + CR.getFileName() + "%'");
|
||||
String l_pettorale = "";
|
||||
if (!CR.getPettorale().isEmpty())
|
||||
l_pettorale = CR.getPettorale();
|
||||
if (!l_pettorale.isEmpty())
|
||||
wc.addWc("A.pettorali like'%," + l_pettorale + ",%'");
|
||||
if (CR.getFlgVideo() == 0L) {
|
||||
wc.addWc("(A.flgVideo is null or A.flgVideo=0)");
|
||||
} else if (CR.getFlgVideo() == 1L) {
|
||||
wc.addWc("A.flgVideo=1");
|
||||
}
|
||||
wc.addWc("S.id_foto=" + CR.getFotoSelfie().getId_foto());
|
||||
double csim = CR.getPercIdx1() / 100.0D;
|
||||
wc.addWc("C.cosineSim>=" + csim);
|
||||
System.out.println(s_Sql_Find1 + s_Sql_Find1 + wc.toString());
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find1 + s_Sql_Find1 + wc.toString());
|
||||
return findRows(stmt, pageNumber, pageRows);
|
||||
} catch (SQLException e) {
|
||||
handleDebug(e);
|
||||
return AB_EMPTY_VECTUMERATOR;
|
||||
}
|
||||
}
|
||||
|
||||
protected int findByCRTotRecord(FotoCR CR) {
|
||||
StringBuffer s_Sql_Find = new StringBuffer("select count(A.id_foto) as tot from FOTO AS A");
|
||||
WcString wc = new WcString();
|
||||
findByCRCreateWC(CR, s_Sql_Find, wc);
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(String.valueOf(s_Sql_Find) + String.valueOf(s_Sql_Find));
|
||||
return (int)getTots(stmt);
|
||||
} catch (Exception e) {
|
||||
handleDebug(e);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public Vectumerator<FotoVision> findByPettoraliCR(FotoCR CR, int pageNumber, int pageRows) {
|
||||
String s_Sql_Find = "select A.* from FOTO AS A";
|
||||
String s_Sql_Order = " order by A.fileName ";
|
||||
if ((pageNumber == 0 && pageRows == 0) || pageRows == 999)
|
||||
s_Sql_Order = " order by rand() ";
|
||||
WcString wc = new WcString();
|
||||
if (CR.getId_puntoFoto() == 0L) {
|
||||
s_Sql_Find = s_Sql_Find + ", PUNTO_FOTO AS B";
|
||||
wc.addWc("A.id_puntoFoto=B.id_puntoFoto");
|
||||
}
|
||||
if (CR.getId_evento() != 0L)
|
||||
wc.addWc("A.id_evento=" + CR.getId_evento());
|
||||
if (CR.getId_puntoFoto() != 0L)
|
||||
wc.addWc("A.id_puntoFoto=" + CR.getId_puntoFoto());
|
||||
if (!CR.getFileName().isEmpty())
|
||||
wc.addWc("A.fileName like '%" + CR.getFileName() + "%'");
|
||||
String l_pettorale = "";
|
||||
if (!CR.getPettorale().isEmpty())
|
||||
l_pettorale = CR.getPettorale();
|
||||
if (!l_pettorale.isEmpty())
|
||||
wc.addWc("A.pettorali like'%," + l_pettorale + ",%'");
|
||||
if (CR.getFlgVideo() == 0L) {
|
||||
wc.addWc("(A.flgVideo is null or A.flgVideo=0)");
|
||||
} else if (CR.getFlgVideo() == 1L) {
|
||||
wc.addWc("A.flgVideo=1");
|
||||
}
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find + wc.toString());
|
||||
return findRows(stmt, pageNumber, pageRows);
|
||||
} catch (SQLException e) {
|
||||
handleDebug(e);
|
||||
return AB_EMPTY_VECTUMERATOR;
|
||||
}
|
||||
}
|
||||
|
||||
public String getFotoFaceRowid() {
|
||||
return (this.fotoFaceRowid == null) ? "" : this.fotoFaceRowid.trim();
|
||||
}
|
||||
|
||||
public void setFotoFaceRowid(String fotoFaceRowid) {
|
||||
this.fotoFaceRowid = fotoFaceRowid;
|
||||
}
|
||||
|
||||
public ResParm _ricalcolaFotoFacesSelfie() {
|
||||
ResParm rp = new ResParm();
|
||||
Vectumerator<FotoVision> vec = findSelfies(0L);
|
||||
StringBuilder sb = new StringBuilder("N. Tot Selfie:" + vec.getTotNumberOfRecords() + "<br>");
|
||||
while (vec.hasMoreElements()) {
|
||||
FotoVision row = (FotoVision)vec.nextElement();
|
||||
FotoVision foto = new FotoVision(getApFull());
|
||||
foto.setId_foto(row.getId_foto());
|
||||
rp = foto._ricalcolaFotoFaces();
|
||||
if (!rp.getMsg().isEmpty())
|
||||
sb.append(rp.getMsg());
|
||||
}
|
||||
rp.setMsg(sb.toString());
|
||||
return rp;
|
||||
}
|
||||
|
||||
public Vectumerator<FotoVision> findSelfies(long ggGreaterThan) {
|
||||
String s_Sql_Find = "select A.* from FOTO AS A";
|
||||
String s_Sql_Order = "";
|
||||
WcString wc = new WcString();
|
||||
wc.addWc("A.flgFotoSearch=1");
|
||||
try {
|
||||
PreparedStatement stmt = getConn().prepareStatement(s_Sql_Find + s_Sql_Find + wc.toString());
|
||||
return findRows(stmt);
|
||||
} catch (SQLException e) {
|
||||
handleDebug(e);
|
||||
return AB_EMPTY_VECTUMERATOR;
|
||||
}
|
||||
}
|
||||
|
||||
public ResParm updatePettoraliByLabel() {
|
||||
ResParm rp = new ResParm();
|
||||
if (getId_foto() > 0L) {
|
||||
FotoFace ff = new FotoFace(getApFull());
|
||||
Vectumerator<FotoFace> vec = ff.findByFotoConPettorale(getId_foto());
|
||||
StringBuilder sb = new StringBuilder(",");
|
||||
while (vec.hasMoreElements()) {
|
||||
FotoFace row = (FotoFace)vec.nextElement();
|
||||
sb.append(row.getPettorale());
|
||||
sb.append(",");
|
||||
}
|
||||
setPettorali(sb.toString());
|
||||
rp = save();
|
||||
}
|
||||
return rp;
|
||||
}
|
||||
|
||||
protected void fillFields(ResultSet rst) {
|
||||
super.fillFields(rst);
|
||||
}
|
||||
|
||||
public ResParm save() {
|
||||
ResParm rp = super.save();
|
||||
return rp;
|
||||
}
|
||||
|
||||
protected void initFields() {
|
||||
super.initFields();
|
||||
}
|
||||
|
||||
public static final ResParm loadFacesByFaceRecognitionJson(FotoI foto, JSONObject jo) {
|
||||
ResParm rp = new ResParm();
|
||||
if (foto.getId_foto() == 0L || foto.getApFull() == null) {
|
||||
rp.setStatus(false);
|
||||
rp.setMsg("Errore! Foto non valida..");
|
||||
}
|
||||
StringBuilder msg = new StringBuilder();
|
||||
FotoFace ff = new FotoFace(foto.getApFull());
|
||||
ff.deleteFotoFaceByFoto(foto.getId_foto(), true);
|
||||
JSONArray jaResponses = jo.getJSONArray("responses");
|
||||
boolean visiTrovati = false;
|
||||
for (int i = 0; i < jaResponses.length(); i++) {
|
||||
JSONObject joResponse = jaResponses.getJSONObject(i).getJSONObject("response");
|
||||
System.out.println(joResponse.toString(4));
|
||||
HashMap<Integer, Integer> hmNumbers = new HashMap<>();
|
||||
if (!joResponse.has("numbers"));
|
||||
JSONArray jaNumbers = joResponse.getJSONArray("numbers");
|
||||
for (int j = 0; j < jaNumbers.length(); j++) {
|
||||
JSONObject joNumber = jaNumbers.getJSONObject(j);
|
||||
hmNumbers.put(Integer.valueOf(joNumber.getInt("xCenter")), Integer.valueOf(joNumber.getInt("value")));
|
||||
}
|
||||
if (joResponse.has("faceAnnotations")) {
|
||||
visiTrovati = true;
|
||||
JSONArray jaFaceAnnotations = joResponse.getJSONArray("faceAnnotations");
|
||||
for (int k = 0; k < jaFaceAnnotations.length(); k++) {
|
||||
JSONObject joFaceAnnotation = jaFaceAnnotations.getJSONObject(k);
|
||||
ff = new FotoFace(foto.getApFull());
|
||||
ff.setId_foto(foto.getId_foto());
|
||||
JSONObject joFace = new JSONObject();
|
||||
JSONObject joFdBoundingPoly = joFaceAnnotation.getJSONObject("fdBoundingPoly");
|
||||
joFace.put("fdBoundingPoly", joFdBoundingPoly);
|
||||
for (Map.Entry<Integer, Integer> entry : hmNumbers.entrySet())
|
||||
System.out.println("Key : " + String.valueOf(entry.getKey()) + " Value : " + String.valueOf(entry.getValue()));
|
||||
rp = ff.save();
|
||||
if (!rp.getStatus())
|
||||
msg.append("Errore: impossibile caricare fotoface da json per foto id " + foto.getId_foto() + ": " + rp.getMsg() + "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!visiTrovati) {
|
||||
ff = new FotoFace(foto.getApFull());
|
||||
ff.setId_foto(foto.getId_foto());
|
||||
rp = ff.save();
|
||||
}
|
||||
if (rp.getStatus())
|
||||
if (foto.getMd5().isEmpty()) {
|
||||
foto.setMd5(DBAdapter.getFileMd5(foto.getFileNameFaceRecognition()));
|
||||
rp.append(foto.save());
|
||||
}
|
||||
if (msg.length() > 0) {
|
||||
rp.setStatus(false);
|
||||
rp.setMsg(msg.toString());
|
||||
}
|
||||
return rp;
|
||||
}
|
||||
|
||||
public static final ResParm loadFacesByGoogleVision(FotoI foto) {
|
||||
ResParm rp = new ResParm();
|
||||
if (foto.getId_foto() == 0L || foto.getApFull() == null) {
|
||||
rp.setStatus(false);
|
||||
rp.setMsg("Errore! Foto non valida");
|
||||
}
|
||||
if (!foto.hasFotoFaces()) {
|
||||
System.out.println("loadFacesByGoogleVision: " + foto.getId_foto() + " " + foto.getFileNameFaceRecognition());
|
||||
String GVA_KEY = foto.getParm("GOOGLE_API_KEY_VISION").getTesto();
|
||||
GoogleVisionApi gva = new GoogleVisionApi(GVA_KEY);
|
||||
GoogleVisionResult resF = gva.annotateFaces(foto.getFileNameFaceRecognition());
|
||||
if (resF.isOk())
|
||||
return loadFacesByGoogleVisionJson(foto, (JSONObject)resF.getResult());
|
||||
rp.setStatus(false);
|
||||
rp.setMsg(resF.getMsg());
|
||||
return rp;
|
||||
}
|
||||
System.out.println("loadFacesByGoogleVision solo ricalcolo: " + foto.getId_foto() + " " + foto.getFileNameFaceRecognition());
|
||||
foto._ricalcolaFotoFaces();
|
||||
rp.setStatus(true);
|
||||
rp.setMsg("Ricalcolo effettuato ");
|
||||
return rp;
|
||||
}
|
||||
|
||||
public long getNumOfFaces() {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public long getHeight() {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public long getWidth() {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public long getMargineFotoBottom() {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public long getMargineFotoTop() {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public long getMargineFotoSx() {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public long getMargineFotoDx() {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public long getDimMinFotoFaceReal() {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public FaceDetectionMethod getFaceDetectionMethodReal() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public double getDetectFaceConfidentThresold() {
|
||||
return 0.9D;
|
||||
}
|
||||
|
||||
public void setId_faceDetectionMethod(long l_id_faceDetectionMethod) {}
|
||||
|
||||
public long getId_faceDetectionMethod() {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public long getFaceSize() {
|
||||
return getEvento().getFaceRecognizer().getFaceSize();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue