diff --git a/model_zoo/official/lite/image_classification/README.en.md b/model_zoo/official/lite/image_classification/README.en.md index fc3ff983e4..73ea1ec55d 100644 --- a/model_zoo/official/lite/image_classification/README.en.md +++ b/model_zoo/official/lite/image_classification/README.en.md @@ -66,7 +66,7 @@ app │ | └── MindSporeNetnative.h # header file │ | │ ├── java # application code at the Java layer -│ │ └── com.mindspore.himindsporedemo +│ │ └── com.mindspore.classification │ │ ├── gallery.classify # implementation related to image processing and MindSpore JNI calling │ │ │ └── ... │ │ └── widget # implementation related to camera enabling and drawing diff --git a/model_zoo/official/lite/image_classification/README.md b/model_zoo/official/lite/image_classification/README.md index 0952dcd9ff..ca656090a3 100644 --- a/model_zoo/official/lite/image_classification/README.md +++ b/model_zoo/official/lite/image_classification/README.md @@ -75,7 +75,7 @@ app | | └── MsNetWork.cpp # MindSpre接口封装 │ | │ ├── java # java层应用代码 -│ │ └── com.mindspore.himindsporedemo +│ │ └── com.mindspore.classification │ │ ├── gallery.classify # 图像处理及MindSpore JNI调用相关实现 │ │ │ └── ... │ │ └── widget # 开启摄像头及绘制相关实现 diff --git a/model_zoo/official/lite/image_classification/app/build.gradle b/model_zoo/official/lite/image_classification/app/build.gradle index 8b62db4e62..7e4b0e8b2c 100644 --- a/model_zoo/official/lite/image_classification/app/build.gradle +++ b/model_zoo/official/lite/image_classification/app/build.gradle @@ -5,7 +5,7 @@ android { buildToolsVersion "30.0.1" defaultConfig { - applicationId "com.mindspore.himindsporedemo" + applicationId "com.mindspore.classification" minSdkVersion 21 targetSdkVersion 30 versionCode 1 diff --git a/model_zoo/official/lite/image_classification/app/src/androidTest/java/com/mindspore/himindsporedemo/ExampleInstrumentedTest.java b/model_zoo/official/lite/image_classification/app/src/androidTest/java/com/mindspore/classification/ExampleInstrumentedTest.java similarity index 91% rename from model_zoo/official/lite/image_classification/app/src/androidTest/java/com/mindspore/himindsporedemo/ExampleInstrumentedTest.java rename to model_zoo/official/lite/image_classification/app/src/androidTest/java/com/mindspore/classification/ExampleInstrumentedTest.java index 8e92055233..4418c07a67 100644 --- a/model_zoo/official/lite/image_classification/app/src/androidTest/java/com/mindspore/himindsporedemo/ExampleInstrumentedTest.java +++ b/model_zoo/official/lite/image_classification/app/src/androidTest/java/com/mindspore/classification/ExampleInstrumentedTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.mindspore.himindsporedemo; +package com.mindspore.classification; import android.content.Context; @@ -37,6 +37,6 @@ public class ExampleInstrumentedTest { public void useAppContext() { // Context of the app under test. Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.mindspore.himindsporedemo", appContext.getPackageName()); + assertEquals("com.mindspore.classification", appContext.getPackageName()); } } diff --git a/model_zoo/official/lite/image_classification/app/src/main/AndroidManifest.xml b/model_zoo/official/lite/image_classification/app/src/main/AndroidManifest.xml index 61c751da23..b48c6a6022 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/AndroidManifest.xml +++ b/model_zoo/official/lite/image_classification/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ @@ -20,7 +20,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> diff --git a/model_zoo/official/lite/image_classification/app/src/main/cpp/MindSporeNetnative.cpp b/model_zoo/official/lite/image_classification/app/src/main/cpp/MindSporeNetnative.cpp index 282065ebfb..8f0855e87c 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/cpp/MindSporeNetnative.cpp +++ b/model_zoo/official/lite/image_classification/app/src/main/cpp/MindSporeNetnative.cpp @@ -343,7 +343,7 @@ bool PreProcessImageData(const LiteMat &lite_mat_bgr, LiteMat *lite_norm_mat_ptr */ extern "C" JNIEXPORT jlong JNICALL -Java_com_mindspore_himindsporedemo_gallery_classify_TrackingMobile_loadModel(JNIEnv *env, +Java_com_mindspore_classification_gallery_classify_TrackingMobile_loadModel(JNIEnv *env, jobject thiz, jobject model_buffer, jint num_thread) { @@ -396,7 +396,7 @@ Java_com_mindspore_himindsporedemo_gallery_classify_TrackingMobile_loadModel(JNI * sending a picture to the model and run inference. */ extern "C" JNIEXPORT jstring JNICALL -Java_com_mindspore_himindsporedemo_gallery_classify_TrackingMobile_runNet(JNIEnv *env, jclass type, +Java_com_mindspore_classification_gallery_classify_TrackingMobile_runNet(JNIEnv *env, jclass type, jlong netEnv, jobject srcBitmap) { LiteMat lite_mat_bgr, lite_norm_mat_cut; @@ -469,7 +469,7 @@ Java_com_mindspore_himindsporedemo_gallery_classify_TrackingMobile_runNet(JNIEnv } extern "C" JNIEXPORT jboolean JNICALL -Java_com_mindspore_himindsporedemo_gallery_classify_TrackingMobile_unloadModel(JNIEnv *env, +Java_com_mindspore_classification_gallery_classify_TrackingMobile_unloadModel(JNIEnv *env, jclass type, jlong netEnv) { MS_PRINT("MindSpore release net."); diff --git a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/gallery/classify/CompareSizesByArea.java b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/gallery/classify/CompareSizesByArea.java similarity index 94% rename from model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/gallery/classify/CompareSizesByArea.java rename to model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/gallery/classify/CompareSizesByArea.java index a2ee1f5ebe..f72628d185 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/gallery/classify/CompareSizesByArea.java +++ b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/gallery/classify/CompareSizesByArea.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.mindspore.himindsporedemo.gallery.classify; +package com.mindspore.classification.gallery.classify; import android.util.Size; import java.util.Comparator; diff --git a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/gallery/classify/RecognitionObjectBean.java b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/gallery/classify/RecognitionObjectBean.java similarity index 95% rename from model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/gallery/classify/RecognitionObjectBean.java rename to model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/gallery/classify/RecognitionObjectBean.java index 86ddb37d8c..23cd5b902b 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/gallery/classify/RecognitionObjectBean.java +++ b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/gallery/classify/RecognitionObjectBean.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.mindspore.himindsporedemo.gallery.classify; +package com.mindspore.classification.gallery.classify; public class RecognitionObjectBean { diff --git a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/gallery/classify/TrackingMobile.java b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/gallery/classify/TrackingMobile.java similarity index 97% rename from model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/gallery/classify/TrackingMobile.java rename to model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/gallery/classify/TrackingMobile.java index 8c1995f78b..4c01c4fa33 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/gallery/classify/TrackingMobile.java +++ b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/gallery/classify/TrackingMobile.java @@ -14,10 +14,9 @@ * limitations under the License. */ -package com.mindspore.himindsporedemo.gallery.classify; +package com.mindspore.classification.gallery.classify; import android.content.Context; -import android.content.res.AssetManager; import android.graphics.Bitmap; import android.util.Log; diff --git a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/AutoFitTextureView.java b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/AutoFitTextureView.java similarity index 94% rename from model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/AutoFitTextureView.java rename to model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/AutoFitTextureView.java index cf9fb59630..c1f41788ec 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/AutoFitTextureView.java +++ b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/AutoFitTextureView.java @@ -14,11 +14,10 @@ * limitations under the License. */ -package com.mindspore.himindsporedemo.widget; +package com.mindspore.classification.widget; import android.content.Context; import android.util.AttributeSet; -import android.util.Log; import android.view.TextureView; public class AutoFitTextureView extends TextureView { @@ -64,7 +63,7 @@ public class AutoFitTextureView extends TextureView { if (0 == mRatioWidth || 0 == mRatioHeight) { setMeasuredDimension(width, height); } else { - if (width < height * mRatioWidth / mRatioHeight) { + if (width > height * mRatioWidth / mRatioHeight) { setMeasuredDimension(width, width * mRatioHeight / mRatioWidth); } else { setMeasuredDimension(height * mRatioWidth / mRatioHeight, height); diff --git a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/CameraActivity.java b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/CameraActivity.java similarity index 62% rename from model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/CameraActivity.java rename to model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/CameraActivity.java index 37097fce39..cac0fded16 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/CameraActivity.java +++ b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/CameraActivity.java @@ -14,13 +14,17 @@ * limitations under the License. */ -package com.mindspore.himindsporedemo.widget; +package com.mindspore.classification.widget; import android.Manifest; +import android.content.DialogInterface; +import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Color; +import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.provider.Settings; import android.util.Log; import android.view.Gravity; import android.view.View; @@ -30,11 +34,16 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.UiThread; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; -import com.mindspore.himindsporedemo.R; -import com.mindspore.himindsporedemo.gallery.classify.RecognitionObjectBean; +import com.mindspore.classification.R; +import com.mindspore.classification.gallery.classify.RecognitionObjectBean; import java.util.ArrayList; import java.util.Collections; @@ -48,11 +57,13 @@ import java.util.List; public class CameraActivity extends AppCompatActivity{ private static final String TAG = "CameraActivity"; - private static final String BUNDLE_FRAGMENTS_KEY = "android:support:fragments"; - - private static final int PERMISSIONS_REQUEST = 1; + private static final String[] PERMISSIONS = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_PHONE_STATE, Manifest.permission.CAMERA}; + private static final int REQUEST_PERMISSION = 1; + private static final int REQUEST_PERMISSION_AGAIN = 2; + private boolean isAllGranted; - private static final String PERMISSION_CAMERA = Manifest.permission.CAMERA; + private static final String BUNDLE_FRAGMENTS_KEY = "android:support:fragments"; private LinearLayout bottomLayout; @@ -67,63 +78,95 @@ public class CameraActivity extends AppCompatActivity{ // Clear the state of the fragment when rebuilding. savedInstanceState.remove(BUNDLE_FRAGMENTS_KEY); } - super.onCreate(null); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.activity_camera); - - if (hasPermission()) { - setFragment(); - } else { - requestPermission(); - } - bottomLayout = findViewById(R.id.layout_bottom_content); + requestPermissions(); } - @Override - public void onRequestPermissionsResult(final int requestCode, final String[] permissions, - final int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == PERMISSIONS_REQUEST) { - if (allPermissionsGranted(grantResults)) { - setFragment(); + private void requestPermissions() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + isAllGranted = checkPermissionAllGranted(PERMISSIONS); + if (!isAllGranted) { + ActivityCompat.requestPermissions(this, PERMISSIONS, REQUEST_PERMISSION); } else { - requestPermission(); + addCameraFragment(); } + } else { + isAllGranted = true; + addCameraFragment(); } } - private static boolean allPermissionsGranted(final int[] grantResults) { - for (int result : grantResults) { - if (result != PackageManager.PERMISSION_GRANTED) { + + private boolean checkPermissionAllGranted(String[] permissions) { + for (String permission : permissions) { + if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } - private boolean hasPermission() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - return checkSelfPermission(PERMISSION_CAMERA) == PackageManager.PERMISSION_GRANTED; - } else { - return true; + /** + * Authority application result callback + */ + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + if (REQUEST_PERMISSION == requestCode) { + isAllGranted = true; + + for (int grant : grantResults) { + if (grant != PackageManager.PERMISSION_GRANTED) { + isAllGranted = false; + break; + } + } + if (!isAllGranted) { + openAppDetails(); + } else { + addCameraFragment(); + } } } - private void requestPermission() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (shouldShowRequestPermissionRationale(PERMISSION_CAMERA)) { - Toast.makeText(CameraActivity.this, "Camera permission is required for this demo", Toast.LENGTH_LONG) - .show(); + private void openAppDetails() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setMessage("PoseNet 需要访问 “相机” 和 “外部存储器”,请到 “应用信息 -> 权限” 中授予!"); + builder.setPositiveButton("去手动授权", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intent = new Intent(); + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.setData(Uri.parse("package:" + getPackageName())); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + startActivityForResult(intent, REQUEST_PERMISSION_AGAIN); + } + }); + builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + finish(); } - requestPermissions(new String[]{PERMISSION_CAMERA}, PERMISSIONS_REQUEST); + }); + builder.show(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (REQUEST_PERMISSION_AGAIN == requestCode) { + requestPermissions(); } } - protected void setFragment() { + protected void addCameraFragment() { CameraFragment cameraFragment = CameraFragment.newInstance(new CameraFragment.RecognitionDataCallBack() { @Override public void onRecognitionDataCallBack(String result, final String time) { @@ -136,8 +179,6 @@ public class CameraActivity extends AppCompatActivity{ .commitAllowingStateLoss(); } - - private void dealRecognitionData(String result, final String time) { if (recognitionObjectBeanList != null) { recognitionObjectBeanList.clear(); diff --git a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/CameraFragment.java b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/CameraFragment.java similarity index 99% rename from model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/CameraFragment.java rename to model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/CameraFragment.java index 0e3af9877c..3118d1b203 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/CameraFragment.java +++ b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/CameraFragment.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.mindspore.himindsporedemo.widget; +package com.mindspore.classification.widget; import android.annotation.SuppressLint; import android.app.Activity; @@ -49,16 +49,15 @@ import android.view.Surface; import android.view.TextureView; import android.view.View; import android.view.ViewGroup; -import android.view.ViewTreeObserver; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import com.mindspore.himindsporedemo.R; -import com.mindspore.himindsporedemo.gallery.classify.CompareSizesByArea; -import com.mindspore.himindsporedemo.gallery.classify.TrackingMobile; +import com.mindspore.classification.R; +import com.mindspore.classification.gallery.classify.CompareSizesByArea; +import com.mindspore.classification.gallery.classify.TrackingMobile; import java.io.File; import java.util.ArrayList; diff --git a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/HorTextView.java b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/HorTextView.java similarity index 95% rename from model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/HorTextView.java rename to model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/HorTextView.java index bb6dab3bab..e515b8bb93 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/himindsporedemo/widget/HorTextView.java +++ b/model_zoo/official/lite/image_classification/app/src/main/java/com/mindspore/classification/widget/HorTextView.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.mindspore.himindsporedemo.widget; +package com.mindspore.classification.widget; import android.content.Context; import android.util.AttributeSet; @@ -25,7 +25,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; -import com.mindspore.himindsporedemo.R; +import com.mindspore.classification.R; public class HorTextView extends LinearLayout { private TextView tvLeftTitle, tvRightContent; diff --git a/model_zoo/official/lite/image_classification/app/src/main/res/layout/activity_camera.xml b/model_zoo/official/lite/image_classification/app/src/main/res/layout/activity_camera.xml index 45991ffec8..8daee6efa1 100644 --- a/model_zoo/official/lite/image_classification/app/src/main/res/layout/activity_camera.xml +++ b/model_zoo/official/lite/image_classification/app/src/main/res/layout/activity_camera.xml @@ -17,7 +17,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/black" - tools:context="com.mindspore.himindsporedemo.widget.CameraActivity" /> + tools:context="com.mindspore.classification.widget.CameraActivity" /> - diff --git a/model_zoo/official/lite/image_classification/app/src/test/java/com/mindspore/himindsporedemo/ExampleUnitTest.java b/model_zoo/official/lite/image_classification/app/src/test/java/com/mindspore/classification/ExampleUnitTest.java similarity index 96% rename from model_zoo/official/lite/image_classification/app/src/test/java/com/mindspore/himindsporedemo/ExampleUnitTest.java rename to model_zoo/official/lite/image_classification/app/src/test/java/com/mindspore/classification/ExampleUnitTest.java index 859d1847ba..15a015ba8c 100644 --- a/model_zoo/official/lite/image_classification/app/src/test/java/com/mindspore/himindsporedemo/ExampleUnitTest.java +++ b/model_zoo/official/lite/image_classification/app/src/test/java/com/mindspore/classification/ExampleUnitTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.mindspore.himindsporedemo; +package com.mindspore.classification; import org.junit.Test;