public Emocion getEmocion() { Map<Emocion, Integer> emociones = new HashMap<>(); // Las fotos son una lista obtenida de mongo, son las ultimas fotografias del usuario sin // procesar BitacoraFotografia bitacoraFotografia = new BitacoraFotografia(); List<DBObject> fotos = new BitacoraFotografia().obtenerFotografiasSinProcesar(idUsuario); for (int index = 0; index < fotos.size(); index++) { try { Emocion emocion = Emocion.NEUTRAL; boolean emocionEncontrada = true; DBObject foto = fotos.get(index); String datos = foto.get("fotografia").toString(); BufferedImage image = ImageHelper.decodeToImage(datos); // javax.imageio.ImageIO.write(image, "jpg", java.io.File.createTempFile("img", ".jpg", new // java.io.File("D:/imagenes"))); if (image != null) { System.out.println("Se decodifico de base64 a imagebuffer"); switch (detector) { case "indico": System.out.println("Se llama a detector indico"); emocion = new ExtractEmotionIndico().processData(image); System.out.println("Rostro procesado, indico: " + emocion); break; case "oxford": System.out.println("Se llama a detector de oxford"); emocion = new ExtractEmotionMicrosoft().processData(image); System.out.println("Rostro procesado, oxford"); break; case "neuroph": RecognitionResult result = new RecognitionFace().processFace(image); if (result.isHayEmocion()) { // Si hay una emocion se ejecuta la red neuronal, en caso // contrario se desecha System.out.println("Se encontro un rostro, opencv"); emocion = new ExtractEmotionNeuroph().processData(result.getCoordenadas()); System.out.println("Emocion procesada: NeuroPH"); } else { emocionEncontrada = false; } break; case "lbppython": default: System.out.println("Se llama a detector lbp python"); emocion = new ExtractEmotionPythonLBP().processData(image); System.out.println("Rostro procesado, lbppython: " + emocion); break; } } if (emocionEncontrada) bitacoraFotografia.categorizarFotografia( new ObjectId(foto.get("_id").toString()), emocion.toString(), detector); if (emociones.containsKey(emocion)) { emociones.put(emocion, emociones.get(emocion) + 1); } else { emociones.put(emocion, 1); } } catch (Exception ex) { Logger.getLogger(RecognitionEmotionalFace.class.getName()).log(Level.SEVERE, null, ex); } } return findEmotion(emociones); }
public String getEmocionSinProcesar(String fotografia) { BufferedImage image = ImageHelper.decodeToImage(fotografia); return new ExtractEmotionPythonLBP().processDataString(image); }