mhnds

Untitled

Nov 1st, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.56 KB | None | 0 0
  1. package com.example.mehdi.imagedetection;
  2.  
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.content.IntentFilter;
  7. import android.graphics.Bitmap;
  8. import android.graphics.BitmapFactory;
  9. import android.graphics.Canvas;
  10. import android.graphics.Color;
  11. import android.graphics.Paint;
  12. import android.graphics.PointF;
  13. import android.graphics.RectF;
  14. import android.hardware.camera2.params.Face;
  15. import android.media.FaceDetector;
  16. import android.net.Uri;
  17. import android.support.v7.app.AppCompatActivity;
  18. import android.os.Bundle;
  19. import android.util.Log;
  20. import android.util.SparseArray;
  21. import android.view.View;
  22. import android.widget.Button;
  23. import android.widget.ImageView;
  24. import android.widget.TextView;
  25. import android.widget.Toast;
  26.  
  27. import com.google.android.gms.common.api.CommonStatusCodes;
  28. import com.google.android.gms.vision.CameraSource;
  29. import com.google.android.gms.vision.Detector;
  30. import com.google.android.gms.vision.Frame;
  31. import com.google.android.gms.vision.MultiDetector;
  32. import com.google.android.gms.vision.MultiProcessor;
  33. import com.google.android.gms.vision.Tracker;
  34. import com.google.android.gms.vision.barcode.Barcode;
  35. import com.google.android.gms.vision.barcode.BarcodeDetector;
  36.  
  37. import java.io.IOException;
  38. import java.io.InputStream;
  39.  
  40. public final class ImageDetection extends AppCompatActivity {
  41. private static final int SELECT_GALLERY_CODE = 1;
  42. private static final int REQUIRE_HEIGHT = 200;
  43. private static final int REQUIRE_WIDTH = 200;
  44.  
  45.  
  46. Button bSelectPic;
  47. ImageView imgView;
  48. TextView txtNumPeople;
  49. TextView txtBarcode;
  50. Bitmap mFaceBitmap;
  51. Canvas canvas = new Canvas();
  52.  
  53. @Override
  54. protected void onCreate(Bundle savedInstanceState) {
  55. super.onCreate(savedInstanceState);
  56. setContentView(R.layout.activity_image_detection);
  57.  
  58. bSelectPic = (Button) findViewById(R.id.btnPickPhoto);
  59. imgView = (ImageView) findViewById(R.id.imageView);
  60. txtNumPeople = (TextView) findViewById(R.id.txtNumPeople);
  61. txtBarcode = (TextView) findViewById(R.id.txtBarcode);
  62.  
  63.  
  64. bSelectPic.setOnClickListener(new View.OnClickListener() {
  65. @Override
  66. public void onClick(View v) {
  67. Intent intent = new Intent();
  68. intent.setType("image/*");
  69. intent.setAction(Intent.ACTION_GET_CONTENT);
  70. intent.addCategory(Intent.CATEGORY_OPENABLE);
  71. startActivityForResult(intent, SELECT_GALLERY_CODE);
  72.  
  73. }
  74. });
  75. }
  76.  
  77. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  78. if (requestCode == SELECT_GALLERY_CODE
  79. && resultCode == Activity.RESULT_OK) {
  80. Uri selectedImageUri = data.getData();
  81.  
  82. imgView = (ImageView) findViewById(R.id.imageView);
  83. Bitmap imageBitmap = getOriginalBitMap(selectedImageUri);
  84.  
  85. Frame frame = new Frame.Builder().setBitmap(imageBitmap).build();
  86. Detector<com.google.android.gms.vision.face.Face> detector = new com.google.android.gms.vision.face.FaceDetector.Builder(getApplicationContext())
  87. .setTrackingEnabled(false)
  88. .setLandmarkType(com.google.android.gms.vision.face.FaceDetector.ALL_LANDMARKS)
  89. .setClassificationType(com.google.android.gms.vision.face.FaceDetector.ALL_CLASSIFICATIONS)
  90. .build();
  91. SparseArray<com.google.android.gms.vision.face.Face> faces = detector.detect(frame);
  92. txtNumPeople.setText("" + faces.size());
  93.  
  94. for (int i = 0; i < faces.size(); i++) {
  95. com.google.android.gms.vision.face.Face eachFace = faces.valueAt(i);
  96. drawBox(imageBitmap, eachFace.getPosition(), eachFace.getHeight(), eachFace.getWidth());
  97. }
  98.  
  99. Frame barcodeFrame = new Frame.Builder().setBitmap(imageBitmap).build();
  100. BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(getApplicationContext())
  101. .setBarcodeFormats(Barcode.ALL_FORMATS).build();
  102. SparseArray<Barcode> barcodes = barcodeDetector.detect(barcodeFrame);
  103. if (barcodes.size() > 0) {
  104. txtBarcode.setText("Yes");
  105. } else {
  106. txtBarcode.setText("No");
  107. }
  108.  
  109. imgView.setImageBitmap(mFaceBitmap);
  110. }
  111. }
  112. public Bitmap drawBox(Bitmap imageBitmap, PointF position, float height, float width) {
  113. Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
  114. myPaint.setStyle(Paint.Style.STROKE);
  115. myPaint.setColor(Color.rgb(0, 255, 0));
  116. myPaint.setStrokeWidth(5);
  117.  
  118. canvas.setBitmap(imageBitmap);
  119. canvas.drawRect(position.x, position.y, position.x + width, position.y + height, myPaint);
  120. return imageBitmap;
  121. }
  122.  
  123.  
  124.  
  125. public Bitmap getOriginalBitMap(Uri imageURI) {
  126. Bitmap bitmap = null;
  127. BitmapFactory.Options options = new BitmapFactory.Options();
  128.  
  129. InputStream imageStream = null;
  130. InputStream tmpImageStream = null;
  131.  
  132. try {
  133. imageStream = getContentResolver().openInputStream(imageURI);
  134. tmpImageStream = getContentResolver().openInputStream(imageURI);
  135.  
  136.  
  137. } catch (Exception e) {
  138. e.printStackTrace();
  139. }
  140.  
  141.  
  142. options.inJustDecodeBounds = true;
  143.  
  144.  
  145. bitmap = BitmapFactory.decodeStream(tmpImageStream, null, options);
  146. options.inSampleSize = calculateInSampleSize(options, REQUIRE_WIDTH, REQUIRE_HEIGHT);
  147.  
  148.  
  149. options.inJustDecodeBounds = false;
  150.  
  151. bitmap = BitmapFactory.decodeStream(imageStream, null, options);
  152.  
  153. Bitmap myBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
  154. canvas.setBitmap(myBitmap);
  155. canvas.drawBitmap(bitmap, 0, 0, null);
  156.  
  157. return myBitmap;
  158. }
  159.  
  160. public int calculateInSampleSize(
  161. BitmapFactory.Options options, int reqWidth, int reqHeight) {
  162.  
  163. final int height = options.outHeight;
  164. final int width = options.outWidth;
  165. int inSampleSize = 1;
  166.  
  167. if (height > reqHeight || width > reqWidth) {
  168.  
  169. final int halfHeight = height / 2;
  170. final int halfWidth = width / 2;
  171.  
  172. while ((halfHeight / inSampleSize) >= reqHeight
  173. && (halfWidth / inSampleSize) >= reqWidth) {
  174. inSampleSize *= 2;
  175. }
  176. }
  177.  
  178. return inSampleSize;
  179. }
  180. }
Advertisement
Add Comment
Please, Sign In to add comment