Görüntüyü telefonun galerisinden alıp bir resim görünümünde ayarlıyorum ve bu görseldeki yüzleri algılamaya çalışan Google'ın mobil vizyon kütüphanesini kullanarak alıyorum. Görüntü boyutunu da küçülttüm, böylece ilk büyük boyutlu görüntü, görüntü görüntüsünde düzgün bir şekilde yüklenecek ancak başka bir büyük boyutlu resim yüklemeye çalışırsanız, uygulama çökecektir. Ayrıca büyük boyutlu görüntünün yüzlerini tespit ederken, uygulama bu resimlerde çöküyor app çöküyor.Büyük boyutlu resimlerdeki yüzleri algıladığında uygulama kilitleniyor
Logcat:
MainActivity.java bildirim dosyası uygulama etiketinde kod aşağıdaki
package com.imagegallery.app.imagegallery;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.SparseArray;
import android.view.Display;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.google.android.gms.vision.Frame;
import com.google.android.gms.vision.face.Face;
import com.google.android.gms.vision.face.FaceDetector;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private int PICK_IMAGE_REQUEST=1;
Button btnLoad, btnDetFace;
int count=0;
Context cntx;
String open_time,close_time;
DatabaseHandler db = new DatabaseHandler(this);
Bitmap bitmap;
ImageView imageView;
String img_name, realPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cntx=this;
btnLoad=(Button) findViewById(R.id.btn_open);
btnLoad.setOnClickListener(this);
btnDetFace=(Button) findViewById(R.id.detection);
btnDetFace.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
// Return true to display menu
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
Intent dbmanager = new Intent(this,AndroidDatabaseManager.class);
startActivity(dbmanager);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_open:
Intent intent = new Intent();
intent.setType("image/* video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, PICK_IMAGE_REQUEST);
break;
case R.id.detection:
if(bitmap == null){
Toast.makeText(MainActivity.this, "bitmap == null",
Toast.LENGTH_LONG).show();
}
else{
detectFace();
Toast.makeText(MainActivity.this,"Done",
Toast.LENGTH_LONG).show();
}
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri uri = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
imageView = (ImageView) findViewById(R.id.imageView);
//compressImage(uri);
// imageView.setImageBitmap(bitmap);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
// SDK < API11
if (Build.VERSION.SDK_INT < 11)
realPath = RealPathUtil.getRealPathFromURI_BelowAPI11(this, data.getData());
// SDK >= 11 && SDK < 19
else if (Build.VERSION.SDK_INT < 19)
realPath = RealPathUtil.getRealPathFromURI_API11to18(this, data.getData());
// SDK > 19 (Android 4.4)
else
realPath = RealPathUtil.getRealPathFromURI_API19(this, data.getData());
imageView.setImageBitmap(ImageResizer
.decodeSampledBitmapFromFile(realPath, width, height));
img_name=realPath.substring(realPath.lastIndexOf("/")+1);
count = ++count;
if (count == 1) {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+5:30"));
Date currentLocalTime = cal.getTime();
DateFormat date = new SimpleDateFormat("hh:mm:ss");
date.setTimeZone(TimeZone.getTimeZone("GMT+5:30"));
String localTime = date.format(currentLocalTime);
open_time = localTime;
}
else if (count > 1) {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+5:30"));
Date currentLocalTime = cal.getTime();
DateFormat date = new SimpleDateFormat("hh:mm:ss");
date.setTimeZone(TimeZone.getTimeZone("GMT+5:30"));
String localTime = date.format(currentLocalTime);
close_time = localTime;
Log.d("Insert: ", "Inserting ..");
db.addTime(new Time(img_name,open_time, close_time));
open_time = localTime;
Log.d("Reading: ", "Reading all contacts..");
List<Time> time = db.getAllData();
for (Time t : time) {
String log = "Start time: " + t.getStartTime() + " ,End Time: " + t.getEndTime();
// Writing Time to log
Log.d("Time: ", log);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void detectFace(){
//Create a Paint object for drawing with
Paint myRectPaint = new Paint();
myRectPaint.setStrokeWidth(5);
myRectPaint.setColor(Color.RED);
myRectPaint.setStyle(Paint.Style.STROKE);
//Create a Canvas object for drawing on
Bitmap tempBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);
Canvas tempCanvas = new Canvas(tempBitmap);
tempCanvas.drawBitmap(bitmap, 0, 0, null);
//Detect the Faces
FaceDetector faceDetector = new FaceDetector.Builder(getApplicationContext()).build();
//!!!
//Cannot resolve method setTrackingEnabled(boolean)
//skip for now
//faceDetector.setTrackingEnabled(false);
Frame frame = new Frame.Builder().setBitmap(bitmap).build();
SparseArray<Face> faces = faceDetector.detect(frame);
//Draw Rectangles on the Faces
for(int i=0; i<faces.size(); i++) {
Face thisFace = faces.valueAt(i);
float x1 = thisFace.getPosition().x;
float y1 = thisFace.getPosition().y;
float x2 = x1 + thisFace.getWidth();
float y2 = y1 + thisFace.getHeight();
tempCanvas.drawRoundRect(new RectF(x1, y1, x2, y2), 2, 2, myRectPaint);
}
imageView.setImageDrawable(new BitmapDrawable(getResources(),tempBitmap));
}
}
Kilitlenme günlüğü nedir? –
OOM İstisna belki? – Nanoc
Bağlı logcat'i görebiliyorum – Neha