Фрагменты Android Force Stopping
Я новичок в разработке Android и TensorFlow. Я только начал изучать фрагменты, и я пытаюсь реализовать Tensor-поток, так как это мое производственное обучение. Я использую камеру, чтобы сделать снимок, а затем с помощью тензорного потока предсказать, какой тип изображения захватывается.
Всякий раз, когда я компилирую приложение, оно запускается, но когда я выполняю этот фрагмент, приложение закрывается. Может кто-нибудь направить меня, где я не прав? Приложение силы закрывается.
package com.industrial.shamshahsan.smitindustrialtraining;
import android.app.Fragment;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.text.method.ScrollingMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import android.view.Gravity;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.wonderkiln.camerakit.CameraKitError;
import com.wonderkiln.camerakit.CameraKitEvent;
import com.wonderkiln.camerakit.CameraKitEventListener;
import com.wonderkiln.camerakit.CameraKitImage;
import com.wonderkiln.camerakit.CameraKitVideo;
import com.wonderkiln.camerakit.CameraView;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class SecondFragment extends Fragment {
View view;
private static final String MODEL_PATH = "mobilenet_quant_v1_224.tflite";
private static final String LABEL_PATH = "labels.txt";
private static final int INPUT_SIZE = 224;
private Classifier classifier;
private Executor executor = Executors.newSingleThreadExecutor();
private TextView textViewResult;
private TextView marquee;
private Button btnDetectObject, btnToggleCamera;
private ImageView imageViewResult;
private CameraView cameraView;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState){
super.onViewCreated(view,savedInstanceState);
getActivity().setTitle("Project");
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.second_layout, container, false);
cameraView = view.findViewById(R.id.cameraView);
marquee = view.findViewById(R.id.groupDetails);
marquee.setSelected(true);
imageViewResult = view.findViewById(R.id.imageViewResult);
textViewResult = view.findViewById(R.id.textViewResult);
textViewResult.setMovementMethod(new ScrollingMovementMethod());
btnToggleCamera = view.findViewById(R.id.btnToggleCamera);
btnDetectObject = view.findViewById(R.id.btnDetectObject);
cameraView.addCameraKitListener(new CameraKitEventListener() {
@Override
public void onEvent(CameraKitEvent cameraKitEvent) {
}
@Override
public void onError(CameraKitError cameraKitError) {
}
@Override
public void onImage(CameraKitImage cameraKitImage) {
Bitmap bitmap = cameraKitImage.getBitmap();
bitmap = Bitmap.createScaledBitmap(bitmap, INPUT_SIZE, INPUT_SIZE, false);
imageViewResult.setImageBitmap(bitmap);
final List<Classifier.Recognition> results = classifier.recognizeImage(bitmap);
textViewResult.setText(results.toString());
}
@Override
public void onVideo(CameraKitVideo cameraKitVideo) {
}
});
btnToggleCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cameraView.toggleFacing();
}
});
btnDetectObject.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cameraView.captureImage();
}
});
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initTensorFlowAndLoadModel();
Toast errormsg = Toast.makeText(getActivity(), "Error!", 5000);
errormsg.setGravity(Gravity.CENTER, 0, 0);
errormsg.show();
}
public void initTensorFlowAndLoadModel() {
executor.execute(new Runnable() {
@Override
public void run() {
try {
classifier = TensorFlowImageClassifier.create(
getActivity().getAssets(),
MODEL_PATH,
LABEL_PATH,
INPUT_SIZE);
makeButtonVisible();
} catch (final Exception e) {
throw new RuntimeException("Error initializing TensorFlow!", e);
}
}
});
}
private void makeButtonVisible() {
runOnUiThread(new Runnable() {
@Override
public void run() {
btnDetectObject.setVisibility(View.VISIBLE);
}
});
}
private void runOnUiThread(Runnable runnable) {
runnable.run();
}
}