From fdb9c47557e5fcb2b3d501b57daa2f72507ad4f5 Mon Sep 17 00:00:00 2001
From: Aylen Ricca <aricca@fing.edu.uy>
Date: Fri, 25 Jul 2014 01:58:20 -0300
Subject: [PATCH] fixed estados & thresholds

---
 .../chesstrack/modulomodelador/Modelador.java | 11 ++++++++-
 .../modulovision/DetectorOclusion.java        | 24 +++++++++++++++----
 .../fing/chesstrack/modulovision/Manager.java | 11 +++++----
 3 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java
index 993ed92..fb1da06 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java
@@ -16,7 +16,7 @@ public class Modelador {
 	private static final String TAG = "CHESSTRACK::Modelador";
 	private final int CANT_FILAS = 8;
 	private final int CANT_SCAQUE = CANT_FILAS * CANT_FILAS;
-	private final int MIN_CANT_PIX_WHITE = 50;
+	private final int MIN_CANT_PIX_WHITE = 30;
 	private Mat tablero;
 	// se cuentan de arrib a abajo y de izquierda a derecha
 	private final Mat[][] escaques;
@@ -140,6 +140,7 @@ public class Modelador {
 		Mat mIntermediateMat = new Mat();
 		int pos_x = 0;
 		int pos_y = 0;
+		Log.i(TAG, "cant_pix_INI");
 		for (int i = 0; i < CANT_FILAS; i++) {
 			for (int j = 0; j < CANT_FILAS; j++) {
 				pos_x = (int) (escaques[i][j].size().width * i);
@@ -153,6 +154,10 @@ public class Modelador {
 				Core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 10, 0);
 				Imgproc.threshold(mIntermediateMat, mIntermediateMat, 70, 255,
 						Imgproc.THRESH_BINARY);
+				
+				Imgproc.erode(mIntermediateMat, mIntermediateMat, Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(1, 1)));
+				Imgproc.dilate(mIntermediateMat, mIntermediateMat, Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(1, 1)));
+				
 				int cant_pix = mIntermediateMat.cols()
 						* mIntermediateMat.rows();
 				int cant_pix_white = Core.countNonZero(mIntermediateMat);
@@ -167,6 +172,9 @@ public class Modelador {
 					}
 					break;
 				case 2:
+					if (cant_pix_white > (MIN_CANT_PIX_WHITE)) {
+						Log.i(TAG, "NUEVA FICHA" + (i+1) + "-" + (j+1));
+					}
 					Imgproc.cvtColor(mIntermediateMat, subm, Imgproc.COLOR_GRAY2RGBA, 4);
 					break;
 				default:
@@ -176,6 +184,7 @@ public class Modelador {
 				}
 			}
 		}
+		Log.i(TAG, "cant_pix_FIN");
 		return tmp;
 	}
 
diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/DetectorOclusion.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/DetectorOclusion.java
index 3caca7e..daa47d2 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/DetectorOclusion.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/DetectorOclusion.java
@@ -16,6 +16,7 @@ public class DetectorOclusion {
 	private static final int OCLUSION = 0;
 	private static final int ESTABLE = 1;
 	private static final int TRANSICION = 2;
+	private static final int ENVIAR_TABLERO = 3;
 	private static final int START = -1;
 
 	private Mat _fgMaskMOG2;
@@ -38,6 +39,14 @@ public class DetectorOclusion {
 		Log.i(TAG, "constructor FIN");
 	}
 
+	public Mat get_resultado() {
+		return _resultado;
+	}
+
+	public void set_resultado(Mat _resultado) {
+		this._resultado = _resultado;
+	}
+
 	public boolean hayNuevoTableroValido(Mat inputFrame) {
 		Log.i(TAG, "Procesar!");
 
@@ -59,30 +68,35 @@ public class DetectorOclusion {
 
 		_estadoANTERIOR = _estadoACTUAL;
 		if (suma.val[0] > 1250000) {
-			Log.i(TAG, "MANO !!!");
+			Log.i(TAG, "VEO MANO !!!");
 
 			_estadoACTUAL = OCLUSION;
 			/*Core.putText(_fgMaskMOG2, "MANO !!!", new Point(20, 20),
 					Core.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar(255, 255, 0));*/
 
 		} else {
-			Log.i(TAG, "ESTABLE !!!");
 			if (_estadoANTERIOR == OCLUSION) {
 				/*Core.putText(_fgMaskMOG2, "TRANSI !!!", new Point(20, 20),
 						Core.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar(255, 255, 0));*/
+				Log.i(TAG, "VEO TRANSICION !!!");
 				_estadoACTUAL = TRANSICION;
 			}
 			if (_estadoANTERIOR == TRANSICION) {
 				/*Core.putText(_fgMaskMOG2, "ESTABLE !!!", new Point(20, 20),
 						Core.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar(255, 255, 0));*/
-				_estadoACTUAL = ESTABLE;
+				_estadoACTUAL = ENVIAR_TABLERO;
 				_pMOG2 = new BackgroundSubtractorMOG2(); // MOG2 approach
+				Log.i(TAG, "VEO ENVIAR !!!");
+			}
+			if (_estadoANTERIOR == ENVIAR_TABLERO){
+				_estadoACTUAL = ESTABLE;
+				Log.i(TAG, "VEO ESTABLE !!!");
 			}
 		}
 
 		Log.i(TAG, "END");
-		//Imgproc.cvtColor(_fgMaskMOG2, _resultado, Imgproc.COLOR_GRAY2RGBA, 4);
-		return (_estadoACTUAL == ESTABLE);
+		Imgproc.cvtColor(_fgMaskMOG2, _resultado, Imgproc.COLOR_GRAY2RGBA, 4);
+		return (_estadoACTUAL == ENVIAR_TABLERO);
 	}
 }
 
diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java
index c0a8d11..40e50b3 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java
@@ -21,7 +21,7 @@ public class Manager {
 			+ "--------------------------------------------------------------------------\n"
 			+ "  .:: CHESSTRACK ::. seguimiento de una partida de Ajedrez\n"
 			+ "\n"
-			+ "                                           					 TImag 2014\n"
+			+ "                                                              TImag 2014\n"
 			+ "                                           Nicolas Furquez - Aylen Ricca\n"
 			+ "--------------------------------------------------------------------------\n";
 
@@ -110,8 +110,8 @@ public class Manager {
 			break;
 		case JUGANDO:
 			Log.i(TAG, "Jugando");
-			if (_detectorOclusion.hayNuevoTableroValido(region)) {
-				Log.i(TAG, "Tablero Valido\n");
+			//if (_detectorOclusion.hayNuevoTableroValido(region)) {
+				Log.i(TAG, "Tablero Valido");
 				// llamar al modelador
 				Mat aux = _modelador.getMatrizFichas(region);
 				Log.i(TAG, "MATRIZ=" + aux.dump());
@@ -119,13 +119,14 @@ public class Manager {
 
 				if (_salida == OK) {
 					_client.SendData("Nuevo Tablero Valido!\n");
-					_client.SendData(aux.dump().concat("\n"));
+					_client.SendData(" ".concat(aux.dump().concat("\n")));
 				}
-			}
+			//}
 			break;
 		}
 
 		if (_debug) {
+			Log.i(TAG, "DEBUG");
 			Mat tmp = Mat.zeros(inputFrame.size(), CvType.CV_8UC4);
 			Mat matTMP = tmp.submat(Calibracion.getRectROI());
 			region.copyTo(matTMP);
-- 
GitLab