remove unuse codes and chinese code format

pull/8274/head
hukang hwx963878 4 years ago
parent 8254ad40b7
commit edde5724fe

@ -51,6 +51,11 @@ android {
packagingOptions{
pickFirst 'lib/arm64-v8a/libmlkit-label-MS.so'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
// Before gradle build.
@ -69,4 +74,15 @@ dependencies {
implementation 'com.sun.mail:android-mail:1.6.5'
implementation 'com.sun.mail:android-activation:1.6.5'
implementation 'com.trello.rxlifecycle2:rxlifecycle:2.2.2'
implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.2'
implementation 'io.reactivex.rxjava2:rxjava:2.1.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
implementation 'org.greenrobot:eventbus:3.0.0'
}

@ -9,6 +9,8 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEM" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INTERNET" />
<application
@ -19,6 +21,10 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.actions"
android:resource="@xml/file_paths" />
<activity
android:name=".SplashActivity"
android:screenOrientation="portrait"
@ -32,7 +38,7 @@
<activity
android:name=".imageclassification.ui.ImageMainActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.NoActionBar"/>
android:theme="@style/Theme.AppCompat.NoActionBar" />
<activity
android:name=".contract.ContractActivity"
android:screenOrientation="portrait"
@ -53,6 +59,16 @@
android:name=".imageclassification.ui.ImageCameraActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.mindspore.himindspore.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>
</manifest>

@ -1,34 +1,51 @@
package com.mindspore.himindspore;
import android.Manifest;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Build;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AlertDialog;
import androidx.core.app.ActivityCompat;
import androidx.core.content.FileProvider;
import com.mindspore.himindspore.imageclassification.ui.ImageCameraActivity;
import com.mindspore.himindspore.base.BaseActivity;
import com.mindspore.himindspore.imageclassification.ui.ImageMainActivity;
import com.mindspore.himindspore.mvp.MainContract;
import com.mindspore.himindspore.mvp.MainPresenter;
import com.mindspore.himindspore.net.FileDownLoadObserver;
import com.mindspore.himindspore.net.UpdateInfoBean;
import com.mindspore.himindspore.objectdetection.ui.ObjectDetectionMainActivity;
public class SplashActivity extends AppCompatActivity implements View.OnClickListener {
import java.io.File;
public class SplashActivity extends BaseActivity<MainPresenter> implements MainContract.View, View.OnClickListener {
private static final String TAG = "SplashActivity";
private static final int REQUEST_PERMISSION = 1;
private Button btnImage, btnObject, btnContract,btnAdvice;
private Button btnImage, btnObject, btnContract, btnAdvice;
private boolean isHasPermssion;
private static final String CODE_URL ="https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/lite";
private static final String HELP_URL ="https://github.com/mindspore-ai/mindspore/issues";
private ProgressDialog progressDialog;
private static final String CODE_URL = "https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/lite";
private static final String HELP_URL = "https://github.com/mindspore-ai/mindspore/issues";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
protected void init() {
presenter = new MainPresenter(this);
btnImage = findViewById(R.id.btn_image);
btnObject = findViewById(R.id.btn_object);
@ -41,6 +58,12 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
btnAdvice.setOnClickListener(this);
requestPermissions();
getUpdateInfo();
}
@Override
public int getLayout() {
return R.layout.activity_splash;
}
private void requestPermissions() {
@ -59,6 +82,11 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
}
}
private void getUpdateInfo() {
presenter.getUpdateInfo();
}
@Override
public void onClick(View view) {
if (R.id.btn_image == view.getId()) {
@ -75,7 +103,7 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
}
} else if (R.id.btn_contact == view.getId()) {
openBrowser(CODE_URL);
}else if (R.id.btn_advice == view.getId()) {
} else if (R.id.btn_advice == view.getId()) {
openBrowser(HELP_URL);
}
}
@ -87,4 +115,134 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
intent.setData(uri);
startActivity(intent);
}
@Override
public void showUpdateResult(UpdateInfoBean bean) {
showUpdate(bean);
}
@Override
public void showFail(String s) {
}
public void downSuccess() {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setTitle("下载完成");
builder.setMessage("是否安装");
builder.setCancelable(false);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(SplashActivity.this, "com.mindspore.himindspore.fileprovider",
new File(getApkPath(), "HiMindSpore.apk"));
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(new File(getApkPath(), "HiMindSpore.apk")), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
startActivity(intent);
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.create().show();
}
private int now_version;
public void showUpdate(final UpdateInfoBean updateInfo) {
try {
PackageManager packageManager = this.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(this.getPackageName(), 0);
now_version = packageInfo.versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (now_version == updateInfo.getVersionCode()) {
Toast.makeText(this, "已经是最新版本", Toast.LENGTH_SHORT).show();
Log.d(TAG + "版本号是", "onResponse: " + now_version);
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setTitle("请升级新版本" + updateInfo.getVersionName());
builder.setMessage(updateInfo.getMessage());
builder.setCancelable(false);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e(TAG, String.valueOf(Environment.MEDIA_MOUNTED));
downFile();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.create().show();
}
}
public void downFile() {
progressDialog = new ProgressDialog(this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setTitle("正在下载");
progressDialog.setMessage("请稍候...");
progressDialog.setProgressNumberFormat("%1d Mb/%2d Mb");
progressDialog.setProgress(0);
progressDialog.show();
presenter.downloadApk(getApkPath(), "HiMindSpore.apk", new FileDownLoadObserver<File>() {
@Override
public void onDownLoadSuccess(File file) {
downSuccess();
}
@Override
public void onDownLoadFail(Throwable throwable) {
Toast.makeText(SplashActivity.this, "下载失败", Toast.LENGTH_LONG).show();
}
@Override
public void onProgress(final int progress, final long total) {
runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog.setMax((int) total / 1024 / 1024);
progressDialog.setProgress(progress);
}
});
}
});
Log.d(TAG, "downFile: ");
}
public String getApkPath() {
String directoryPath = "";
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
directoryPath = getExternalFilesDir("apk").getAbsolutePath();
} else {
directoryPath = getFilesDir() + File.separator + "apk";
}
File file = new File(directoryPath);
Log.e("测试路径", directoryPath);
if (!file.exists()) {
file.mkdirs();
}
return directoryPath;
}
}

@ -0,0 +1,20 @@
package com.mindspore.himindspore.base;
import android.app.Activity;
import android.os.Bundle;
public abstract class BaseActivity<T extends BasePresenter> extends Activity {
protected T presenter;
@Override
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
setContentView(getLayout());
init();
}
protected abstract void init();
public abstract int getLayout();
}

@ -0,0 +1,5 @@
package com.mindspore.himindspore.base;
public abstract class BasePresenter<T extends BaseActivity> {
protected T view;
}

@ -0,0 +1,4 @@
package com.mindspore.himindspore.base;
public interface TrackListener {
}

@ -37,8 +37,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import com.mindspore.himindspore.base.TrackListener;
import com.mindspore.himindspore.imageclassification.help.GarbageTrackingMobile;
import com.mindspore.himindspore.track.TrackListener;
import com.mindspore.himindspore.imageclassification.help.ImageTrackingMobile;
import com.mindspore.himindspore.objectdetection.help.ObjectTrackingMobile;
@ -283,7 +283,7 @@ public class CameraPreview extends TextureView {
if (null != track) {
garbageTrackingMobile = (GarbageTrackingMobile) track;
}
}else if (OPEN_TYPE_OBJECT == openType) {
} else if (OPEN_TYPE_OBJECT == openType) {
if (null != track) {
objectTrackingMobile = (ObjectTrackingMobile) track;
}
@ -308,7 +308,7 @@ public class CameraPreview extends TextureView {
mBackgroundThread.start();
mBackgroundHandler = new Handler(mBackgroundThread.getLooper());
if (OPEN_TYPE_IMAGE == openType || OPEN_TYPE_OBJECT == openType || OPEN_TYPE_IMAGE_CUSTOM == openType ) {
if (OPEN_TYPE_IMAGE == openType || OPEN_TYPE_OBJECT == openType || OPEN_TYPE_IMAGE_CUSTOM == openType) {
mImageBackgroundThread = new HandlerThread("MINDSPORE");
mImageBackgroundThread.start();
mImageBackgroundHandler = new Handler(mImageBackgroundThread.getLooper());
@ -330,12 +330,12 @@ public class CameraPreview extends TextureView {
if (bitmap != null) {
long startTime = System.currentTimeMillis();
// The current bitmap performs the sending request identification operation
String ret ="";
if (OPEN_TYPE_IMAGE == openType){
String ret = "";
if (OPEN_TYPE_IMAGE == openType) {
ret = null == imageTrackingMobile ? "" : imageTrackingMobile.MindSpore_runnet(bitmap);
}else if(OPEN_TYPE_IMAGE_CUSTOM == openType){
} else if (OPEN_TYPE_IMAGE_CUSTOM == openType) {
ret = null == garbageTrackingMobile ? "" : garbageTrackingMobile.MindSpore_runnet(bitmap);
}else if(OPEN_TYPE_OBJECT == openType){
} else if (OPEN_TYPE_OBJECT == openType) {
ret = null == objectTrackingMobile ? "" : objectTrackingMobile.MindSpore_runnet(bitmap);
}
long endTime = System.currentTimeMillis();
@ -348,7 +348,7 @@ public class CameraPreview extends TextureView {
}
}
if (mImageBackgroundHandler != null && !isPreBackgroundThreadPause) {
mImageBackgroundHandler.postDelayed(classifyRunnable,1000);
mImageBackgroundHandler.postDelayed(classifyRunnable, 1000);
}
}
}

@ -1,12 +1,12 @@
/**
* Copyright 2020 Huawei Technologies Co., Ltd
*
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
*
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

@ -1,12 +1,12 @@
/**
* Copyright 2020 Huawei Technologies Co., Ltd
*
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
*
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -17,11 +17,10 @@
package com.mindspore.himindspore.imageclassification.help;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.util.Log;
import com.mindspore.himindspore.track.TrackListener;
import com.mindspore.himindspore.base.TrackListener;
import java.io.InputStream;
import java.nio.ByteBuffer;
@ -61,7 +60,7 @@ public class GarbageTrackingMobile implements TrackListener {
/**
* Running model.
*
*
* @param netEnv Inference environment address.
* @param img A picture to be inferred.
* @return Inference result
@ -70,7 +69,7 @@ public class GarbageTrackingMobile implements TrackListener {
/**
* Unbind model data.
*
*
* @param netEnv Inference environment address.
* @return Unbound state.
*/
@ -78,14 +77,14 @@ public class GarbageTrackingMobile implements TrackListener {
/**
* The C++ side is encapsulated into a method of the MSNetWorks class
*
*
* @param modelPath Model file location
* @return Load model file status
*/
public boolean loadModelFromBuf(String modelPath) {
ByteBuffer buffer = loadModelFile(modelPath);
netEnv = loadModel(buffer, 2); //numThread's default setting is 2.
if (netEnv == 0){ // Loading model failed.
if (netEnv == 0) { // Loading model failed.
return false;
}
@ -112,7 +111,7 @@ public class GarbageTrackingMobile implements TrackListener {
/**
* Load model file stream.
* @param modelPath Model file path.
* @return Model ByteBuffer.
* @return Model ByteBuffer.
*/
public ByteBuffer loadModelFile(String modelPath) {
InputStream is = null;

@ -1,12 +1,12 @@
/**
* Copyright 2020 Huawei Technologies Co., Ltd
*
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
*
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -20,7 +20,7 @@ import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import com.mindspore.himindspore.track.TrackListener;
import com.mindspore.himindspore.base.TrackListener;
import java.io.InputStream;
import java.nio.ByteBuffer;
@ -60,7 +60,7 @@ public class ImageTrackingMobile implements TrackListener {
/**
* Running model.
*
*
* @param netEnv Inference environment address.
* @param img A picture to be inferred.
* @return Inference result
@ -69,7 +69,7 @@ public class ImageTrackingMobile implements TrackListener {
/**
* Unbind model data.
*
*
* @param netEnv Inference environment address.
* @return Unbound state.
*/
@ -77,14 +77,14 @@ public class ImageTrackingMobile implements TrackListener {
/**
* The C++ side is encapsulated into a method of the MSNetWorks class
*
*
* @param modelPath Model file location
* @return Load model file status
*/
public boolean loadModelFromBuf(String modelPath) {
ByteBuffer buffer = loadModelFile(modelPath);
netEnv = loadModel(buffer, 2); //numThread's default setting is 2.
if (netEnv == 0){ // Loading model failed.
if (netEnv == 0) { // Loading model failed.
return false;
}
@ -111,7 +111,7 @@ public class ImageTrackingMobile implements TrackListener {
/**
* Load model file stream.
* @param modelPath Model file path.
* @return Model ByteBuffer.
* @return Model ByteBuffer.
*/
public ByteBuffer loadModelFile(String modelPath) {
InputStream is = null;

@ -1,12 +1,12 @@
/**
* Copyright 2020 Huawei Technologies Co., Ltd
*
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
*
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

@ -23,9 +23,7 @@ import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
import androidx.annotation.UiThread;
@ -65,10 +63,10 @@ public class ImageCameraActivity extends AppCompatActivity implements CameraPrev
private GarbageTrackingMobile garbageTrackingMobile;
@Override
protected void onCreate( Bundle savedInstanceState) {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_camera);
enterType = getIntent().getIntExtra(OPEN_TYPE,TYPE_DEMO);
enterType = getIntent().getIntExtra(OPEN_TYPE, TYPE_DEMO);
cameraPreview = findViewById(R.id.image_camera_preview);
bottomLayout = findViewById(R.id.layout_bottom_content);
@ -77,12 +75,12 @@ public class ImageCameraActivity extends AppCompatActivity implements CameraPrev
}
private void init() {
if(enterType == TYPE_DEMO) {
if (enterType == TYPE_DEMO) {
mTrackingMobile = new ImageTrackingMobile(this);
String modelPath = "model/mobilenetv2.ms";
boolean ret = mTrackingMobile.loadModelFromBuf(modelPath);
Log.d(TAG, "Loading model return value: " + ret);
}else {
} else {
garbageTrackingMobile = new GarbageTrackingMobile(this);
String garbageModelPath = "model/garbage_mobilenetv2.ms";
boolean garbageRet = garbageTrackingMobile.loadModelFromBuf(garbageModelPath);
@ -95,9 +93,9 @@ public class ImageCameraActivity extends AppCompatActivity implements CameraPrev
@Override
protected void onResume() {
super.onResume();
if(enterType == TYPE_DEMO) {
if (enterType == TYPE_DEMO) {
cameraPreview.onResume(this, CameraPreview.OPEN_TYPE_IMAGE, mTrackingMobile);
}else{
} else {
cameraPreview.onResume(this, CameraPreview.OPEN_TYPE_IMAGE_CUSTOM, garbageTrackingMobile);
}
}
@ -105,7 +103,7 @@ public class ImageCameraActivity extends AppCompatActivity implements CameraPrev
@Override
protected void onPause() {
super.onPause();
cameraPreview.onPause();
cameraPreview.onPause();
}
@Override
@ -124,7 +122,7 @@ public class ImageCameraActivity extends AppCompatActivity implements CameraPrev
@Override
public void onRecognitionDataCallBack(final String result, final String time) {
if(enterType == TYPE_DEMO) {
if (enterType == TYPE_DEMO) {
if (recognitionObjectBeanList != null) {
recognitionObjectBeanList.clear();
} else {
@ -175,10 +173,10 @@ public class ImageCameraActivity extends AppCompatActivity implements CameraPrev
horTextView.setLeftTitle(bean.getName());
horTextView.setRightContent(String.format("%.2f", (100 * bean.getScore())) + "%");
horTextView.setBottomLineVisible(View.VISIBLE);
if (classNum == 1){
if (classNum == 1) {
horTextView.getTvLeftTitle().setTextColor(getResources().getColor(R.color.text_blue));
horTextView.getTvRightContent().setTextColor(getResources().getColor(R.color.text_blue));
}else{
} else {
horTextView.getTvLeftTitle().setTextColor(getResources().getColor(R.color.white));
horTextView.getTvRightContent().setTextColor(getResources().getColor(R.color.white));
}
@ -212,7 +210,7 @@ public class ImageCameraActivity extends AppCompatActivity implements CameraPrev
}
}
private void showLoadView(){
private void showLoadView() {
TextView textView = new TextView(this);
textView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
textView.setText("Keep moving.");

@ -1,11 +1,11 @@
package com.mindspore.himindspore.imageclassification.ui;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import com.mindspore.himindspore.R;
public class ImageMainActivity extends AppCompatActivity {
@ -19,8 +19,8 @@ public class ImageMainActivity extends AppCompatActivity {
findViewById(R.id.btn_demo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(ImageMainActivity.this,ImageCameraActivity.class);
intent.putExtra(ImageCameraActivity.OPEN_TYPE,ImageCameraActivity.TYPE_DEMO);
Intent intent = new Intent(ImageMainActivity.this, ImageCameraActivity.class);
intent.putExtra(ImageCameraActivity.OPEN_TYPE, ImageCameraActivity.TYPE_DEMO);
startActivity(intent);
}
});
@ -28,8 +28,8 @@ public class ImageMainActivity extends AppCompatActivity {
findViewById(R.id.btn_custom).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(ImageMainActivity.this,ImageCameraActivity.class);
intent.putExtra(ImageCameraActivity.OPEN_TYPE,ImageCameraActivity.TYPE_CUSTOM);
Intent intent = new Intent(ImageMainActivity.this, ImageCameraActivity.class);
intent.putExtra(ImageCameraActivity.OPEN_TYPE, ImageCameraActivity.TYPE_CUSTOM);
startActivity(intent);
}
});

@ -0,0 +1,22 @@
package com.mindspore.himindspore.mvp;
import com.mindspore.himindspore.net.FileDownLoadObserver;
import com.mindspore.himindspore.net.UpdateInfoBean;
import java.io.File;
public interface MainContract {
interface View {
void showUpdateResult(UpdateInfoBean object);
void showFail(String s);
}
interface Presenter {
void getUpdateInfo();
void downloadApk(String destDir, String fileName, FileDownLoadObserver<File> fileDownLoadObserver);
}
}

@ -0,0 +1,65 @@
package com.mindspore.himindspore.mvp;
import android.util.Log;
import com.mindspore.himindspore.SplashActivity;
import com.mindspore.himindspore.base.BasePresenter;
import com.mindspore.himindspore.net.FileDownLoadObserver;
import com.mindspore.himindspore.net.RetrofitHelper;
import com.mindspore.himindspore.net.UpdateInfoBean;
import java.io.File;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class MainPresenter extends BasePresenter<SplashActivity> implements MainContract.Presenter {
private static final String TAG = "MainPresenter";
private RetrofitHelper retrofitHelper;
public MainPresenter(SplashActivity mainActivity) {
this.view = mainActivity;
retrofitHelper = new RetrofitHelper();
}
@Override
public void getUpdateInfo() {
retrofitHelper.getUpdateInfo().enqueue(new Callback<UpdateInfoBean>() {
@Override
public void onResponse(Call<UpdateInfoBean> call, Response<UpdateInfoBean> response) {
Log.i(TAG, "onResponse" + response.toString());
view.showUpdateResult(response.body());
}
@Override
public void onFailure(Call<UpdateInfoBean> call, Throwable t) {
Log.e(TAG, "onFailure" + t.toString());
view.showFail(call.toString());
}
});
}
@Override
public void downloadApk(final String destDir, final String fileName, final FileDownLoadObserver<File> fileDownLoadObserver) {
retrofitHelper.downlaodApk()
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.map(new Function<ResponseBody, File>() {
@Override
public File apply(@NonNull ResponseBody responseBody) throws Exception {
return fileDownLoadObserver.saveFile(responseBody, destDir, fileName);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(fileDownLoadObserver);
}
}

@ -0,0 +1,73 @@
package com.mindspore.himindspore.net;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import io.reactivex.observers.DefaultObserver;
import okhttp3.ResponseBody;
public abstract class FileDownLoadObserver<T> extends DefaultObserver<T> {
@Override
public void onNext(T t) {
onDownLoadSuccess(t);
}
@Override
public void onError(Throwable e) {
onDownLoadFail(e);
}
@Override
public void onComplete() {
}
public abstract void onDownLoadSuccess(T t);
public abstract void onDownLoadFail(Throwable throwable);
public abstract void onProgress(int progress, long total);
public File saveFile(ResponseBody responseBody, String destFileDir, String destFileName) throws IOException {
InputStream is = null;
byte[] buf = new byte[2048];
int len = 0;
FileOutputStream fos = null;
try {
is = responseBody.byteStream();
final long total = responseBody.contentLength();
long sum = 0;
File dir = new File(destFileDir);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, destFileName);
fos = new FileOutputStream(file);
while ((len = is.read(buf)) != -1) {
sum += len;
fos.write(buf, 0, len);
final long finalSum = sum;
onProgress((int) (finalSum * 100 / total), total);
}
fos.flush();
return file;
} finally {
try {
if (is != null) is.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fos != null) fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

@ -0,0 +1,45 @@
package com.mindspore.himindspore.net;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitHelper {
public static final String MS_BASE_HOST = "https://download.mindspore.cn/model_zoo/official/lite/apk/";
private RetrofitService retrofitService;
public RetrofitHelper() {
OkHttpClient httpClient = new OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.connectTimeout(30, TimeUnit.SECONDS)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(MS_BASE_HOST)
.client(httpClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
retrofitService = retrofit.create(RetrofitService.class);
}
public Call<UpdateInfoBean> getUpdateInfo() {
return retrofitService.getUpdateInfo();
}
public Observable<ResponseBody> downlaodApk() {
return retrofitService.downloadApk();
}
}

@ -0,0 +1,17 @@
package com.mindspore.himindspore.net;
import io.reactivex.Observable;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Streaming;
public interface RetrofitService {
@GET("version.json")
Call<UpdateInfoBean> getUpdateInfo();
@Streaming
@GET("himindsporedemo.apk")
Observable<ResponseBody> downloadApk();
}

@ -0,0 +1,68 @@
package com.mindspore.himindspore.net;
public class UpdateInfoBean {
private int versionCode;
private String versionName;
private int forceUpdate;
private String create_time;
private String url;
private String md5;
private String message;
public int getVersionCode() {
return versionCode;
}
public void setVersionCode(int versionCode) {
this.versionCode = versionCode;
}
public String getVersionName() {
return versionName;
}
public void setVersionName(String versionName) {
this.versionName = versionName;
}
public int getForceUpdate() {
return forceUpdate;
}
public void setForceUpdate(int forceUpdate) {
this.forceUpdate = forceUpdate;
}
public String getCreate_time() {
return create_time;
}
public void setCreate_time(String create_time) {
this.create_time = create_time;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getMd5() {
return md5;
}
public void setMd5(String md5) {
this.md5 = md5;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

@ -15,7 +15,7 @@ public class RecognitionObjectBean {
private float right;
private float bottom;
private RecognitionObjectBean(Builder builder){
private RecognitionObjectBean(Builder builder) {
this.rectID = builder.rectID;
this.imgID = builder.imgID;
this.objectName = builder.objectName;
@ -37,7 +37,7 @@ public class RecognitionObjectBean {
private float right;
private float bottom;
public RecognitionObjectBean build(){
public RecognitionObjectBean build() {
return new RecognitionObjectBean(this);
}

@ -5,7 +5,7 @@ import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.util.Log;
import com.mindspore.himindspore.track.TrackListener;
import com.mindspore.himindspore.base.TrackListener;
import java.io.FileNotFoundException;
import java.io.InputStream;
@ -40,24 +40,24 @@ public class ObjectTrackingMobile implements TrackListener {
* jni Load model
*
* @param assetManager assetManager
* @param buffer buffer
* @param numThread numThread
* @param buffer buffer
* @param numThread numThread
* @return Load model data
*/
public native long loadModel(AssetManager assetManager, ByteBuffer buffer, int numThread);
/**
* jni Run model
*
*
* @param netEnv Load model data
* @param img Current picture
* @param img Current picture
* @return Run model data
*/
public native String runNet(long netEnv, Bitmap img);
/**
* Unbind model data
*
*
* @param netEnv model data
* @return Unbound state
*/
@ -65,7 +65,7 @@ public class ObjectTrackingMobile implements TrackListener {
/**
* C++ encapsulated as a method of the msnetworks class
*
*
* @param assetManager Model file location
* @return Loading model file status
*/
@ -79,7 +79,7 @@ public class ObjectTrackingMobile implements TrackListener {
/**
* Run Mindspore
*
*
* @param img Current image recognition
* @return Recognized text information
*/
@ -90,6 +90,7 @@ public class ObjectTrackingMobile implements TrackListener {
/**
* Unbound model
*
* @return true
*/
public boolean unloadModel() {
@ -99,8 +100,9 @@ public class ObjectTrackingMobile implements TrackListener {
/**
* Load model file stream
*
* @param modelPath Model file path
* @return Load model file stream
* @return Load model file stream
*/
public ByteBuffer loadModelFile(String modelPath) {
InputStream is = null;

@ -8,7 +8,6 @@ import androidx.appcompat.app.AppCompatActivity;
import com.mindspore.himindspore.R;
import com.mindspore.himindspore.camera.CameraPreview;
import com.mindspore.himindspore.imageclassification.help.ImageTrackingMobile;
import com.mindspore.himindspore.objectdetection.bean.RecognitionObjectBean;
import com.mindspore.himindspore.objectdetection.help.ObjectTrackingMobile;
@ -20,7 +19,7 @@ import static com.mindspore.himindspore.objectdetection.bean.RecognitionObjectBe
/**
* main page of entrance
*
* <p>
* Pass in pictures to JNI, test mindspore model, load reasoning, etc
*/
@ -29,7 +28,7 @@ public class ObjectCameraActivity extends AppCompatActivity implements CameraPre
private final String TAG = "ObjectCameraActivity";
private CameraPreview cameraPreview;
private ObjectTrackingMobile mTrackingMobile;
private ObjectRectView mObjectRectView;
@ -64,7 +63,7 @@ public class ObjectCameraActivity extends AppCompatActivity implements CameraPre
@Override
protected void onResume() {
super.onResume();
cameraPreview.onResume(this,CameraPreview.OPEN_TYPE_OBJECT,mTrackingMobile);
cameraPreview.onResume(this, CameraPreview.OPEN_TYPE_OBJECT, mTrackingMobile);
}
@ -80,7 +79,7 @@ public class ObjectCameraActivity extends AppCompatActivity implements CameraPre
mObjectRectView.clearCanvas();
return;
}
Log.d(TAG,result);
Log.d(TAG, result);
recognitionObjectBeanList = getRecognitionList(result);
mObjectRectView.setInfo(recognitionObjectBeanList);
}

@ -17,11 +17,10 @@ import android.widget.ImageView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.mindspore.himindspore.R;
import com.mindspore.himindspore.objectdetection.bean.RecognitionObjectBean;
import com.mindspore.himindspore.objectdetection.help.BitmapUtils;
import com.mindspore.himindspore.objectdetection.help.ObjectTrackingMobile;
import com.mindspore.himindspore.objectdetection.bean.RecognitionObjectBean;
import com.mindspore.himindspore.utils.DisplayUtil;
import java.io.FileNotFoundException;
@ -33,7 +32,7 @@ import static com.mindspore.himindspore.objectdetection.bean.RecognitionObjectBe
public class ObjectPhotoActivity extends AppCompatActivity {
private static final String TAG = "ObjectPhotoActivity";
private static final int[] COLORS ={R.color.white,R.color.text_blue,R.color.text_yellow,R.color.text_orange,R.color.text_green};
private static final int[] COLORS = {R.color.white, R.color.text_blue, R.color.text_yellow, R.color.text_orange, R.color.text_green};
private static final int RC_CHOOSE_PHOTO = 1;
@ -61,7 +60,7 @@ public class ObjectPhotoActivity extends AppCompatActivity {
}
private void openGallay(){
private void openGallay() {
Intent intentToPickPic = new Intent(Intent.ACTION_PICK, null);
intentToPickPic.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intentToPickPic, RC_CHOOSE_PHOTO);
@ -76,14 +75,16 @@ public class ObjectPhotoActivity extends AppCompatActivity {
this.imageUri = data.getData();
showOriginImage();
}
} else {
finish();
}
}
private void showOriginImage(){
private void showOriginImage() {
Pair<Integer, Integer> targetedSize = this.getTargetSize();
int targetWidth = targetedSize.first;
int maxHeight = targetedSize.second;
originBitmap = BitmapUtils.loadFromPath(ObjectPhotoActivity.this, imageUri, targetWidth, maxHeight);
originBitmap = BitmapUtils.loadFromPath(ObjectPhotoActivity.this, imageUri, targetWidth, maxHeight);
// Determine how much to scale down the image.
Log.i(ObjectPhotoActivity.TAG, "resized image size width:" + originBitmap.getWidth() + ",height: " + originBitmap.getHeight());
@ -113,8 +114,8 @@ public class ObjectPhotoActivity extends AppCompatActivity {
String result = trackingMobile.MindSpore_runnet(bitmap);
long endTime = System.currentTimeMillis();
Log.d(TAG, "RUNNET CONSUMING"+(endTime-startTime)+"ms");
Log.d(TAG, "result"+ result);
Log.d(TAG, "RUNNET CONSUMING" + (endTime - startTime) + "ms");
Log.d(TAG, "result" + result);
recognitionObjectBeanList = getRecognitionList(result);
@ -126,29 +127,31 @@ public class ObjectPhotoActivity extends AppCompatActivity {
private void drawRect(Bitmap bitmap) {
Canvas canvas = new Canvas(bitmap);
Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setTextSize(DisplayUtil.sp2px(this,16));
mPaint.setTextSize(DisplayUtil.sp2px(this, 16));
//Draw only outline (stroke)
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(DisplayUtil.dip2px(this,2));
mPaint.setStrokeWidth(DisplayUtil.dip2px(this, 2));
for (int i = 0; i < recognitionObjectBeanList.size(); i++) {
RecognitionObjectBean objectBean = recognitionObjectBeanList.get(i);
StringBuilder sb = new StringBuilder();
sb.append(objectBean.getRectID()).append("_").append(objectBean.getObjectName()).append("_").append(String.format("%.2f", (100 * objectBean.getScore())) + "%");
int paintColor =getResources().getColor(COLORS[i % COLORS.length]);
int paintColor = getResources().getColor(COLORS[i % COLORS.length]);
mPaint.setColor(paintColor);
RectF rectF = new RectF(objectBean.getLeft(), objectBean.getTop(), objectBean.getRight(), objectBean.getBottom());
canvas.drawRect(rectF, mPaint);
canvas.drawText(sb.toString(),objectBean.getLeft(), objectBean.getTop()-10,mPaint);
canvas.drawText(sb.toString(), objectBean.getLeft(), objectBean.getTop() - 10, mPaint);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
trackingMobile.unloadModel();
if (trackingMobile != null) {
trackingMobile.unloadModel();
}
BitmapUtils.recycleBitmap(originBitmap);
}

@ -2,7 +2,6 @@ package com.mindspore.himindspore.objectdetection.ui;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.RectF;
@ -10,7 +9,6 @@ import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import com.mindspore.himindspore.R;
import com.mindspore.himindspore.objectdetection.bean.RecognitionObjectBean;
import com.mindspore.himindspore.utils.DisplayUtil;
@ -20,7 +18,7 @@ import java.util.List;
/**
* Rectangle drawing class for object detection
*
* <p>
* 1. CanvasRepresents the canvas attached to the specified view and uses its method to draw various graphics
* 2. PaintRepresents the brush on canvas and is used to set brush color, brush thickness, fill style, etc
*/
@ -38,31 +36,31 @@ public class ObjectRectView extends View {
private Context context;
public ObjectRectView(Context context) {
this(context,null);
this(context, null);
}
public ObjectRectView(Context context, AttributeSet attrs) {
this(context, attrs,0);
this(context, attrs, 0);
}
public ObjectRectView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context =context;
this.context = context;
initialize();
}
private static final int[] MyColor ={R.color.white,R.color.text_blue,R.color.text_yellow,R.color.text_orange,R.color.text_green};
private static final int[] MyColor = {R.color.white, R.color.text_blue, R.color.text_yellow, R.color.text_orange, R.color.text_green};
private void initialize() {
mObjRectF = new RectF();
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setTextSize(DisplayUtil.sp2px(context,16));
mPaint.setTextSize(DisplayUtil.sp2px(context, 16));
//Draw only outline (stroke)
mPaint.setStyle(Style.STROKE);
mPaint.setStrokeWidth(DisplayUtil.dip2px(context,2));
mPaint.setStrokeWidth(DisplayUtil.dip2px(context, 2));
}
/**
@ -71,14 +69,14 @@ public class ObjectRectView extends View {
* @param recognitions
*/
public void setInfo(List<RecognitionObjectBean> recognitions) {
Log.i(TAG, "setInfo: "+recognitions.size());
Log.i(TAG, "setInfo: " + recognitions.size());
mRecognitions.clear();
mRecognitions.addAll(recognitions);
invalidate();
}
public void clearCanvas(){
public void clearCanvas() {
mRecognitions.clear();
invalidate();
}
@ -90,7 +88,7 @@ public class ObjectRectView extends View {
if (mRecognitions == null || mRecognitions.size() == 0) {
return;
}
for (int i = 0;i<mRecognitions.size();i++){
for (int i = 0; i < mRecognitions.size(); i++) {
RecognitionObjectBean bean = mRecognitions.get(i);
mPaint.setColor(context.getResources().getColor(MyColor[i % MyColor.length]));
drawRect(bean, canvas);
@ -98,14 +96,13 @@ public class ObjectRectView extends View {
}
public void drawRect(RecognitionObjectBean bean, Canvas canvas) {
StringBuilder sb = new StringBuilder();
sb.append(bean.getRectID()).append("_").append(bean.getObjectName()).append("_").append(String.format("%.2f", (100 * bean.getScore())) + "%");
mObjRectF = new RectF(bean.getLeft(), bean.getTop(), bean.getRight(), bean.getBottom());
canvas.drawRect(mObjRectF, mPaint);
canvas.drawText(sb.toString(), mObjRectF.left, mObjRectF.top - DisplayUtil.dip2px(context,10) , mPaint);
canvas.drawText(sb.toString(), mObjRectF.left, mObjRectF.top - DisplayUtil.dip2px(context, 10), mPaint);
}
}

@ -5,9 +5,9 @@ import android.content.Context;
public class DisplayUtil {
private DisplayUtil() {
/* cannot be instantiated */
throw new UnsupportedOperationException("cannot be instantiated");
}
/* cannot be instantiated */
throw new UnsupportedOperationException("cannot be instantiated");
}
public static int px2dip(Context context, float pxValue) {

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save