diff --git a/android/apps/Calibration/AndroidManifest.xml b/android/apps/Calibration/AndroidManifest.xml index 2933e8766c..295dc9d432 100644 --- a/android/apps/Calibration/AndroidManifest.xml +++ b/android/apps/Calibration/AndroidManifest.xml @@ -16,14 +16,22 @@ - - + + + + - + + - + diff --git a/android/apps/Calibration/README.txt b/android/apps/Calibration/README.txt new file mode 100644 index 0000000000..17e3222933 --- /dev/null +++ b/android/apps/Calibration/README.txt @@ -0,0 +1,10 @@ +to build completeley from command line: +sh project_create.sh +ant debug +ant install + +That assumes that you have already build the opencv/android/android-jni project + +If you're in eclipse, try to create a new android project from existing sources. +Make sure that you also have the android-jni project open in eclipse is this is the case +or the android library dependency will give you errors. \ No newline at end of file diff --git a/android/apps/Calibration/res/layout/camera.xml b/android/apps/Calibration/res/layout/camera.xml index 8e721d8dfc..35dc96f06c 100644 --- a/android/apps/Calibration/res/layout/camera.xml +++ b/android/apps/Calibration/res/layout/camera.xml @@ -1,58 +1,44 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/android/apps/Calibration/res/layout/chesssizer.xml b/android/apps/Calibration/res/layout/chesssizer.xml deleted file mode 100644 index b93bc0bdea..0000000000 --- a/android/apps/Calibration/res/layout/chesssizer.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/android/apps/Calibration/res/menu/calibrationmenu.xml b/android/apps/Calibration/res/menu/calibrationmenu.xml index 8dd345778b..c157df9223 100644 --- a/android/apps/Calibration/res/menu/calibrationmenu.xml +++ b/android/apps/Calibration/res/menu/calibrationmenu.xml @@ -1,17 +1,11 @@ - - - - + + + + + + + diff --git a/android/apps/Calibration/res/values/chessnumbers.xml b/android/apps/Calibration/res/values/chessnumbers.xml deleted file mode 100644 index f0db5693ea..0000000000 --- a/android/apps/Calibration/res/values/chessnumbers.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 - - -Choose the width: - -Choose the height: - diff --git a/android/apps/Calibration/res/values/strings.xml b/android/apps/Calibration/res/values/strings.xml index a33cf0b133..9e57fdef8c 100644 --- a/android/apps/Calibration/res/values/strings.xml +++ b/android/apps/Calibration/res/values/strings.xml @@ -1,24 +1,13 @@ - Calibration - Pattern Size - Please choose the width and height (number of inside corners) of the checker - board pattern you will be using for calibration. Default is 6 by 8 corners. You may find a checkerboard pattern at - http://opencv.willowgarage.com/pattern - - http://opencv.willowgarage.com/pattern - - /opencv/camera.yml + /opencv/camera.yml /opencv Calibration calculations have started... Calibration calculations has stopped. Calibration finished, you camera is calibrated. - Calibration - Please capture atleast 3 - preferably greater than 10 - images of the pattern! - - + Please capture atleast 10 images of the pattern! Please make sure that you\'re sdcard is not mounted to you\'re computer, and that you have an sdcard that is writable on your device. - + diff --git a/android/apps/Calibration/src/com/opencv/calibration/Calibration.java b/android/apps/Calibration/src/com/opencv/calibration/Calibration.java index 5c7abf3b00..ce9cd4c885 100644 --- a/android/apps/Calibration/src/com/opencv/calibration/Calibration.java +++ b/android/apps/Calibration/src/com/opencv/calibration/Calibration.java @@ -27,6 +27,7 @@ import android.widget.Toast; import com.opencv.calibration.Calibrator.CalibrationCallback; import com.opencv.calibration.services.CalibrationService; +import com.opencv.camera.CameraConfig; import com.opencv.camera.NativePreviewer; import com.opencv.camera.NativeProcessor; import com.opencv.misc.SDCardChecker; @@ -112,6 +113,11 @@ public class Calibration extends Activity implements CalibrationCallback { case R.id.calibrate: calibrate(); break; + case R.id.settings: + Intent configurer = new Intent(getApplicationContext(), + CameraConfig.class); + startActivity(configurer); + } return true; @@ -152,7 +158,7 @@ public class Calibration extends Activity implements CalibrationCallback { Calibrator tcalib = calibrator; calibrator = new Calibrator(Calibration.this); setCallbackStack(); - calibservice.startCalibrating(tcalib, calibfile); + calibservice.startCalibrating(Calibration.class, R.drawable.icon,tcalib, calibfile); } catch (IOException e) { e.printStackTrace(); } @@ -200,6 +206,8 @@ public class Calibration extends Activity implements CalibrationCallback { disableScreenTurnOff(); setContentView(R.layout.camera); mPreview = (NativePreviewer) findViewById(R.id.nativepreviewer); + mPreview.setPreviewSize(1000, 500); + mPreview.setGrayscale(true); LinearLayout glview_layout = (LinearLayout) findViewById(R.id.glview_layout); glview = new GL2CameraViewer(getApplication(), false, 0, 0); glview_layout.addView(glview); @@ -250,6 +258,12 @@ public class Calibration extends Activity implements CalibrationCallback { @Override protected void onResume() { super.onResume(); + int size[] ={0,0}; + CameraConfig.readImageSize(getApplicationContext(), size); + int mode = CameraConfig.readCameraMode(getApplicationContext()); + mPreview.setPreviewSize(size[0], size[1]); + mPreview.setGrayscale(mode == CameraConfig.CAMERA_MODE_BW ? true : false); + glview.onResume(); mPreview.onResume(); setCallbackStack(); diff --git a/android/apps/Calibration/src/com/opencv/calibration/ChessBoardChooser.java b/android/apps/Calibration/src/com/opencv/calibration/ChessBoardChooser.java deleted file mode 100644 index 10f9360097..0000000000 --- a/android/apps/Calibration/src/com/opencv/calibration/ChessBoardChooser.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.opencv.calibration; - -import com.opencv.jni.Size; - -import android.app.Activity; -import android.content.Context; -import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; -import android.os.Bundle; -import android.view.View; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemSelectedListener; -import android.widget.Spinner; - -public class ChessBoardChooser extends Activity { - public static final String CHESS_SIZE = "chess_size"; - public static final int DEFAULT_WIDTH = 6; - public static final int DEFAULT_HEIGHT = 8; - public static final int LOWEST = 3; - - class DimChooser implements OnItemSelectedListener { - private String dim; - - public DimChooser(String dim) { - this.dim = dim; - } - - @Override - public void onItemSelected(AdapterView arg0, View arg1, int pos, - long arg3) { - SharedPreferences settings = getSharedPreferences(CHESS_SIZE, 0); - Editor editor = settings.edit(); - editor.putInt(dim, pos + LOWEST); - editor.commit(); - } - - @Override - public void onNothingSelected(AdapterView arg0) { - } - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - // TODO Auto-generated method stub - super.onCreate(savedInstanceState); - setContentView(R.layout.chesssizer); - // Restore preferences - SharedPreferences settings = getSharedPreferences(CHESS_SIZE, 0); - int width = settings.getInt("width", 6); - - int height = settings.getInt("height", 8); - - Spinner wspin, hspin; - wspin = (Spinner) findViewById(R.id.rows); - hspin = (Spinner) findViewById(R.id.cols); - - wspin.setSelection(width - LOWEST); - hspin.setSelection(height - LOWEST); - - wspin.setOnItemSelectedListener(new DimChooser("width")); - hspin.setOnItemSelectedListener(new DimChooser("height")); - - } - - public static Size getPatternSize(Context ctx) { - SharedPreferences settings = ctx.getSharedPreferences(CHESS_SIZE, 0); - int width = settings.getInt("width", 6); - - int height = settings.getInt("height", 8); - - return new Size(width, height); - } - -} diff --git a/android/apps/Calibration/src/com/opencv/calibration/services/CalibrationService.java b/android/apps/Calibration/src/com/opencv/calibration/services/CalibrationService.java deleted file mode 100644 index bc9d5cd4c9..0000000000 --- a/android/apps/Calibration/src/com/opencv/calibration/services/CalibrationService.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.opencv.calibration.services; - -import java.io.File; -import java.io.IOException; - -import android.app.Notification; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.app.Service; -import android.content.Intent; -import android.os.Binder; -import android.os.IBinder; -import android.util.Log; -import android.widget.Toast; - -import com.opencv.calibration.Calibration; -import com.opencv.calibration.Calibrator; -import com.opencv.calibration.Calibrator.CalibrationCallback; -import com.opencv.calibration.R; - -public class CalibrationService extends Service implements CalibrationCallback { - - public void startCalibrating(Calibrator calibrator, File calibration_file) - throws IOException { - calibrator.setCallback(this); - calibrator.calibrate(calibration_file); - } - - private NotificationManager mNM; - - /** - * Class for clients to access. Because we know this service always runs in - * the same process as its clients, we don't need to deal with IPC. - */ - public class CalibrationServiceBinder extends Binder { - public CalibrationService getService() { - return CalibrationService.this; - } - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - Log.i("LocalService", "Received start id " + startId + ": " + intent); - // We want this service to continue running until it is explicitly - // stopped, so return sticky. - return START_NOT_STICKY; - } - - @Override - public void onCreate() { - mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - - // Display a notification about us starting. We put an icon in the - // status bar. - showNotification(); - } - - @Override - public void onDestroy() { - // Cancel the persistent notification. - // mNM.cancel(R.string.calibration_service_started); - - // Tell the user we stopped. - Toast.makeText(this, R.string.calibration_service_finished, - Toast.LENGTH_SHORT).show(); - } - - private final IBinder mBinder = new CalibrationServiceBinder(); - - @Override - public IBinder onBind(Intent intent) { - return mBinder; - } - - /** - * Show a notification while this service is running. - */ - private void showNotification() { - // In this sample, we'll use the same text for the ticker and the - // expanded notification - CharSequence text = getText(R.string.calibration_service_started); - - // Set the icon, scrolling text and timestamp - Notification notification = new Notification(R.drawable.icon, text, - System.currentTimeMillis()); - - // The PendingIntent to launch our activity if the user selects this - // notification - PendingIntent contentIntent = PendingIntent.getActivity(this, 0, - new Intent(this, Calibration.class), 0); - - // Set the info for the views that show in the notification panel. - notification.setLatestEventInfo(this, - getText(R.string.calibration_service_label), text, - contentIntent); - - notification.defaults |= Notification.DEFAULT_SOUND; - // Send the notification. - // We use a layout id because it is a unique number. We use it later to - // cancel. - mNM.notify(R.string.calibration_service_started, notification); - } - - /** - * Show a notification while this service is running. - */ - private void doneNotification() { - // In this sample, we'll use the same text for the ticker and the - // expanded notification - CharSequence text = getText(R.string.calibration_service_finished); - - // Set the icon, scrolling text and timestamp - Notification notification = new Notification(R.drawable.icon, text, - System.currentTimeMillis()); - - // The PendingIntent to launch our activity if the user selects this - // notification - PendingIntent contentIntent = PendingIntent.getActivity(this, 0, - new Intent(this, Calibration.class), 0); - - // Set the info for the views that show in the notification panel. - notification.setLatestEventInfo(this, - getText(R.string.calibration_service_label), text, - contentIntent); - - notification.defaults |= Notification.DEFAULT_SOUND; - // Send the notification. - // We use a layout id because it is a unique number. We use it later to - // cancel. - mNM.notify(R.string.calibration_service_started, notification); - } - - @Override - public void onFoundChessboard(Calibrator calibrator) { - // TODO Auto-generated method stub - - } - - @Override - public void onDoneCalibration(Calibrator calibration, File calibfile) { - doneNotification(); - stopSelf(); - } - - @Override - public void onFailedChessboard(Calibrator calibrator) { - // TODO Auto-generated method stub - - } - -}