import
android.content.Intent;
import
android.graphics.Bitmap;
import
android.os.Bundle;
import
android.provider.MediaStore;
import
android.view.View;
import
android.widget.Button;
import
android.widget.ImageView;
import
android.widget.Toast;
import
androidx.annotation.NonNull;
import
androidx.appcompat.app.AppCompatActivity;
import
androidx.recyclerview.widget.LinearLayoutManager;
import
androidx.recyclerview.widget.RecyclerView;
import
com.google.android.gms.tasks.OnFailureListener;
import
com.google.android.gms.tasks.OnSuccessListener;
import
com.google.firebase.ml.vision.FirebaseVision;
import
com.google.firebase.ml.vision.common.FirebaseVisionImage;
import
com.google.firebase.ml.vision.label.FirebaseVisionImageLabel;
import
com.google.firebase.ml.vision.label.FirebaseVisionImageLabeler;
import
java.util.ArrayList;
import
java.util.List;
public
class
MainActivity
extends
AppCompatActivity {
private
ImageView img;
private
Button snap, labelBtn;
private
Bitmap imageBitmap;
private
RecyclerView resultRV;
private
resultRVAdapter resultRvAdapter;
private
ArrayList<DataModal> dataModalArrayList;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView) findViewById(R.id.image);
snap = (Button) findViewById(R.id.snapbtn);
labelBtn = findViewById(R.id.labelBtn);
resultRV = findViewById(R.id.idRVResults);
dataModalArrayList =
new
ArrayList<>();
resultRvAdapter =
new
resultRVAdapter(dataModalArrayList, MainActivity.
this
);
LinearLayoutManager manager =
new
LinearLayoutManager(MainActivity.
this
);
resultRV.setLayoutManager(manager);
resultRV.setAdapter(resultRvAdapter);
labelBtn.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
labelImage();
}
});
snap.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
dispatchTakePictureIntent();
}
});
}
static
final
int
REQUEST_IMAGE_CAPTURE =
1
;
private
void
dispatchTakePictureIntent() {
Intent takePictureIntent =
new
Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if
(takePictureIntent.resolveActivity(getPackageManager()) !=
null
) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
@Override
protected
void
onActivityResult(
int
requestCode,
int
resultCode, Intent data) {
super
.onActivityResult(requestCode, resultCode, data);
if
(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
imageBitmap = (Bitmap) extras.get(
"data"
);
img.setImageBitmap(imageBitmap);
}
}
private
void
labelImage() {
FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(imageBitmap);
FirebaseVisionImageLabeler labeler = FirebaseVision.getInstance().getOnDeviceImageLabeler();
labeler.processImage(image).addOnSuccessListener(
new
OnSuccessListener<List<FirebaseVisionImageLabel>>() {
@Override
public
void
onSuccess(List<FirebaseVisionImageLabel> firebaseVisionImageLabels) {
for
(FirebaseVisionImageLabel label : firebaseVisionImageLabels) {
String text = label.getText();
String entityId = label.getEntityId();
float
confidence = label.getConfidence();
dataModalArrayList.add(
new
DataModal(text, confidence));
resultRvAdapter.notifyDataSetChanged();
}
}
}).addOnFailureListener(
new
OnFailureListener() {
@Override
public
void
onFailure(
@NonNull
Exception e) {
Toast.makeText(MainActivity.
this
,
"Fail to get data.."
, Toast.LENGTH_SHORT).show();
}
});
}
}