Skip to content
Snippets Groups Projects
Commit 71ca961f authored by Aylen Ricca's avatar Aylen Ricca
Browse files

version beta -harcoded parametros

parent fc521aa4
No related branches found
No related tags found
No related merge requests found
......@@ -92,6 +92,7 @@ public class ChessTrackActivity extends Activity implements
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
_manager.setConnection("192.168.1.101", 5555); //FIXME DELETE !!!!
Editable value = input.getText();
if (value == null || value.toString().equals("")
|| !value.toString().matches(IPV4_REGEX)) {
......
......@@ -13,8 +13,8 @@ public class Client {
private static Client _clientInstance;
private Socket serverSocket;
private int _serverPort;
private String _serverIp;
private int _serverPort = 5556;
private String _serverIp = "192.168.1.101";
//private BufferedReader input;
private DataOutputStream output;
......@@ -32,8 +32,8 @@ public class Client {
public void EstablishConnection(String serverIp, int serverPort) {
Log.i(TAG, "init client-server communication");
this._serverIp = serverIp;
this._serverPort = serverPort;
//this._serverIp = serverIp;
//this._serverPort = serverPort;
try {
Log.i(TAG, "Server on " + this._serverIp + ":" + _serverPort);
......
......@@ -22,7 +22,7 @@ public class Modelador {
//private static Modelador instance;
private Modelador(){
public Modelador(){
tablero = Mat.zeros(new Size(8, 8), CvType.CV_8UC1);
escaques = new Mat[CANT_FILAS][CANT_FILAS];
......@@ -140,7 +140,7 @@ public class Modelador {
if (cant_pix_white > (50) ){
Imgproc.cvtColor(mIntermediateMat, subm, Imgproc.COLOR_GRAY2RGBA,4);
}else{
escaques[i][j].copyTo(subm);
Imgproc.cvtColor(escaques[i][j], subm, Imgproc.COLOR_GRAY2RGBA,4);
}
}
......
......@@ -3,7 +3,6 @@ package uy.edu.fing.chesstrack.modulovision;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgproc.*;
......@@ -11,36 +10,35 @@ import org.opencv.video.BackgroundSubtractorMOG2;
import android.util.Log;
public class DetectorOclusion {
private static final String TAG = "CHESSTRACK::BackgroundSupress";
private static final int OCLUSION = 1;
private static final int ESTABLE = 2;
private static final int TRANSICION = 0;
private static final int OCLUSION = 0;
private static final int ESTABLE = 1;
private static final int TRANSICION = 2;
private static final int START = -1;
private Mat _fgMaskMOG2;
private Mat _resultado;
private BackgroundSubtractorMOG2 _pMOG2;
private final Mat _morphKernel;
private int _estadoANTERIOR;
private int _estadoACTUAL;
//private final List<MatOfPoint> contours;
public DetectorOclusion() {
super();
Log.i(TAG, "constructor INI");
_morphKernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3));
_fgMaskMOG2 = new Mat(4,1,CvType.CV_8UC1);
_morphKernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(3, 3));
_fgMaskMOG2 = new Mat(4, 1, CvType.CV_8UC1);
_pMOG2 = new BackgroundSubtractorMOG2();
_estadoACTUAL = START;
//contours = new ArrayList<MatOfPoint>();
_resultado = new Mat();
Log.i(TAG, "constructor FIN");
}
public Mat procesarImagen(Mat inputFrame) {
public boolean hayNuevoTableroValido(Mat inputFrame) {
Log.i(TAG, "Procesar!");
Log.i(TAG, "Region SIZE=" + inputFrame.size());
......@@ -49,76 +47,70 @@ public class DetectorOclusion {
Imgproc.erode(_fgMaskMOG2, _fgMaskMOG2, _morphKernel);
Log.i(TAG, "Apply erode");
Imgproc.threshold(_fgMaskMOG2, _fgMaskMOG2, 200, 255, Imgproc.THRESH_BINARY);
Imgproc.threshold(_fgMaskMOG2, _fgMaskMOG2, 200, 255,Imgproc.THRESH_BINARY);
Log.i(TAG, "Apply threshold");
//Imgproc.dilate(_fgMaskMOG2, _fgMaskMOG2, _morphKernel);
//Log.i(TAG, "Apply dilate");
// Imgproc.dilate(_fgMaskMOG2, _fgMaskMOG2, _morphKernel);
// Log.i(TAG, "Apply dilate");
Scalar suma = Core.sumElems(_fgMaskMOG2);
Log.i(TAG, "SUMA = " + suma);
_estadoANTERIOR = _estadoACTUAL;
if (suma.val[0] > 1250000){
if (suma.val[0] > 1250000) {
Log.i(TAG, "MANO !!!");
_estadoACTUAL = OCLUSION;
Core.putText(_fgMaskMOG2, "MANO !!!", new Point(20, 20),Core.FONT_HERSHEY_SIMPLEX, 0.8 , new Scalar(255,255,0));
_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));
_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;
_pMOG2 = new BackgroundSubtractorMOG2(); //MOG2 approach
}
}
/*double maxArea = 0;
MatOfPoint largestContour = null;
Imgproc.findContours(_fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_TC89_L1);
for (MatOfPoint contour : contours) {
double area = Imgproc.contourArea(contour);
if (area > maxArea) {
maxArea = area;
largestContour = contour;
}
if (_estadoANTERIOR == OCLUSION) {
/*Core.putText(_fgMaskMOG2, "TRANSI !!!", new Point(20, 20),
Core.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar(255, 255, 0));*/
_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;
_pMOG2 = new BackgroundSubtractorMOG2(); // MOG2 approach
}
}
Log.i(TAG, "ESTABLE !!!" + maxArea);
if ((largestContour != null) && (maxArea > 10000)){
Log.i(TAG, "MANO !!!" + maxArea);
Rect boundingRect = Imgproc.boundingRect(largestContour);
ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // 200 is duration in ms
}*/
/*Imgproc.findContours(_fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_NONE);
for(int idx = 0; idx < contours.size(); idx++)
{
double area = Imgproc.contourArea(contours.get(idx));
Log.i(TAG, "CONTOUR = AREA: " + area);
if ((area > 15000) && (area < 70000)){
Log.i(TAG, "DRAW !!! : " + area);
Scalar color = new Scalar(255,127,127);
Rect r = Imgproc.boundingRect(contours.get(idx));
Log.i(TAG, "3 at backgroundS "+(_fgMaskMOG2.type() == CvType.CV_8UC1));
Core.rectangle(_fgMaskMOG2, r.tl(), r.br(), color, 2, 8, 0);
//Imgproc.drawContours(_fgMaskMOG2, contours, idx, color);
}
}
contours.clear();*/
Log.i(TAG, "END");
Mat region = new Mat();
Imgproc.cvtColor(_fgMaskMOG2, region, Imgproc.COLOR_GRAY2RGBA,4);
return region;
//Imgproc.cvtColor(_fgMaskMOG2, _resultado, Imgproc.COLOR_GRAY2RGBA, 4);
return (_estadoACTUAL == ESTABLE);
}
}
/*
* double maxArea = 0; MatOfPoint largestContour = null;
* Imgproc.findContours(_fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST,
* Imgproc.CHAIN_APPROX_TC89_L1); for (MatOfPoint contour : contours) { double
* area = Imgproc.contourArea(contour); if (area > maxArea) { maxArea = area;
* largestContour = contour; } } Log.i(TAG, "ESTABLE !!!" + maxArea); if
* ((largestContour != null) && (maxArea > 10000)){ Log.i(TAG, "MANO !!!" +
* maxArea); Rect boundingRect = Imgproc.boundingRect(largestContour);
* ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
* toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // 200 is
* duration in ms }
*/
/*
* Imgproc.findContours(_fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST,
* Imgproc.CHAIN_APPROX_NONE);
*
* for(int idx = 0; idx < contours.size(); idx++) { double area =
* Imgproc.contourArea(contours.get(idx)); Log.i(TAG, "CONTOUR = AREA: " +
* area); if ((area > 15000) && (area < 70000)){ Log.i(TAG, "DRAW !!! : " +
* area); Scalar color = new Scalar(255,127,127); Rect r =
* Imgproc.boundingRect(contours.get(idx)); Log.i(TAG,
* "3 at backgroundS "+(_fgMaskMOG2.type() == CvType.CV_8UC1));
* Core.rectangle(_fgMaskMOG2, r.tl(), r.br(), color, 2, 8, 0);
* //Imgproc.drawContours(_fgMaskMOG2, contours, idx, color); } }
*
* contours.clear();
*/
\ No newline at end of file
......@@ -7,6 +7,7 @@ import android.media.AudioManager;
import android.media.ToneGenerator;
import android.util.Log;
import uy.edu.fing.chesstrack.communication.Client;
import uy.edu.fing.chesstrack.modulomodelador.Modelador;
public class Manager {
......@@ -29,10 +30,11 @@ public class Manager {
private static Adquisicion _adquisicion;
private static Client _client;
private static DetectorOclusion _detectorOclusion;
private static Modelador _modelador;
private boolean _debug;
protected Manager() {
_estado = ARMANDO_TABLERO;
_estado = JUGANDO;
_salida = NOT;
_adquisicion = null;
_client = null;
......@@ -62,12 +64,37 @@ public class Manager {
_salida = OK;
}
public boolean calibrar(Mat frame) {
Log.i(TAG, "Calibrando");
if (Calibracion.getInstance().calibrar(frame)) {
ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM,
50);
toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // ms
if (_salida == OK) {
_client.SendData("FIN calibrar\n . . . armando tablero!\n");
}
try {
_adquisicion = new Adquisicion();
_detectorOclusion = new DetectorOclusion();
_modelador = new Modelador();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
Log.i(TAG, "No calibrado");
ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 700);
return false;
}
public Mat processFrame(Mat inputFrame) {
Log.i(TAG, "Acondicionamiento");
Mat region = _adquisicion.processFrame(inputFrame);
Log.i(TAG, "TYPE=" + (inputFrame.type()==CvType.CV_8UC4));
Log.i(TAG, "CHANNEL=" + (inputFrame.channels()==4));
Log.i(TAG, "TYPE=" + (inputFrame.type() == CvType.CV_8UC4));
Log.i(TAG, "CHANNEL=" + (inputFrame.channels() == 4));
switch (_estado) {
case ARMANDO_TABLERO:
......@@ -78,52 +105,33 @@ public class Manager {
// Modelador -> genera la imagen 0-1 y se la pasa al manager
// Modelador.Validar
//
region = _detectorOclusion.procesarImagen(region);
// cuando paso a estado jugando mando al socket si salida==OK
break;
case JUGANDO:
Log.i(TAG, "Jugando");
// respuesta: {MANO - NO MANO}
// SI mano --> nada
// SINO matriz-0-1
// BackgoundSupress -> busca la mano y retorna si o no
// Modelador -> genera la imagen 0-1 y se la pasa al manager
// mando al cliente la MATRIZ !!
if (_detectorOclusion.hayNuevoTableroValido(region)) {
Log.i(TAG, "Tablero Valido\n");
// llamar al modelador
Mat aux = _modelador.getMatrizFichas(region);
Log.i(TAG, "MATRIZ=" + aux.dump());
region = _modelador.dibujarEscaquesSobel();
if (_salida == OK) {
_client.SendData("Nuevo Tablero Valido!\n");
_client.SendData(aux.dump().concat("\n"));
}
}
break;
}
if (_debug) {
Mat tmp = Mat.zeros(inputFrame.size(), CvType.CV_8UC4);
Mat matTMP = tmp.submat(Calibracion.getRectROI());
region.copyTo(matTMP);
return tmp;
}
return inputFrame;
}
public boolean calibrar(Mat frame) {
Log.i(TAG, "Calibrando");
if (Calibracion.getInstance().calibrar(frame)) {
ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM,
50);
toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // ms
if (_salida == OK) {
_client.SendData("FIN calibrar\n . . . armando tablero!");
}
try {
_adquisicion = new Adquisicion();
_detectorOclusion = new DetectorOclusion();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
Log.i(TAG, "No calibrado");
ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 700);
return false;
return inputFrame;
}
public void destroy() {
......
......@@ -75,12 +75,6 @@ public class Homografia implements ImgProcInterface {
// hace la homografia con la matriz calculada en un ppio
Imgproc.warpPerspective(inputFrame,inputFrame, _matrizTransformada, inputFrame.size());
// Mat subMat = inputFrame.submat(_rectROI);
// Mat tmp = Mat.zeros(inputFrame.size(), CvType.CV_8UC4);
// Mat matTMP = tmp.submat(_rectROI);
// subMat.copyTo(matTMP);
Mat tmp = Mat.zeros(_rectROI.size(), CvType.CV_8UC4);
(inputFrame.submat(_rectROI)).copyTo(tmp);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment