Skip to content

Commit

Permalink
Basics of local model activity 🧱
Browse files Browse the repository at this point in the history
  • Loading branch information
asmaamirkhan committed Feb 17, 2020
1 parent 11bdadd commit 670c492
Show file tree
Hide file tree
Showing 7 changed files with 149 additions and 1 deletion.
3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
aaptOptions {
noCompress "tflite" // Your model's file extension: "tflite", "lite", etc.
}
}


Expand Down
3 changes: 2 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ImageClassificationCustomModel.ImageClassificationActivity"></activity>
<activity android:name=".ImageClassificationLocalModel.ImageClassificationLocalModelActivity"></activity>
<activity android:name=".ImageClassificationCustomModel.ImageClassificationActivity" />
<activity android:name=".FaceTracking.FaceTrackingActivity" />
<activity android:name=".RealTimeObjectDetection.RealTimeObjectDetectionActivity" />
<activity android:name=".CaptureFaceDetection.GalleryFaceDetectionActivity" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package com.asmaamir.mlkitdemo.ImageClassificationLocalModel;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.asmaamir.mlkitdemo.R;
import com.google.firebase.ml.vision.common.FirebaseVisionImage;

import java.io.IOException;
import java.util.Objects;

public class ImageClassificationLocalModelActivity extends AppCompatActivity {
private static final String TAG = "PickActivity";
public static final int REQUEST_CODE_PERMISSION = 111;
public static final String[] REQUIRED_PERMISSIONS = new String[]{"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE"};
private static final int PICK_IMAGE_CODE = 100;
private ImageView imageView;
private ImageView imageViewCanvas;
private FirebaseVisionImage image;
private Bitmap bitmap;
private Canvas canvas;
private Paint dotPaint, linePaint;
private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_classification_local_model);
if (allPermissionsGranted()) {
initViews();
} else {
ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSION);
}
}

private void initViews() {
imageView = findViewById(R.id.img_view_pick_local);
ImageButton imageButton = findViewById(R.id.img_btn_pick_local);
imageViewCanvas = findViewById(R.id.img_view_pick_canvas_local);
textView = findViewById(R.id.tv_props_local);
imageButton.setOnClickListener(v -> pickImage());
}

private void pickImage() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, PICK_IMAGE_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == PICK_IMAGE_CODE) {
if (data != null) {
imageView.setImageURI(data.getData());
textView.setText("Classes: ");
try {
image = FirebaseVisionImage.fromFilePath(this, Objects.requireNonNull(data.getData()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE_PERMISSION) {
if (allPermissionsGranted()) {
initViews();
} else {
Toast.makeText(this,
"Permissions not granted by the user.",
Toast.LENGTH_SHORT).show();
finish();
}
}
}

private boolean allPermissionsGranted() {
for (String permission : REQUIRED_PERMISSIONS) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
}
4 changes: 4 additions & 0 deletions app/src/main/java/com/asmaamir/mlkitdemo/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.asmaamir.mlkitdemo.CaptureFaceDetection.GalleryFaceDetectionActivity;
import com.asmaamir.mlkitdemo.FaceTracking.FaceTrackingActivity;
import com.asmaamir.mlkitdemo.ImageClassificationCustomModel.ImageClassificationActivity;
import com.asmaamir.mlkitdemo.ImageClassificationLocalModel.ImageClassificationLocalModelActivity;
import com.asmaamir.mlkitdemo.RealTimeFaceDetection.RealTimeFaceDetectionActivity;
import com.asmaamir.mlkitdemo.RealTimeObjectDetection.RealTimeObjectDetectionActivity;
import com.google.android.material.navigation.NavigationView;
Expand Down Expand Up @@ -65,6 +66,9 @@ private void initNavigationDrawer() {
case R.id.image_classification:
switchActivity(ImageClassificationActivity.class);
return true;
case R.id.image_classification_local:
switchActivity(ImageClassificationLocalModelActivity.class);
return true;
default:
return false;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ImageClassificationLocalModel.ImageClassificationLocalModelActivity">

<ImageView
android:id="@+id/img_view_pick_local"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<ImageView
android:id="@+id/img_view_pick_canvas_local"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<ImageButton
android:id="@+id/img_btn_pick_local"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_alignParentBottom="true"
android:src="@drawable/camera" />

<TextView
android:id="@+id/tv_props_local"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Classes: " />
</RelativeLayout>

4 changes: 4 additions & 0 deletions app/src/main/res/menu/nav_drawer.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@
android:id="@+id/image_classification"
android:icon="@drawable/custom_icon"
android:title="@string/image_classification" />
<item
android:id="@+id/image_classification_local"
android:icon="@drawable/custom_icon"
android:title="@string/image_classification_local" />
</menu>
</item>
</menu>
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@
<string name="realtime_object_detection">Real Time Object Detection</string>
<string name="custom_model">Custom Model</string>
<string name="image_classification">Image Classification</string>
<string name="image_classification_local">Image Classification | Local</string>
</resources>

0 comments on commit 670c492

Please sign in to comment.