diff --git a/ProyectoAndroid/ChessTrack/bin/AndroidManifest.xml b/ProyectoAndroid/ChessTrack/bin/AndroidManifest.xml deleted file mode 100644 index ec4ede675a0383c7122aaaf4a7ddd40d99822091..0000000000000000000000000000000000000000 --- a/ProyectoAndroid/ChessTrack/bin/AndroidManifest.xml +++ /dev/null @@ -1,53 +0,0 @@ -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="uy.edu.fing.chesstrack" - android:versionCode="1" - android:versionName="1.0" > - - - -<!-- <application --> -<!-- android:allowBackup="true" --> -<!-- android:icon="@drawable/ic_launcher" --> -<!-- android:label="@string/app_name" --> -<!-- android:theme="@style/AppTheme" > --> -<!-- </application> --> - - - - <application - android:allowBackup="true" - android:label="@string/app_name" - android:icon="@drawable/ic_launcher" - android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > - - <activity android:name="ChessTrackActivity" - android:label="@string/app_name" - android:screenOrientation="landscape" - android:configChanges="keyboardHidden|orientation"> - <intent-filter> - <action android:name="android.intent.action.MAIN" /> - <category android:name="android.intent.category.LAUNCHER" /> - </intent-filter> - </activity> - </application> - - - - <supports-screens android:resizeable="true" - android:smallScreens="true" - android:normalScreens="true" - android:largeScreens="true" - android:anyDensity="true" /> - - - <uses-sdk - android:minSdkVersion="9" - android:targetSdkVersion="10" /> - - <uses-permission android:name="android.permission.CAMERA"/> - - <uses-feature android:name="android.hardware.camera" android:required="false"/> - <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> - <uses-feature android:name="android.hardware.camera.front" android:required="false"/> - <uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/> -</manifest> diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java index 13aa38ac6dcc49b504d4189a7ac14e52df2f70ac..940c5f4a1fad9bb4bd30764f2c359bcebaaf906b 100644 --- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java +++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java @@ -1,6 +1,5 @@ package uy.edu.fing.chesstrack; - import org.opencv.android.BaseLoaderCallback; import org.opencv.android.CameraBridgeViewBase; import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener; @@ -8,6 +7,7 @@ import org.opencv.android.JavaCameraView; import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.OpenCVLoader; import org.opencv.core.Mat; + import uy.edu.fing.chesstrack.communication.Client; import uy.edu.fing.chesstrack.modulomodelador.Modelador; import uy.edu.fing.chesstrack.modulovision.Adquisicion; @@ -27,11 +27,12 @@ import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; -public class ChessTrackActivity extends Activity implements CvCameraViewListener { +public class ChessTrackActivity extends Activity implements +CvCameraViewListener { private static final String TAG = "CHESSTRACK::Activity"; - private static final String IPV4_REGEX ="^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$"; - private static final String PORT_REGEX ="^(\\d{4,5})$"; + private static final String IPV4_REGEX = "^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$"; + private static final String PORT_REGEX = "^(\\d{4,5})$"; private static final String welcomeMSG = "" + "--------------------------------------------------------------------------\n" + " .:: CHESSTRACK ::. seguimiento de una partida de Ajedrez\n" @@ -40,41 +41,42 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener + "--------------------------------------------------------------------------\n"; private CameraBridgeViewBase mOpenCvCameraView; - //private JavaCameraView mOpenCvCameraView; + // private JavaCameraView mOpenCvCameraView; private Adquisicion adq; private Calibracion calibrar; private Button btnCalibrar; private Client ClientCommunication; private MenuItem mItemCalibrar; - //TODO es chancho pero ver luego + private MenuItem mItemServer; + // TODO es chancho pero ver luego private Mat frame; private boolean isUsed; - private boolean isCalibrada ; + private boolean isCalibrada; - private final BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { + private final BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback( + this) { @Override public void onManagerConnected(int status) { switch (status) { - case LoaderCallbackInterface.SUCCESS: - { + case LoaderCallbackInterface.SUCCESS: { Log.i(TAG, "OpenCV loaded successfully"); mOpenCvCameraView.enableView(); - } break; - default: - { + } + break; + default: { super.onManagerConnected(status); - } break; + } + break; } } }; - @Override - public void onResume() - { + public void onResume() { super.onResume(); - OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback); + OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, + mLoaderCallback); } @Override @@ -90,16 +92,16 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener Modelador.getInstance(); try { isUsed = false; - isCalibrada =false; + isCalibrada = false; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } - getServerIp(); + // getServerIp(); } - public void getServerIp(){ + public void getServerIp() { AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle("Communication Setup"); alert.setMessage("Set server ip"); @@ -108,32 +110,32 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener alert.setView(input); alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { + @Override public void onClick(DialogInterface dialog, int whichButton) { Editable value = input.getText(); if (value == null || value.toString().equals("") || !value.toString().matches(IPV4_REGEX)) { - Log.i(TAG,"INPUT= not valid IP" + value.toString()); + Log.i(TAG, "INPUT= not valid IP" + value.toString()); getServerIp(); } else { - Log.i(TAG,"INPUT=" + value.toString()); - - Log.i(TAG,"IP=" + value.toString()); + Log.i(TAG, "INPUT=" + value.toString()); + + Log.i(TAG, "IP=" + value.toString()); getServerPort(value.toString()); } - } + } }); /* - alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - // no server communication -- FIXME do not send info to client - } - }); - */ + * alert.setNegativeButton("Cancel", new + * DialogInterface.OnClickListener() { public void + * onClick(DialogInterface dialog, int whichButton) { // no server + * communication -- FIXME do not send info to client } }); + */ alert.show(); } - - public void getServerPort(final String ip){ + + public void getServerPort(final String ip) { AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle("Communication Setup"); alert.setMessage("Set server port"); @@ -142,30 +144,34 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener alert.setView(input); alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { + @Override public void onClick(DialogInterface dialog, int whichButton) { Editable value = input.getText(); - Log.i(TAG,"INPUT=" + value.toString()); - if (value == null || value.toString().equals("") || !value.toString().matches(PORT_REGEX)) { - Log.i(TAG,"INPUT= not valid PORT" + value.toString()); + Log.i(TAG, "INPUT=" + value.toString()); + if (value == null || value.toString().equals("") + || !value.toString().matches(PORT_REGEX)) { + Log.i(TAG, "INPUT= not valid PORT" + value.toString()); getServerPort(ip); } else { - Log.i(TAG,"INPUT=" + value.toString()); + Log.i(TAG, "INPUT=" + value.toString()); int port = Integer.parseInt(value.toString()); - Log.i(TAG,"PORT=" + port); - //ClientCommunication = Client.getInstance(); - //ClientCommunication.EstablishConnection(ip, port); - //ClientCommunication.SendData(welcomeMSG); + Log.i(TAG, "PORT=" + port); + // ClientCommunication = Client.getInstance(); + // ClientCommunication.EstablishConnection(ip, port); + // ClientCommunication.SendData(welcomeMSG); } - } + } }); - + alert.show(); } + @Override public boolean onCreateOptionsMenu(Menu menu) { Log.i(TAG, "called onCreateOptionsMenu"); - mItemCalibrar = menu.add("Show/hide tile numbers"); + mItemCalibrar = menu.add("Calibrar.."); + mItemServer = menu.add("Conectar Server"); return true; } @@ -175,11 +181,13 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener Log.i(TAG, "Menu Item selected " + item); if (item == mItemCalibrar) { isUsed = true; - if(frame!=null){ - if (Calibracion.getInstance().calibrar(frame)){ + if (frame != null) { + if (Calibracion.getInstance().calibrar(frame)) { - ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50); - toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // 200 is duration in ms + ToneGenerator toneG = new ToneGenerator( + AudioManager.STREAM_ALARM, 50); + toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, + 200); // 200 is duration in ms try { adq = new Adquisicion(); } catch (Exception e) { @@ -187,20 +195,22 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener e.printStackTrace(); } isCalibrada = true; - }else{ - ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50); - toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 700); // 200 is duration in ms + } else { + ToneGenerator toneG = new ToneGenerator( + AudioManager.STREAM_ALARM, 50); + toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, + 700); // 200 is duration in ms } } isUsed = false; + }else if(item == mItemServer){ + getServerIp(); } return true; } - @Override - public void onPause() - { + public void onPause() { super.onPause(); if (mOpenCvCameraView != null) { mOpenCvCameraView.disableView(); @@ -229,18 +239,18 @@ public class ChessTrackActivity extends Activity implements CvCameraViewListener @Override public Mat onCameraFrame(Mat inputFrame) { // TODO MANEJAR ESTADOS - if (!isUsed){ + if (!isUsed) { frame = inputFrame; } - if(isCalibrada){ + if (isCalibrada) { Log.i(TAG, "calibrada"); inputFrame = adq.processFrame(inputFrame); Modelador.getInstance().dividirTablero(inputFrame); - return Modelador.getInstance().dibujarEscaque(); - //return inputFrame; + return Modelador.getInstance().dibujarEscaquesSobel(); + // return inputFrame; } return inputFrame; 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 a4837777901b0fa282998a83f98067238ecd51c3..a7b920bae8b7f909bd57367ca75e6adac3828142 100644 --- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java +++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java @@ -6,6 +6,7 @@ import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Scalar; +import org.opencv.imgproc.Imgproc; import uy.edu.fing.chesstrack.modulovision.Calibracion; import android.util.Log; @@ -35,6 +36,7 @@ public class Modelador { } public void dividirTablero(Mat inputFrame){ + Rect roi = Calibracion.getInstance().getRectPOI(); Mat proccesFrame = inputFrame.submat(roi); int largo = proccesFrame.rows(); @@ -73,4 +75,60 @@ public class Modelador { return tmp; } + public Mat dibujarEscaquesCanny(){ + Mat tmp = Mat.zeros(Calibracion.getInstance().getImagenCalibrada().size(), CvType.CV_8UC4); + Mat subm ; //tmp.submat(new Rect(new Point(0,0) ,escaques[i][j].size())); + //escaques[i][j].copyTo(subm); + Mat mIntermediateMat = new Mat(); + int pos_x = 0; + int pos_y = 0; + 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); + pos_y = (int) (escaques[i][j].size().height*j); + subm = tmp.submat(new Rect(new Point(pos_x,pos_y) ,escaques[i][j].size())); + + Imgproc.Canny(escaques[i][j], mIntermediateMat, 80, 90); + Imgproc.cvtColor(mIntermediateMat, subm, Imgproc.COLOR_GRAY2RGBA,4); + + // escaques[i][j].copyTo(subm); + // Core.putText(tmp, Integer.toString(i)+ "-" +Integer.toString(j), new Point(pos_x+1, pos_y+1),Core.FONT_HERSHEY_SIMPLEX, 0.3 , new Scalar(255,0,0)); + } + } + return tmp; + } + + public Mat dibujarEscaquesSobel(){ + Mat tmp = Mat.zeros(Calibracion.getInstance().getImagenCalibrada().size(), CvType.CV_8UC4); + Mat subm ; //tmp.submat(new Rect(new Point(0,0) ,escaques[i][j].size())); + //escaques[i][j].copyTo(subm); + Mat mIntermediateMat = new Mat(); + int pos_x = 0; + int pos_y = 0; + 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); + pos_y = (int) (escaques[i][j].size().height*j); + subm = tmp.submat(new Rect(new Point(pos_x,pos_y) ,escaques[i][j].size())); + Imgproc.cvtColor(escaques[i][j] ,mIntermediateMat, Imgproc.COLOR_RGBA2GRAY,4); + Imgproc.Sobel(mIntermediateMat, mIntermediateMat, CvType.CV_8U, 1, 1); + Core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 10, 0); + Imgproc.threshold(mIntermediateMat, mIntermediateMat, 70, 255, Imgproc.THRESH_BINARY); + int cant_pix = mIntermediateMat.cols()*mIntermediateMat.rows(); + int cant_pix_white = Core.countNonZero(mIntermediateMat); + Log.i(TAG, "cant_pix=" + cant_pix); + Log.i(TAG, "cant_pix_white=" + cant_pix_white); + + if (cant_pix_white > (50) ){ + Imgproc.cvtColor(mIntermediateMat, subm, Imgproc.COLOR_GRAY2RGBA,4); + }else{ + escaques[i][j].copyTo(subm); + } + + } + } + return tmp; + } + + }