Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.mehdi.imagedetection;
- import android.app.Activity;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.PointF;
- import android.graphics.RectF;
- import android.hardware.camera2.params.Face;
- import android.media.FaceDetector;
- import android.net.Uri;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.util.Log;
- import android.util.SparseArray;
- import android.view.View;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.google.android.gms.common.api.CommonStatusCodes;
- import com.google.android.gms.vision.CameraSource;
- import com.google.android.gms.vision.Detector;
- import com.google.android.gms.vision.Frame;
- import com.google.android.gms.vision.MultiDetector;
- import com.google.android.gms.vision.MultiProcessor;
- import com.google.android.gms.vision.Tracker;
- import com.google.android.gms.vision.barcode.Barcode;
- import com.google.android.gms.vision.barcode.BarcodeDetector;
- import java.io.IOException;
- import java.io.InputStream;
- public final class ImageDetection extends AppCompatActivity {
- private static final int SELECT_GALLERY_CODE = 1;
- private static final int REQUIRE_HEIGHT = 200;
- private static final int REQUIRE_WIDTH = 200;
- Button bSelectPic;
- ImageView imgView;
- TextView txtNumPeople;
- TextView txtBarcode;
- Bitmap mFaceBitmap;
- Canvas canvas = new Canvas();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_image_detection);
- bSelectPic = (Button) findViewById(R.id.btnPickPhoto);
- imgView = (ImageView) findViewById(R.id.imageView);
- txtNumPeople = (TextView) findViewById(R.id.txtNumPeople);
- txtBarcode = (TextView) findViewById(R.id.txtBarcode);
- bSelectPic.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent();
- intent.setType("image/*");
- intent.setAction(Intent.ACTION_GET_CONTENT);
- intent.addCategory(Intent.CATEGORY_OPENABLE);
- startActivityForResult(intent, SELECT_GALLERY_CODE);
- }
- });
- }
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == SELECT_GALLERY_CODE
- && resultCode == Activity.RESULT_OK) {
- Uri selectedImageUri = data.getData();
- imgView = (ImageView) findViewById(R.id.imageView);
- Bitmap imageBitmap = getOriginalBitMap(selectedImageUri);
- Frame frame = new Frame.Builder().setBitmap(imageBitmap).build();
- Detector<com.google.android.gms.vision.face.Face> detector = new com.google.android.gms.vision.face.FaceDetector.Builder(getApplicationContext())
- .setTrackingEnabled(false)
- .setLandmarkType(com.google.android.gms.vision.face.FaceDetector.ALL_LANDMARKS)
- .setClassificationType(com.google.android.gms.vision.face.FaceDetector.ALL_CLASSIFICATIONS)
- .build();
- SparseArray<com.google.android.gms.vision.face.Face> faces = detector.detect(frame);
- txtNumPeople.setText("" + faces.size());
- for (int i = 0; i < faces.size(); i++) {
- com.google.android.gms.vision.face.Face eachFace = faces.valueAt(i);
- drawBox(imageBitmap, eachFace.getPosition(), eachFace.getHeight(), eachFace.getWidth());
- }
- Frame barcodeFrame = new Frame.Builder().setBitmap(imageBitmap).build();
- BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(getApplicationContext())
- .setBarcodeFormats(Barcode.ALL_FORMATS).build();
- SparseArray<Barcode> barcodes = barcodeDetector.detect(barcodeFrame);
- if (barcodes.size() > 0) {
- txtBarcode.setText("Yes");
- } else {
- txtBarcode.setText("No");
- }
- imgView.setImageBitmap(mFaceBitmap);
- }
- }
- public Bitmap drawBox(Bitmap imageBitmap, PointF position, float height, float width) {
- Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- myPaint.setStyle(Paint.Style.STROKE);
- myPaint.setColor(Color.rgb(0, 255, 0));
- myPaint.setStrokeWidth(5);
- canvas.setBitmap(imageBitmap);
- canvas.drawRect(position.x, position.y, position.x + width, position.y + height, myPaint);
- return imageBitmap;
- }
- public Bitmap getOriginalBitMap(Uri imageURI) {
- Bitmap bitmap = null;
- BitmapFactory.Options options = new BitmapFactory.Options();
- InputStream imageStream = null;
- InputStream tmpImageStream = null;
- try {
- imageStream = getContentResolver().openInputStream(imageURI);
- tmpImageStream = getContentResolver().openInputStream(imageURI);
- } catch (Exception e) {
- e.printStackTrace();
- }
- options.inJustDecodeBounds = true;
- bitmap = BitmapFactory.decodeStream(tmpImageStream, null, options);
- options.inSampleSize = calculateInSampleSize(options, REQUIRE_WIDTH, REQUIRE_HEIGHT);
- options.inJustDecodeBounds = false;
- bitmap = BitmapFactory.decodeStream(imageStream, null, options);
- Bitmap myBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
- canvas.setBitmap(myBitmap);
- canvas.drawBitmap(bitmap, 0, 0, null);
- return myBitmap;
- }
- public int calculateInSampleSize(
- BitmapFactory.Options options, int reqWidth, int reqHeight) {
- final int height = options.outHeight;
- final int width = options.outWidth;
- int inSampleSize = 1;
- if (height > reqHeight || width > reqWidth) {
- final int halfHeight = height / 2;
- final int halfWidth = width / 2;
- while ((halfHeight / inSampleSize) >= reqHeight
- && (halfWidth / inSampleSize) >= reqWidth) {
- inSampleSize *= 2;
- }
- }
- return inSampleSize;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment