10.31 add-image-upload-labeler
parent
91d53bd1ca
commit
926aa8f9fa
@ -0,0 +1,19 @@
|
||||
package com.echo.colorizeit.ML;
|
||||
|
||||
import org.tensorflow.lite.support.label.Category;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: WangYuyang
|
||||
* @Date: 2021/10/31-16:00
|
||||
* @Project: My Application
|
||||
* @Package: com.echo.photo_editor.ML
|
||||
* @Description:
|
||||
**/
|
||||
public interface CategoryProcessListener {
|
||||
void start();
|
||||
void success(List<Category> result);
|
||||
void failed(String message);
|
||||
void complete();
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.echo.colorizeit.ML;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
|
||||
import com.example.myapplication.ml.LiteModelObjectDetectionMobileObjectLabelerV11;
|
||||
|
||||
import org.tensorflow.lite.support.image.TensorImage;
|
||||
import org.tensorflow.lite.support.label.Category;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: WangYuyang
|
||||
* @Date: 2021/10/31-15:58
|
||||
* @Project: My Application
|
||||
* @Package: com.echo.photo_editor.ML
|
||||
* @Description:
|
||||
**/
|
||||
public class LabelerModel {
|
||||
private Context context;
|
||||
|
||||
public LabelerModel(Context context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
public void process(Bitmap source, CategoryProcessListener listener) {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
listener.start();
|
||||
try {
|
||||
LiteModelObjectDetectionMobileObjectLabelerV11 model = LiteModelObjectDetectionMobileObjectLabelerV11.newInstance(context);
|
||||
|
||||
// Creates inputs for reference.
|
||||
TensorImage image = TensorImage.fromBitmap(source);
|
||||
|
||||
// Runs model inference and gets result.
|
||||
LiteModelObjectDetectionMobileObjectLabelerV11.Outputs outputs = model.process(image);
|
||||
List<Category> probability = outputs.getProbabilityAsCategoryList();
|
||||
|
||||
// Releases model resources if no longer used.
|
||||
model.close();
|
||||
listener.success(probability);
|
||||
|
||||
} catch (IOException e) {
|
||||
// TODO Handle the exception
|
||||
listener.failed(e.getMessage());
|
||||
}
|
||||
finally {
|
||||
listener.complete();
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
package com.echo.colorizeit.ui.a_image_upload_activity;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.example.myapplication.R;
|
||||
import com.example.myapplication.databinding.LableItemBinding;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* @Author: WangYuyang
|
||||
* @Date: 2021/10/31-16:24
|
||||
* @Project: My Application
|
||||
* @Package: com.echo.colorizeit.ui.a_image_upload_activity
|
||||
* @Description:
|
||||
**/
|
||||
public class LabelAdapter extends RecyclerView.Adapter {
|
||||
private ArrayList<String> labels = new ArrayList<>();
|
||||
private int[] colors = new int[]{Color.parseColor("#FF1461"), Color.parseColor("#18FF92"), Color.parseColor("#5A87FF"), Color.parseColor("#FBF38C"), Color.parseColor("#FBF38C")};
|
||||
private int[] resource = new int[]{R.drawable.lablestyle, R.drawable.lablestyle1, R.drawable.lablestyle2, R.drawable.lablestyle3, R.drawable.lablestyle4};
|
||||
private Random random = new Random();
|
||||
|
||||
public void addLabels(String label){
|
||||
labels.add(label);
|
||||
notifyDataSetChanged();
|
||||
|
||||
}
|
||||
public void setLabels(ArrayList<String> labels) {
|
||||
this.labels = labels;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
LableItemBinding binding;
|
||||
binding = LableItemBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||
LabelViewHolder holder = new LabelViewHolder(binding.getRoot());
|
||||
holder.binding = binding;
|
||||
return holder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
LableItemBinding binding = ((LabelViewHolder) holder).binding;
|
||||
binding.lableName.setText(labels.get(position));
|
||||
// binding.lableName.setBackgroundColor(colors[random.nextInt(colors.length)]);
|
||||
binding.lableName.setBackgroundResource(resource[random.nextInt(resource.length)]);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return labels.size();
|
||||
}
|
||||
|
||||
private static class LabelViewHolder extends RecyclerView.ViewHolder {
|
||||
private LableItemBinding binding;
|
||||
|
||||
public LabelViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#4bb6ef" />
|
||||
<padding android:top="5dp"
|
||||
android:left="5dp"
|
||||
android:right="5dp"
|
||||
android:bottom="5dp" />
|
||||
<corners android:radius="10dp" />
|
||||
</shape>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#FF1461" />
|
||||
<padding android:top="5dp"
|
||||
android:left="5dp"
|
||||
android:right="5dp"
|
||||
android:bottom="5dp" />
|
||||
<corners android:radius="10dp" />
|
||||
</shape>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#18FF92" />
|
||||
<padding android:top="5dp"
|
||||
android:left="5dp"
|
||||
android:right="5dp"
|
||||
android:bottom="5dp" />
|
||||
<corners android:radius="10dp" />
|
||||
</shape>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#5A87FF" />
|
||||
<padding android:top="5dp"
|
||||
android:left="5dp"
|
||||
android:right="5dp"
|
||||
android:bottom="5dp" />
|
||||
<corners android:radius="10dp" />
|
||||
</shape>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#FBF38C" />
|
||||
<padding android:top="5dp"
|
||||
android:left="5dp"
|
||||
android:right="5dp"
|
||||
android:bottom="5dp" />
|
||||
<corners android:radius="10dp" />
|
||||
</shape>
|
Binary file not shown.
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/lable_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:background="@drawable/lablestyle"
|
||||
android:fontFamily="@font/aclonica"
|
||||
android:text="TextView"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -0,0 +1,21 @@
|
||||
package com.echo.photo_editor.ML;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
|
||||
import org.tensorflow.lite.support.label.Category;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: WangYuyang
|
||||
* @Date: 2021/10/31-16:00
|
||||
* @Project: My Application
|
||||
* @Package: com.echo.photo_editor.ML
|
||||
* @Description:
|
||||
**/
|
||||
public interface CategoryProcessListener {
|
||||
void start();
|
||||
void success(List<Category> result);
|
||||
void failed(String message);
|
||||
void complete();
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.echo.photo_editor.ML;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
|
||||
import com.echo.photo_editor.ml.LiteModelObjectDetectionMobileObjectLabelerV11;
|
||||
|
||||
import org.tensorflow.lite.support.image.TensorImage;
|
||||
import org.tensorflow.lite.support.label.Category;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: WangYuyang
|
||||
* @Date: 2021/10/31-15:58
|
||||
* @Project: My Application
|
||||
* @Package: com.echo.photo_editor.ML
|
||||
* @Description:
|
||||
**/
|
||||
public class LabelerModel {
|
||||
private Context context;
|
||||
|
||||
public LabelerModel(Context context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
public void process(Bitmap source, CategoryProcessListener listener) {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
listener.start();
|
||||
try {
|
||||
LiteModelObjectDetectionMobileObjectLabelerV11 model = LiteModelObjectDetectionMobileObjectLabelerV11.newInstance(context);
|
||||
|
||||
// Creates inputs for reference.
|
||||
TensorImage image = TensorImage.fromBitmap(source);
|
||||
|
||||
// Runs model inference and gets result.
|
||||
LiteModelObjectDetectionMobileObjectLabelerV11.Outputs outputs = model.process(image);
|
||||
List<Category> probability = outputs.getProbabilityAsCategoryList();
|
||||
|
||||
// Releases model resources if no longer used.
|
||||
model.close();
|
||||
listener.success(probability);
|
||||
|
||||
} catch (IOException e) {
|
||||
// TODO Handle the exception
|
||||
listener.failed(e.getMessage());
|
||||
}
|
||||
finally {
|
||||
listener.complete();
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
Binary file not shown.
Loading…
Reference in New Issue