use of org.openbot.tflite.Model in project OpenBot by isl-org.
the class ModelManagementFragment method processModelFromStorage.
private void processModelFromStorage(List<Uri> files, String fileName) {
Model item = new Model(masterList.size() + 1, Model.CLASS.AUTOPILOT_F, Model.TYPE.AUTOPILOT, fileName, Model.PATH_TYPE.FILE, requireActivity().getFilesDir() + File.separator + fileName, "256x96");
EditModelDialogFragment edMbS = new EditModelDialogFragment(item, item1 -> {
try {
InputStream inputStream = requireActivity().getContentResolver().openInputStream(files.get(0));
FileUtils.copyFile(inputStream, fileName, requireActivity().getFilesDir().getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
masterList.add(item1);
showModels(loadModelList(binding.modelSpinner.getSelectedItem().toString()));
FileUtils.updateModelConfig(requireActivity(), masterList);
Toast.makeText(requireContext().getApplicationContext(), "Model added: " + fileName, Toast.LENGTH_SHORT).show();
});
edMbS.show(getChildFragmentManager(), edMbS.getTag());
}
use of org.openbot.tflite.Model in project OpenBot by isl-org.
the class ModelManagementFragment method onModelDownloaded.
@Override
public void onModelDownloaded(boolean status, Model mItem) {
if (status && isAdded()) {
isDownloading = false;
for (Model model : masterList) {
if (model.id.equals(mItem.id)) {
model.setPath(requireActivity().getFilesDir() + File.separator + model.name);
model.setPathType(Model.PATH_TYPE.FILE);
// adapter.notifyDataSetChanged();
FileUtils.updateModelConfig(requireActivity(), masterList);
break;
}
}
}
}
use of org.openbot.tflite.Model in project OpenBot by isl-org.
the class CameraActivity method onCreate.
@Override
protected void onCreate(final Bundle savedInstanceState) {
LOGGER.d("onCreate " + this);
super.onCreate(null);
context = getApplicationContext();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
vehicle = OpenBotApplication.vehicle;
phoneController = PhoneController.getInstance(this);
setContentView(R.layout.activity_camera);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
if (PermissionUtils.hasCameraPermission(this)) {
setFragment();
} else {
PermissionUtils.requestCameraPermission(this);
}
preferencesManager = new SharedPreferencesManager(this);
connectionSwitchCompat = findViewById(R.id.connection_switch);
threadsTextView = findViewById(R.id.threads);
plusImageView = findViewById(R.id.plus);
minusImageView = findViewById(R.id.minus);
networkSwitchCompat = findViewById(R.id.network_switch);
bottomSheetLayout = findViewById(R.id.bottom_sheet_layout);
gestureLayout = findViewById(R.id.gesture_layout);
sheetBehavior = BottomSheetBehavior.from(bottomSheetLayout);
bottomSheetArrowImageView = findViewById(R.id.bottom_sheet_arrow);
logSwitchCompat = findViewById(R.id.logger_switch);
cameraSwitchCompat = findViewById(R.id.camera_toggle_switch);
baudRateSpinner = findViewById(R.id.baud_rate_spinner);
ArrayAdapter<CharSequence> baudRateAdapter = ArrayAdapter.createFromResource(this, R.array.baud_rates, R.layout.spinner_item);
baudRateAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
baudRateSpinner.setAdapter(baudRateAdapter);
modelSpinner = findViewById(R.id.model_spinner);
masterList = FileUtils.loadConfigJSONFromAsset(this);
List<String> models = masterList.stream().filter(f -> f.pathType != Model.PATH_TYPE.URL).map(f -> FileUtils.nameWithoutExtension(f.name)).collect(Collectors.toList());
masterList.stream().filter(f -> f.name.contains(preferencesManager.getDefaultModel())).findFirst().ifPresent(f -> model = f);
modelAdapter = new ArrayAdapter<>(this, R.layout.spinner_item, new ArrayList<>(models));
modelAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
modelSpinner.setAdapter(modelAdapter);
deviceSpinner = findViewById(R.id.device_spinner);
ArrayAdapter<CharSequence> deviceAdapter = ArrayAdapter.createFromResource(this, R.array.devices, R.layout.spinner_item);
deviceAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
deviceSpinner.setAdapter(deviceAdapter);
logSpinner = findViewById(R.id.log_spinner);
ArrayAdapter<CharSequence> logAdapter = ArrayAdapter.createFromResource(this, R.array.log_settings, R.layout.spinner_item);
logAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
logSpinner.setAdapter(logAdapter);
controlModeSpinner = findViewById(R.id.control_mode_spinner);
ArrayAdapter<CharSequence> controlModeAdapter = ArrayAdapter.createFromResource(this, R.array.control_modes, R.layout.spinner_item);
controlModeAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
controlModeSpinner.setAdapter(controlModeAdapter);
driveModeSpinner = findViewById(R.id.drive_mode_spinner);
ArrayAdapter<CharSequence> driveModeAdapter = ArrayAdapter.createFromResource(this, R.array.drive_modes, R.layout.spinner_item);
driveModeAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
driveModeSpinner.setAdapter(driveModeAdapter);
speedModeSpinner = findViewById(R.id.speed_mode_spinner);
ArrayAdapter<CharSequence> controlAdapter = ArrayAdapter.createFromResource(this, R.array.speed_modes, R.layout.spinner_item);
controlAdapter.setDropDownViewResource(android.R.layout.simple_list_item_checked);
speedModeSpinner.setAdapter(controlAdapter);
ViewTreeObserver vto = gestureLayout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
gestureLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// int width = bottomSheetLayout.getMeasuredWidth();
int height = gestureLayout.getMeasuredHeight();
sheetBehavior.setPeekHeight(height);
}
});
sheetBehavior.setHideable(false);
sheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
switch(newState) {
case BottomSheetBehavior.STATE_HIDDEN:
break;
case BottomSheetBehavior.STATE_EXPANDED:
bottomSheetArrowImageView.setImageResource(R.drawable.icn_chevron_down);
preferencesManager.setSheetExpanded(true);
break;
case BottomSheetBehavior.STATE_COLLAPSED:
bottomSheetArrowImageView.setImageResource(R.drawable.icn_chevron_up);
preferencesManager.setSheetExpanded(false);
break;
case BottomSheetBehavior.STATE_DRAGGING:
break;
case BottomSheetBehavior.STATE_SETTLING:
bottomSheetArrowImageView.setImageResource(R.drawable.icn_chevron_up);
break;
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
voltageTextView = findViewById(R.id.voltage_info);
speedTextView = findViewById(R.id.speed_info);
sonarTextView = findViewById(R.id.sonar_info);
frameValueTextView = findViewById(R.id.frame_info);
cropValueTextView = findViewById(R.id.crop_info);
inferenceTimeTextView = findViewById(R.id.inference_info);
controlValueTextView = findViewById(R.id.control_info);
connectionSwitchCompat.setOnCheckedChangeListener(this);
networkSwitchCompat.setOnCheckedChangeListener(this);
logSwitchCompat.setOnCheckedChangeListener(this);
cameraSwitchCompat.setOnCheckedChangeListener(this);
plusImageView.setOnClickListener(this);
minusImageView.setOnClickListener(this);
baudRateSpinner.setOnItemSelectedListener(this);
modelSpinner.setOnItemSelectedListener(this);
deviceSpinner.setOnItemSelectedListener(this);
logSpinner.setOnItemSelectedListener(this);
controlModeSpinner.setOnItemSelectedListener(this);
driveModeSpinner.setOnItemSelectedListener(this);
speedModeSpinner.setOnItemSelectedListener(this);
// Intent for sensor service
intentSensorService = new Intent(this, SensorService.class);
setInitialValues();
// Try to connect to serial device
toggleConnection(true);
localBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null) {
switch(action) {
case Constants.USB_ACTION_DATA_RECEIVED:
long timestamp = SystemClock.elapsedRealtimeNanos();
String data = intent.getStringExtra("data");
char header = data.charAt(0);
String body = data.substring(1);
int type = -1;
switch(header) {
case 'f':
vehicle.processVehicleConfig(body);
break;
case 'v':
if (FormatUtils.isNumeric(body)) {
type = SensorService.MSG_VOLTAGE;
vehicle.setBatteryVoltage(Float.parseFloat(body));
runOnUiThread(() -> {
voltageTextView.setText(String.format(Locale.US, "%2.1f V", vehicle.getBatteryVoltage()));
});
} else {
String[] msgParts = body.split(":");
switch(msgParts[0]) {
case "min":
vehicle.setMinMotorVoltage(Float.parseFloat(msgParts[1]));
break;
case "low":
vehicle.setLowBatteryVoltage(Float.parseFloat(msgParts[1]));
break;
case "max":
vehicle.setMaxBatteryVoltage(Float.parseFloat(msgParts[1]));
break;
default:
Toast.makeText(getApplicationContext(), "Invalid voltage message received!", Toast.LENGTH_SHORT).show();
break;
}
}
break;
case 's':
if (FormatUtils.isNumeric(body)) {
type = SensorService.MSG_SONAR;
vehicle.setSonarReading(Float.parseFloat(body));
runOnUiThread(() -> {
sonarTextView.setText(String.format(Locale.US, "%3.0f cm", vehicle.getSonarReading()));
});
}
break;
case 'w':
String[] itemList = body.split(",");
if (itemList.length == 2 && FormatUtils.isNumeric(itemList[0]) && FormatUtils.isNumeric(itemList[1])) {
type = SensorService.MSG_WHEELS;
vehicle.setLeftWheelRpm(Float.parseFloat(itemList[0]));
vehicle.setRightWheelRpm(Float.parseFloat(itemList[1]));
runOnUiThread(() -> {
speedTextView.setText(String.format(Locale.US, "%3.0f,%3.0f rpm", vehicle.getLeftWheelRpm(), vehicle.getRightWheelRpm()));
});
}
break;
case 'b':
type = SensorService.MSG_BUMPER;
break;
}
if (type > 0)
sendVehicleDataToSensorService(timestamp, data, type);
break;
}
}
}
};
IntentFilter localIntentFilter = new IntentFilter();
localIntentFilter.addAction(Constants.USB_ACTION_DATA_RECEIVED);
localBroadcastManager = LocalBroadcastManager.getInstance(this);
localBroadcastManager.registerReceiver(localBroadcastReceiver, localIntentFilter);
vehicle.requestVehicleConfig();
}
use of org.openbot.tflite.Model in project OpenBot by isl-org.
the class ObjectNavFragment method onInferenceConfigurationChanged.
protected void onInferenceConfigurationChanged() {
computingNetwork = false;
if (croppedBitmap == null) {
// Defer creation until we're getting camera frames.
return;
}
final Network.Device device = getDevice();
final Model model = getModel();
final int numThreads = getNumThreads();
runInBackground(() -> recreateNetwork(model, device, numThreads));
}
use of org.openbot.tflite.Model in project OpenBot by isl-org.
the class FileUtils method getOriginalModelFromConfig.
public static Model getOriginalModelFromConfig(Activity activity, Model model) {
String configFile = "config.json";
Gson gson = new GsonBuilder().registerTypeAdapterFactory(new PostProcessingEnabler()).create();
JsonElement jsonElement = null;
try {
jsonElement = gson.fromJson(new InputStreamReader(activity.getAssets().open(configFile)), JsonElement.class).getAsJsonArray();
} catch (IOException e) {
e.printStackTrace();
}
Type listType = new TypeToken<List<Model>>() {
}.getType();
List<Model> modelList = gson.fromJson(jsonElement, listType);
if (modelList != null)
for (Model modelInfo : modelList) if (Objects.equals(model.id, modelInfo.id)) {
return modelInfo;
}
return null;
}
Aggregations