Advertisement
PialKanti

ImageCapture (Updated)

Jan 29th, 2016
6,163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.53 KB | None | 0 0
  1. package com.example.pial_pc.instantbookreview;
  2.  
  3. import android.content.pm.PackageManager;
  4. import android.graphics.Bitmap;
  5. import android.hardware.Camera;
  6. import android.os.Bundle;
  7. import android.os.Environment;
  8. import android.support.v7.app.ActionBarActivity;
  9. import android.util.Log;
  10. import android.view.SurfaceHolder;
  11. import android.view.SurfaceView;
  12. import android.view.View;
  13. import android.widget.ImageButton;
  14. import android.widget.Toast;
  15.  
  16. import com.example.pial_pc.instantbookreview.bitmapProcess.Tools;
  17. import com.example.pial_pc.instantbookreview.imageCapture.FocusBoxView;
  18.  
  19. import org.opencv.android.BaseLoaderCallback;
  20. import org.opencv.android.LoaderCallbackInterface;
  21. import org.opencv.android.OpenCVLoader;
  22. import org.opencv.android.Utils;
  23. import org.opencv.core.Mat;
  24. import org.opencv.core.Size;
  25. import org.opencv.imgproc.Imgproc;
  26.  
  27. import java.io.File;
  28. import java.io.FileOutputStream;
  29. import java.text.SimpleDateFormat;
  30. import java.util.Date;
  31.  
  32. /**
  33. * Created by Pial-PC on 1/19/2016.
  34. */
  35. public class ImageCapture extends ActionBarActivity implements SurfaceHolder.Callback {
  36. SurfaceView camera_frame;
  37. ImageButton shutter, focus;
  38. Camera.PictureCallback rawPictureCallback, jpegPictureCallback;
  39. Camera.ShutterCallback shutterCallback;
  40. Camera camera;
  41. FocusBoxView focusBox;
  42. Mat imageMat;
  43. Bitmap bmp;
  44.  
  45. private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
  46. @Override
  47. public void onManagerConnected(int status) {
  48. switch (status) {
  49. case LoaderCallbackInterface.SUCCESS:
  50. {
  51. Log.i("OpenCV", "OpenCV loaded successfully");
  52. imageMat=new Mat();
  53. } break;
  54. default:
  55. {
  56. super.onManagerConnected(status);
  57. } break;
  58. }
  59. }
  60. };
  61.  
  62. @Override
  63. protected void onCreate(Bundle savedInstanceState) {
  64. super.onCreate(savedInstanceState);
  65. setContentView(R.layout.activity_image_capture);
  66. getSupportActionBar().hide();
  67.  
  68. camera_frame = (SurfaceView) findViewById(R.id.camera_frame);
  69. shutter = (ImageButton) findViewById(R.id.shutter_button);
  70. focus = (ImageButton) findViewById(R.id.focus_button);
  71. focusBox=(FocusBoxView)findViewById(R.id.focus_box);
  72. SurfaceHolder surfaceHolder = camera_frame.getHolder();
  73. surfaceHolder.addCallback(this);
  74. surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  75.  
  76. shutter.setOnClickListener(new View.OnClickListener() {
  77. @Override
  78. public void onClick(View view) {
  79. //This code is for mute Camera shutter sound
  80.  
  81. Camera.CameraInfo info = new Camera.CameraInfo();
  82. for (int id = 0; id < Camera.getNumberOfCameras(); id++) {
  83. Camera.getCameraInfo(id, info);
  84. if (info.canDisableShutterSound) {
  85. camera.enableShutterSound(false);
  86. }
  87. }
  88.  
  89. camera.takePicture(shutterCallback, rawPictureCallback, jpegPictureCallback);
  90. }
  91. });
  92.  
  93. focus.setOnClickListener(new View.OnClickListener() {
  94. @Override
  95. public void onClick(View view) {
  96. Camera.AutoFocusCallback autoFocusCallback=new Camera.AutoFocusCallback() {
  97. @Override
  98. public void onAutoFocus(boolean b, Camera camera) {
  99.  
  100. }
  101. };
  102.  
  103. camera.autoFocus(autoFocusCallback);
  104. }
  105. });
  106.  
  107. jpegPictureCallback = new Camera.PictureCallback() {
  108. @Override
  109. public void onPictureTaken(byte[] bytes, Camera camera) {
  110.  
  111. if (bytes == null) {
  112. Log.d("OCR", "Got null data");
  113. return;
  114. }
  115.  
  116.  
  117. bmp= Tools.getFocusedBitmap(getApplicationContext(), camera, bytes, focusBox.getBox());
  118. bmp.setDensity(300);
  119.  
  120. //This below code is for image processing using openCV.
  121. bmp=ImageProcessing(bmp);
  122.  
  123. //Saving Bitmap to sdcard
  124. File checkingFileDir=new File(Environment.getExternalStorageDirectory()+"Inastant_Book_Reviwer/");
  125. if(!checkingFileDir.exists()){
  126. checkingFileDir.mkdir();
  127. }
  128. String timeStamp = new SimpleDateFormat("ddMMyyyy").format(new Date());
  129. File imageFile;
  130. String mImageName="Image_"+ timeStamp +".jpg";
  131. imageFile = new File(checkingFileDir.getPath() + File.separator + mImageName);
  132.  
  133. try{
  134. FileOutputStream outImage=new FileOutputStream(imageFile);
  135. bmp.compress(Bitmap.CompressFormat.PNG,90,outImage);
  136. outImage.close();
  137. }catch (Exception e){
  138. e.printStackTrace();
  139. }
  140.  
  141.  
  142. OCR_Image ocr_image=new OCR_Image();
  143. ocr_image.execute(ImageCapture.this,bmp);
  144.  
  145. Log.d("OCR", "Got bitmap");
  146.  
  147.  
  148. }
  149. };
  150.  
  151. shutterCallback = new Camera.ShutterCallback() {
  152. @Override
  153. public void onShutter() {
  154.  
  155. }
  156. };
  157.  
  158. }
  159.  
  160. public Bitmap ImageProcessing(Bitmap bitmap){
  161. Utils.bitmapToMat(bitmap, imageMat);
  162. Imgproc.cvtColor(imageMat, imageMat, Imgproc.COLOR_BGR2GRAY);
  163. Imgproc.GaussianBlur(imageMat, imageMat, new Size(3, 3), 0);
  164. Imgproc.adaptiveThreshold(imageMat, imageMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 5, 4);
  165. return bitmap;
  166. }
  167.  
  168. @Override
  169. public void surfaceCreated(SurfaceHolder surfaceHolder) {
  170. try {
  171. //This checks if a device has a camera or not
  172. if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
  173. // this device has a camera
  174. camera = Camera.open();
  175. } else {
  176. // no camera on this device
  177. Toast.makeText(getApplicationContext(), "Your device doesn't have a Camera.", Toast.LENGTH_SHORT).show();
  178. }
  179. camera.setPreviewDisplay(surfaceHolder);
  180. camera.setDisplayOrientation(90);
  181. camera.startPreview();
  182. } catch (Exception e) {
  183. e.printStackTrace();
  184. }
  185. }
  186.  
  187. @Override
  188. public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
  189.  
  190. }
  191.  
  192. @Override
  193. public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
  194.  
  195. }
  196.  
  197. @Override
  198. public void onResume()
  199. {
  200. super.onResume();
  201. if (!OpenCVLoader.initDebug()) {
  202. Log.d("OpenCV", "Internal OpenCV library not found. Using OpenCV Manager for initialization");
  203. OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
  204. } else {
  205. Log.d("OpenCV", "OpenCV library found inside package. Using it!");
  206. mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
  207. }
  208. }
  209.  
  210. @Override
  211. public void onPause() {
  212. super.onPause();
  213.  
  214. if (camera != null) {
  215. camera.release();
  216. }
  217.  
  218. SurfaceHolder surfaceHolder = camera_frame.getHolder();
  219. surfaceHolder.removeCallback(this);
  220.  
  221. }
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement