parent
25c388e01e
commit
6245fdd584
@ -0,0 +1,83 @@
|
||||
# MindSpore
|
||||
build/
|
||||
app/src/main/cpp/mindspore-lite*
|
||||
app/src/main/assets/model/
|
||||
mindspore/lib
|
||||
output
|
||||
*.ir
|
||||
mindspore/ccsrc/schema/inner/*
|
||||
|
||||
# Cmake files
|
||||
CMakeFiles/
|
||||
cmake_install.cmake
|
||||
CMakeCache.txt
|
||||
Makefile
|
||||
cmake-build-debug
|
||||
|
||||
# Dynamic libraries
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Static libraries
|
||||
*.la
|
||||
*.lai
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Protocol buffers
|
||||
*_pb2.py
|
||||
*.pb.h
|
||||
*.pb.cc
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
|
||||
# Editor
|
||||
.vscode
|
||||
.idea/
|
||||
|
||||
# Cquery
|
||||
.cquery_cached_index/
|
||||
compile_commands.json
|
||||
|
||||
# Ctags and cscope
|
||||
tags
|
||||
TAGS
|
||||
CTAGS
|
||||
GTAGS
|
||||
GRTAGS
|
||||
GSYMS
|
||||
GPATH
|
||||
cscope.*
|
||||
|
||||
# Python files
|
||||
*__pycache__*
|
||||
.pytest_cache
|
||||
|
||||
# Mac files
|
||||
*.DS_Store
|
||||
|
||||
# Test results
|
||||
test_temp_summary_event_file/
|
||||
*.dot
|
||||
*.dat
|
||||
*.svg
|
||||
*.perf
|
||||
*.info
|
||||
*.ckpt
|
||||
*.shp
|
||||
*.pkl
|
||||
.clangd
|
||||
mindspore/version.py
|
||||
mindspore/default_config.py
|
||||
mindspore/.commit_id
|
||||
onnx.proto
|
||||
mindspore/ccsrc/onnx.proto
|
||||
|
||||
# Android
|
||||
local.properties
|
||||
.gradle
|
||||
sdk/build
|
||||
sdk/.cxx
|
||||
app/.cxx
|
@ -0,0 +1,2 @@
|
||||
/build
|
||||
/src/main/cpp/mindspore-lite-1.0.0-minddata-arm64-cpu/
|
@ -0,0 +1,86 @@
|
||||
# For more information about using CMake with Android Studio, read the
|
||||
# documentation: https://d.android.com/studio/projects/add-native-code.html
|
||||
|
||||
# Sets the minimum version of CMake required to build the native library.
|
||||
|
||||
cmake_minimum_required(VERSION 3.4.1)
|
||||
|
||||
set(CMAKE_VERBOSE_MAKEFILE on)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI})
|
||||
|
||||
set(MINDSPORELITE_VERSION mindspore-lite-1.0.1-runtime-arm64-cpu)
|
||||
|
||||
# ============== Set MindSpore Dependencies. =============
|
||||
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/third_party/flatbuffers/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION})
|
||||
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/include/ir/dtype)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/include/schema)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/minddata/include)
|
||||
|
||||
add_library(mindspore-lite SHARED IMPORTED )
|
||||
add_library(minddata-lite SHARED IMPORTED )
|
||||
add_library(libmindspore-lite-fp16 SHARED IMPORTED )
|
||||
|
||||
set_target_properties(mindspore-lite PROPERTIES IMPORTED_LOCATION
|
||||
${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/lib/libmindspore-lite.so)
|
||||
set_target_properties(minddata-lite PROPERTIES IMPORTED_LOCATION
|
||||
${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/minddata/lib/libminddata-lite.so)
|
||||
set_target_properties(libmindspore-lite-fp16 PROPERTIES IMPORTED_LOCATION
|
||||
${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/lib/libmindspore-lite-fp16.so)
|
||||
# --------------- MindSpore Lite set End. --------------------
|
||||
|
||||
|
||||
# Creates and names a library, sets it as either STATIC
|
||||
# or SHARED, and provides the relative paths to its source code.
|
||||
# You can define multiple libraries, and CMake builds them for you.
|
||||
# Gradle automatically packages shared libraries with your APK.
|
||||
|
||||
file(GLOB_RECURSE cpp_src "src/main/cpp/*.cpp" "src/main/cpp/*.h")
|
||||
|
||||
add_library( # Sets the name of the library.
|
||||
mlkit-label-MS
|
||||
|
||||
# Sets the library as a shared library.
|
||||
SHARED
|
||||
|
||||
# Provides a relative path to your source file(s).
|
||||
${cpp_src})
|
||||
|
||||
|
||||
# Searches for a specified prebuilt library and stores the path as a
|
||||
# variable. Because CMake includes system libraries in the search path by
|
||||
# default, you only need to specify the name of the public NDK library
|
||||
# you want to add. CMake verifies that the library exists before
|
||||
# completing its build.
|
||||
|
||||
find_library( # Sets the name of the path variable.
|
||||
log-lib
|
||||
|
||||
# Specifies the name of the NDK library that
|
||||
# you want CMake to locate.
|
||||
log )
|
||||
|
||||
|
||||
find_library( jnigraphics-lib jnig·raphics )
|
||||
|
||||
# Specifies libraries CMake should link to your target library. You
|
||||
# can link multiple libraries, such as libraries you define in this
|
||||
# build script, prebuilt third-party libraries, or system libraries.
|
||||
add_definitions(-DMNN_USE_LOGCAT)
|
||||
target_link_libraries( # Specifies the target library.
|
||||
mlkit-label-MS
|
||||
|
||||
# --- mindspore ---
|
||||
minddata-lite
|
||||
mindspore-lite
|
||||
libmindspore-lite-fp16
|
||||
|
||||
# --- other dependencies.---
|
||||
-ljnigraphics
|
||||
android
|
||||
|
||||
# Links the target library to the log library
|
||||
${log-lib}
|
||||
)
|
@ -0,0 +1,72 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 30
|
||||
buildToolsVersion "30.0.1"
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.mindspore.himindspore"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DANDROID_STL=c++_shared"
|
||||
cppFlags "-std=c++17"
|
||||
}
|
||||
}
|
||||
ndk {
|
||||
abiFilters 'arm64-v8a'
|
||||
}
|
||||
}
|
||||
aaptOptions {
|
||||
noCompress '.so', 'ms'
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
|
||||
customDebugType {
|
||||
debuggable true
|
||||
}
|
||||
}
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
path file('CMakeLists.txt')
|
||||
}
|
||||
}
|
||||
ndkVersion '21.3.6528147'
|
||||
|
||||
sourceSets{
|
||||
main {
|
||||
jniLibs.srcDirs = ['libs']
|
||||
}
|
||||
}
|
||||
packagingOptions{
|
||||
pickFirst 'lib/arm64-v8a/libmlkit-label-MS.so'
|
||||
}
|
||||
}
|
||||
|
||||
// Before gradle build.
|
||||
// To download some necessary libraries.
|
||||
apply from:'download.gradle'
|
||||
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
testImplementation 'junit:junit:4.13.1'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
|
||||
implementation 'com.sun.mail:android-mail:1.6.5'
|
||||
implementation 'com.sun.mail:android-activation:1.6.5'
|
||||
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
/**
|
||||
* To download necessary library from HuaWei server.
|
||||
* Including mindspore-lite .so file, minddata-lite .so file and model file.
|
||||
* The libraries can be downloaded manually.
|
||||
*/
|
||||
def targetMindSporeInclude = "src/main/cpp/"
|
||||
def mindsporeLite_Version = "mindspore-lite-1.0.1-runtime-arm64-cpu"
|
||||
|
||||
def targetModelFile = "src/main/assets/model/mobilenetv2.ms"
|
||||
def mindSporeLibrary_arm64 = "src/main/cpp/${mindsporeLite_Version}.tar.gz"
|
||||
|
||||
def modelDownloadUrl = "https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite/mobilenetv2.ms"
|
||||
//def mindsporeLiteDownloadUrl = "https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.0.0/lite/android_aarch64/${mindsporeLite_Version}.tar.gz"
|
||||
def mindsporeLiteDownloadUrl = "https://download.mindspore.cn/model_zoo/official/lite/lib/mindspore%20version%201.0.1/${mindsporeLite_Version}.tar.gz"
|
||||
|
||||
def targetObjectModelFile = "src/main/assets/model/ssd.ms"
|
||||
def targetGarbageModelFile = "src/main/assets/model/garbage_mobilenetv2.ms"
|
||||
|
||||
def modelObjectDownloadUrl = "https://download.mindspore.cn/model_zoo/official/lite/ssd_mobilenetv2_lite/ssd.ms"
|
||||
def modelGarbageDownloadUrl = "https://download.mindspore.cn/model_zoo/official/lite/garbage_mobilenetv2_lite/garbage_mobilenetv2.ms"
|
||||
|
||||
def cleantargetMindSporeInclude = "src/main/cpp"
|
||||
|
||||
task cleanCmakeCache(type: Delete) {
|
||||
delete '.cxx/cmake/debug'
|
||||
delete '.cxx/cmake/release'
|
||||
}
|
||||
|
||||
task downloadModelFile(type: DownloadUrlTask) {
|
||||
doFirst {
|
||||
println "Downloading ${modelDownloadUrl}"
|
||||
}
|
||||
sourceUrl = "${modelDownloadUrl}"
|
||||
target = file("${targetModelFile}")
|
||||
}
|
||||
|
||||
task downloadObjectModelFile(type: DownloadUrlTask) {
|
||||
doFirst {
|
||||
println "Downloading ${modelObjectDownloadUrl}"
|
||||
}
|
||||
sourceUrl = "${modelObjectDownloadUrl}"
|
||||
target = file("${targetObjectModelFile}")
|
||||
}
|
||||
|
||||
task downloadGarbageModelFile(type: DownloadUrlTask) {
|
||||
doFirst {
|
||||
println "Downloading ${modelGarbageDownloadUrl}"
|
||||
}
|
||||
sourceUrl = "${modelGarbageDownloadUrl}"
|
||||
target = file("${targetGarbageModelFile}")
|
||||
}
|
||||
|
||||
task downloadMindSporeLibrary(type: DownloadUrlTask) {
|
||||
doFirst {
|
||||
println "Downloading ${mindsporeLiteDownloadUrl}"
|
||||
}
|
||||
sourceUrl = "${mindsporeLiteDownloadUrl}"
|
||||
target = file("${mindSporeLibrary_arm64}")
|
||||
}
|
||||
|
||||
task unzipMindSporeInclude(type: Copy, dependsOn: 'downloadMindSporeLibrary') {
|
||||
doFirst {
|
||||
println "Unzipping ${mindSporeLibrary_arm64}"
|
||||
}
|
||||
from tarTree(resources.gzip("${mindSporeLibrary_arm64}"))
|
||||
into "${targetMindSporeInclude}"
|
||||
}
|
||||
|
||||
task cleanUnusedmindsporeFiles(type: Delete, dependsOn: ['unzipMindSporeInclude']) {
|
||||
delete fileTree("${cleantargetMindSporeInclude}").matching {
|
||||
include "*.tar.gz"
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Using preBuild to download mindspore library and model file.
|
||||
* Run before gradle build.
|
||||
*/
|
||||
if (file("src/main/cpp/${mindsporeLite_Version}/lib/libmindspore-lite.so").exists()){
|
||||
downloadMindSporeLibrary.enabled = false
|
||||
unzipMindSporeInclude.enabled = false
|
||||
cleanUnusedmindsporeFiles.enabled = false
|
||||
}
|
||||
|
||||
if (file("src/main/assets/model/garbage_mobilenetv2.ms").exists()){
|
||||
downloadGarbageModelFile.enabled = false
|
||||
}
|
||||
|
||||
if (file("src/main/assets/model/mobilenetv2.ms").exists()){
|
||||
downloadModelFile.enabled = false
|
||||
}
|
||||
|
||||
if (file("src/main/assets/model/ssd.ms").exists()){
|
||||
downloadObjectModelFile.enabled = false
|
||||
}
|
||||
|
||||
preBuild.dependsOn cleanCmakeCache
|
||||
preBuild.dependsOn downloadModelFile
|
||||
preBuild.dependsOn downloadObjectModelFile
|
||||
preBuild.dependsOn downloadMindSporeLibrary
|
||||
preBuild.dependsOn downloadGarbageModelFile
|
||||
preBuild.dependsOn unzipMindSporeInclude
|
||||
preBuild.dependsOn cleanUnusedmindsporeFiles
|
||||
|
||||
class DownloadUrlTask extends DefaultTask {
|
||||
@Input
|
||||
String sourceUrl
|
||||
|
||||
@OutputFile
|
||||
File target
|
||||
|
||||
@TaskAction
|
||||
void download() {
|
||||
ant.get(src: sourceUrl, dest: target)
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
@ -0,0 +1,26 @@
|
||||
package com.mindspore.himindspore;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
assertEquals("com.mindspore.himindspore", appContext.getPackageName());
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.mindspore.himindspore">
|
||||
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<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.INTERNET" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
<activity
|
||||
android:name=".SplashActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Theme.AppCompat.NoActionBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".imageclassification.ui.ImageMainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Theme.AppCompat.NoActionBar"/>
|
||||
<activity
|
||||
android:name=".contract.ContractActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Theme.AppCompat.NoActionBar" />
|
||||
<activity
|
||||
android:name=".objectdetection.ui.ObjectDetectionMainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Theme.AppCompat.NoActionBar" />
|
||||
<activity
|
||||
android:name=".objectdetection.ui.ObjectCameraActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Theme.AppCompat.NoActionBar" />
|
||||
<activity
|
||||
android:name=".objectdetection.ui.PhotoActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Theme.AppCompat.NoActionBar" />
|
||||
<activity
|
||||
android:name=".imageclassification.ui.ImageCameraActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/Theme.AppCompat.NoActionBar" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* 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.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef GARBAGE_MINDSPORE_JNI_HMS_DEBUG_MINDSPORENETNATIVE_H
|
||||
#define GARBAGE_MINDSPORE_JNI_HMS_DEBUG_MINDSPORENETNATIVE_H
|
||||
|
||||
|
||||
#endif // MINDSPORE_JNI_HMS_DEBUG_MINDSPORENETNATIVE_H
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* 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.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef IMAGE_MINDSPORE_JNI_HMS_DEBUG_MINDSPORENETNATIVE_H
|
||||
#define IMAGE_MINDSPORE_JNI_HMS_DEBUG_MINDSPORENETNATIVE_H
|
||||
|
||||
|
||||
#endif // MINDSPORE_JNI_HMS_DEBUG_MINDSPORENETNATIVE_H
|
@ -0,0 +1,52 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* 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.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "MSNetWork.h"
|
||||
#include <android/log.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#define MS_PRINT(format, ...) __android_log_print(ANDROID_LOG_INFO, "MSJNI", format, ##__VA_ARGS__)
|
||||
|
||||
MSNetWork::MSNetWork(void) : session_(nullptr) {}
|
||||
|
||||
MSNetWork::~MSNetWork(void) {}
|
||||
|
||||
void MSNetWork::CreateSessionMS(char *modelBuffer, size_t bufferLen, mindspore::lite::Context *ctx) {
|
||||
session_ = mindspore::session::LiteSession::CreateSession(ctx);
|
||||
if (session_ == nullptr) {
|
||||
MS_PRINT("Create Session failed.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Compile model.
|
||||
auto model = mindspore::lite::Model::Import(modelBuffer, bufferLen);
|
||||
if (model == nullptr) {
|
||||
MS_PRINT("Import model failed.");
|
||||
return;
|
||||
}
|
||||
|
||||
int ret = session_->CompileGraph(model);
|
||||
if (ret != mindspore::lite::RET_OK) {
|
||||
MS_PRINT("CompileGraph failed.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
int MSNetWork::ReleaseNets(void) {
|
||||
delete session_;
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* 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.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef MSNETWORK_H
|
||||
#define MSNETWORK_H
|
||||
|
||||
#include <context.h>
|
||||
#include <lite_session.h>
|
||||
#include <model.h>
|
||||
#include <errorcode.h>
|
||||
#include <cstdio>
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
#include <functional>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
struct ImgDims {
|
||||
int channel = 0;
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
};
|
||||
|
||||
/*struct SessIterm {
|
||||
std::shared_ptr<mindspore::session::LiteSession> sess = nullptr;
|
||||
};*/
|
||||
|
||||
class MSNetWork {
|
||||
public:
|
||||
MSNetWork();
|
||||
|
||||
~MSNetWork();
|
||||
|
||||
void CreateSessionMS(char *modelBuffer, size_t bufferLen, mindspore::lite::Context *ctx);
|
||||
|
||||
int ReleaseNets(void);
|
||||
|
||||
mindspore::session::LiteSession *session() const { return session_; }
|
||||
private:
|
||||
mindspore::session::LiteSession *session_;
|
||||
};
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,200 @@
|
||||
/**
|
||||
* Copyright 2020 Huawei Technologies Co., Ltd
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* 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.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef HIMINDSPORE_SSD_UTIL_H
|
||||
#define HIMINDSPORE_SSD_UTIL_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
|
||||
class SSDModelUtil {
|
||||
public:
|
||||
// Constructor.
|
||||
SSDModelUtil(int srcImageWidth, int srcImgHeight);
|
||||
|
||||
~SSDModelUtil();
|
||||
|
||||
/**
|
||||
* Return the SSD model post-processing result.
|
||||
* @param branchScores
|
||||
* @param branchBoxData
|
||||
* @return
|
||||
*/
|
||||
std::string getDecodeResult(float *branchScores, float *branchBoxData);
|
||||
|
||||
struct NormalBox {
|
||||
float y;
|
||||
float x;
|
||||
float h;
|
||||
float w;
|
||||
};
|
||||
|
||||
struct YXBoxes {
|
||||
float ymin;
|
||||
float xmin;
|
||||
float ymax;
|
||||
float xmax;
|
||||
};
|
||||
|
||||
struct Product {
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
struct WHBox {
|
||||
float boxw;
|
||||
float boxh;
|
||||
};
|
||||
|
||||
private:
|
||||
std::vector<struct NormalBox> mDefaultBoxes;
|
||||
int inputImageHeight;
|
||||
int inputImageWidth;
|
||||
|
||||
void getDefaultBoxes();
|
||||
|
||||
void ssd_boxes_decode(const NormalBox *boxes,
|
||||
YXBoxes *const decoded_boxes,
|
||||
const float scale0 = 0.1, const float scale1 = 0.2,
|
||||
const int count = 1917);
|
||||
|
||||
void nonMaximumSuppression(const YXBoxes *const decoded_boxes, const float *const scores,
|
||||
const std::vector<int> &in_indexes, std::vector<int> *out_indexes_p,
|
||||
const float nmsThreshold = 0.6,
|
||||
const int count = 1917, const int max_results = 100);
|
||||
|
||||
double IOU(float r1[4], float r2[4]);
|
||||
|
||||
// ============= variables =============.
|
||||
struct network {
|
||||
int model_input_height = 300;
|
||||
int model_input_width = 300;
|
||||
|
||||
int num_default[6] = {3, 6, 6, 6, 6, 6};
|
||||
int feature_size[6] = {19, 10, 5, 3, 2, 1};
|
||||
double min_scale = 0.2;
|
||||
float max_scale = 0.95;
|
||||
float steps[6] = {16, 32, 64, 100, 150, 300};
|
||||
float prior_scaling[2] = {0.1, 0.2};
|
||||
float gamma = 2.0;
|
||||
float alpha = 0.75;
|
||||
int aspect_ratios[6][2] = {{2, 0},
|
||||
{2, 3},
|
||||
{2, 3},
|
||||
{2, 3},
|
||||
{2, 3},
|
||||
{2, 3}};
|
||||
} config;
|
||||
|
||||
float g_thres_map[81] = {0, 0.635, 0.627, 0.589, 0.585, 0.648, 0.664, 0.655,
|
||||
0.481, 0.529, 0.611, 0.641, 0.774, 0.549, 0.513, 0.652,
|
||||
0.552, 0.590, 0.650, 0.575, 0.583, 0.650, 0.656, 0.696,
|
||||
0.653, 0.438, 0.515, 0.459, 0.561, 0.545, 0.635, 0.540,
|
||||
0.560, 0.721, 0.544, 0.548, 0.511, 0.611, 0.592, 0.542,
|
||||
0.512, 0.635, 0.531, 0.437, 0.525, 0.445, 0.484, 0.546,
|
||||
0.490, 0.581, 0.566, 0.516, 0.445, 0.541, 0.613, 0.560,
|
||||
0.483, 0.509, 0.464, 0.543, 0.538, 0.490, 0.576, 0.617,
|
||||
0.577, 0.595, 0.640, 0.585, 0.598, 0.592, 0.514, 0.397,
|
||||
0.592, 0.504, 0.548, 0.642, 0.581, 0.497, 0.545, 0.154,
|
||||
0.580,
|
||||
};
|
||||
|
||||
std::string label_classes[81] = {
|
||||
{"background"},
|
||||
{"human"},
|
||||
{"bike"},
|
||||
{"automobile"},
|
||||
{"motorbike"},
|
||||
{"aircraft"},
|
||||
{"motorbus"},
|
||||
{"train"},
|
||||
{"motortruck"},
|
||||
{"boat"},
|
||||
{"traffic signal"},
|
||||
{"fireplug"},
|
||||
{"stop sign"},
|
||||
{"parking meter"},
|
||||
{"seat"},
|
||||
{"bird"},
|
||||
{"cat"},
|
||||
{"dog"},
|
||||
{"horse"},
|
||||
{"sheep"},
|
||||
{"cow"},
|
||||
{"elephant"},
|
||||
{"bear"},
|
||||
{"zebra"},
|
||||
{"giraffe"},
|
||||
{"knapsack"},
|
||||
{"bumbershoot"},
|
||||
{"purse"},
|
||||
{"neckwear"},
|
||||
{"traveling bag"},
|
||||
{"frisbee"},
|
||||
{"skis"},
|
||||
{"snowboard"},
|
||||
{"sports ball"},
|
||||
{"kite"},
|
||||
{"baseball bat"},
|
||||
{"baseball glove"},
|
||||
{"skateboard"},
|
||||
{"surfboard"},
|
||||
{"tennis racket"},
|
||||
{"bottle"},
|
||||
{"wine glass"},
|
||||
{"cup"},
|
||||
{"fork"},
|
||||
{"knife"},
|
||||
{"spoon"},
|
||||
{"bowl"},
|
||||
{"banana"},
|
||||
{"apple"},
|
||||
{"sandwich"},
|
||||
{"orange"},
|
||||
{"broccoli"},
|
||||
{"carrot"},
|
||||
{"hot dog"},
|
||||
{"pizza"},
|
||||
{"donut"},
|
||||
{"cake"},
|
||||
{"chair"},
|
||||
{"couch"},
|
||||
{"houseplant"},
|
||||
{"bed"},
|
||||
{"dinner table"},
|
||||
{"toilet"},
|
||||
{"television"},
|
||||
{"notebook computer"},
|
||||
{"mouse"},
|
||||
{"remote"},
|
||||
{"keyboard"},
|
||||
{"smartphone"},
|
||||
{"microwave"},
|
||||
{"oven"},
|
||||
{"toaster"},
|
||||
{"water sink"},
|
||||
{"fridge"},
|
||||
{"book"},
|
||||
{"bell"},
|
||||
{"vase"},
|
||||
{"shears"},
|
||||
{"toy bear"},
|
||||
{"hair drier"},
|
||||
{"toothbrush"}
|
||||
};
|
||||
};
|
||||
#endif
|
@ -0,0 +1,90 @@
|
||||
package com.mindspore.himindspore;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
|
||||
import com.mindspore.himindspore.imageclassification.ui.ImageCameraActivity;
|
||||
import com.mindspore.himindspore.imageclassification.ui.ImageMainActivity;
|
||||
import com.mindspore.himindspore.objectdetection.ui.ObjectDetectionMainActivity;
|
||||
|
||||
public class SplashActivity extends AppCompatActivity implements View.OnClickListener {
|
||||
|
||||
private static final int REQUEST_PERMISSION = 1;
|
||||
|
||||
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";
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_splash);
|
||||
|
||||
btnImage = findViewById(R.id.btn_image);
|
||||
btnObject = findViewById(R.id.btn_object);
|
||||
btnContract = findViewById(R.id.btn_contact);
|
||||
btnAdvice = findViewById(R.id.btn_advice);
|
||||
|
||||
btnImage.setOnClickListener(this);
|
||||
btnObject.setOnClickListener(this);
|
||||
btnContract.setOnClickListener(this);
|
||||
btnAdvice.setOnClickListener(this);
|
||||
|
||||
requestPermissions();
|
||||
}
|
||||
|
||||
private void requestPermissions() {
|
||||
ActivityCompat.requestPermissions(this,
|
||||
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||
Manifest.permission.READ_PHONE_STATE, Manifest.permission.CAMERA}, REQUEST_PERMISSION);
|
||||
}
|
||||
|
||||
/**
|
||||
* 权限申请结果回调
|
||||
*/
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
if (REQUEST_PERMISSION == requestCode) {
|
||||
isHasPermssion = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (R.id.btn_image == view.getId()) {
|
||||
if (isHasPermssion) {
|
||||
startActivity(new Intent(SplashActivity.this, ImageMainActivity.class));
|
||||
} else {
|
||||
requestPermissions();
|
||||
}
|
||||
} else if (R.id.btn_object == view.getId()) {
|
||||
if (isHasPermssion) {
|
||||
startActivity(new Intent(SplashActivity.this, ObjectDetectionMainActivity.class));
|
||||
} else {
|
||||
requestPermissions();
|
||||
}
|
||||
} else if (R.id.btn_contact == view.getId()) {
|
||||
openBrowser(CODE_URL);
|
||||
}else if (R.id.btn_advice == view.getId()) {
|
||||
openBrowser(HELP_URL);
|
||||
}
|
||||
}
|
||||
|
||||
public void openBrowser(String url) {
|
||||
Intent intent = new Intent();
|
||||
intent.setAction("android.intent.action.VIEW");
|
||||
Uri uri = Uri.parse(url.trim());
|
||||
intent.setData(uri);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,55 @@
|
||||
package com.mindspore.himindspore.contract;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.mindspore.himindspore.R;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class ContractActivity extends AppCompatActivity implements View.OnClickListener {
|
||||
|
||||
private EditText emailEdit;
|
||||
private Button submitBtn;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_contract);
|
||||
|
||||
emailEdit = findViewById(R.id.emailEditText);
|
||||
submitBtn = findViewById(R.id.submitBtn);
|
||||
submitBtn.setOnClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
|
||||
if (R.id.submitBtn == view.getId()) {
|
||||
String email = emailEdit.getText().toString();
|
||||
if (TextUtils.isEmpty(email)) {
|
||||
Toast.makeText(ContractActivity.this,"Please input your email!",Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
if (isEmailFormat(email)){
|
||||
|
||||
}else{
|
||||
Toast.makeText(ContractActivity.this,"The email address you enterd is not in the correct format",Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isEmailFormat(String emailAdd) {
|
||||
Pattern p = Pattern.compile("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\\.([a-zA-Z0-9_-])+)+$");
|
||||
Matcher m = p.matcher(emailAdd);
|
||||
return m.matches();
|
||||
}
|
||||
}
|
@ -0,0 +1,109 @@
|
||||
package com.mindspore.himindspore.contract.email;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
public class MailInfo {
|
||||
|
||||
private String mailServerHost;// 发送邮件的服务器的IP
|
||||
private String mailServerPort;// 发送邮件的服务器的端口
|
||||
private String fromAddress;// 邮件发送者的地址
|
||||
private String toAddress; // 邮件接收者的地址
|
||||
private String userName;// 登陆邮件发送服务器的用户名
|
||||
private String password;// 登陆邮件发送服务器的密码
|
||||
private boolean validate = true;// 是否需要身份验证
|
||||
private String subject;// 邮件主题
|
||||
private String content;// 邮件的文本内容
|
||||
private String[] attachFileNames;// 邮件附件的文件名
|
||||
|
||||
/**
|
||||
* 获得邮件会话属性
|
||||
*/
|
||||
public Properties getProperties() {
|
||||
Properties p = new Properties();
|
||||
p.put("mail.smtp.host", this.mailServerHost);
|
||||
p.put("mail.smtp.port", this.mailServerPort);
|
||||
p.put("mail.smtp.auth", validate ? "true" : "false");
|
||||
return p;
|
||||
}
|
||||
|
||||
public String getMailServerHost() {
|
||||
return mailServerHost;
|
||||
}
|
||||
|
||||
public void setMailServerHost(String mailServerHost) {
|
||||
this.mailServerHost = mailServerHost;
|
||||
}
|
||||
|
||||
public String getMailServerPort() {
|
||||
return mailServerPort;
|
||||
}
|
||||
|
||||
public void setMailServerPort(String mailServerPort) {
|
||||
this.mailServerPort = mailServerPort;
|
||||
}
|
||||
|
||||
public boolean isValidate() {
|
||||
return validate;
|
||||
}
|
||||
|
||||
public void setValidate(boolean validate) {
|
||||
this.validate = validate;
|
||||
}
|
||||
|
||||
public String[] getAttachFileNames() {
|
||||
return attachFileNames;
|
||||
}
|
||||
|
||||
public void setAttachFileNames(String[] fileNames) {
|
||||
this.attachFileNames = fileNames;
|
||||
}
|
||||
|
||||
public String getFromAddress() {
|
||||
return fromAddress;
|
||||
}
|
||||
|
||||
public void setFromAddress(String fromAddress) {
|
||||
this.fromAddress = fromAddress;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public String getToAddress() {
|
||||
return toAddress;
|
||||
}
|
||||
|
||||
public void setToAddress(String toAddress) {
|
||||
this.toAddress = toAddress;
|
||||
}
|
||||
|
||||
public String getUserName() {
|
||||
return userName;
|
||||
}
|
||||
|
||||
public void setUserName(String userName) {
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
public String getSubject() {
|
||||
return subject;
|
||||
}
|
||||
|
||||
public void setSubject(String subject) {
|
||||
this.subject = subject;
|
||||
}
|
||||
|
||||
public String getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
public void setContent(String textContent) {
|
||||
this.content = textContent;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package com.mindspore.himindspore.contract.email;
|
||||
|
||||
import javax.mail.Authenticator;
|
||||
import javax.mail.PasswordAuthentication;
|
||||
|
||||
public class MyAuthenticator extends Authenticator {
|
||||
String userName = null;
|
||||
String password = null;
|
||||
|
||||
public MyAuthenticator() {
|
||||
}
|
||||
|
||||
public MyAuthenticator(String username, String password) {
|
||||
this.userName = username;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
protected PasswordAuthentication getPasswordAuthentication() {
|
||||
return new PasswordAuthentication(userName, password);
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package com.mindspore.himindspore.contract.email;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class SendMailUtil {
|
||||
|
||||
public static void send(final File file, String toAdd) {
|
||||
final MailInfo mailInfo = creatMail(toAdd);
|
||||
final MailSender sms = new MailSender();
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
sms.sendFileMail(mailInfo, file);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
public static void send(String toAdd) {
|
||||
final MailInfo mailInfo = creatMail(toAdd);
|
||||
final MailSender sms = new MailSender();
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
sms.sendTextMail(mailInfo);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static MailInfo creatMail(String toAdd) {
|
||||
|
||||
// String HOST = ShareUtils.getString(MyApplication.getInstance(), "HOST", "");
|
||||
// String PORT = ShareUtils.getString(MyApplication.getInstance(), "PORT", "");
|
||||
// String FROM_ADD = ShareUtils.getString(MyApplication.getInstance(), "FROM_ADD", "");
|
||||
// String FROM_PSW = ShareUtils.getString(MyApplication.getInstance(), "FROM_PSW", "");
|
||||
final MailInfo mailInfo = new MailInfo();
|
||||
// mailInfo.setMailServerHost(HOST);//发送方邮箱服务器
|
||||
// mailInfo.setMailServerPort(PORT);//发送方邮箱端口号
|
||||
// mailInfo.setValidate(true);
|
||||
// mailInfo.setUserName(FROM_ADD); // 发送者邮箱地址
|
||||
// mailInfo.setPassword(FROM_PSW);// 发送者邮箱授权码
|
||||
// mailInfo.setFromAddress(FROM_ADD); // 发送者邮箱
|
||||
// mailInfo.setToAddress(toAdd); // 接收者邮箱
|
||||
// mailInfo.setSubject("Android应用测试"); // 邮件主题
|
||||
// mailInfo.setContent("哈哈"); // 邮件文本
|
||||
return mailInfo;
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue