Compare commits

...

No commits in common. 'master' and 'main' have entirely different histories.
master ... main

File diff suppressed because it is too large Load Diff

@ -0,0 +1,2 @@
# git-ljfl

@ -1,13 +0,0 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild

@ -1,3 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml

@ -1,116 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<codeStyleSettings language="XML">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
</code_scheme>
</component>

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" />
</component>
</project>

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="PROJECT" charset="UTF-8" />
</component>
</project>

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="Embedded JDK" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

@ -1,110 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="BintrayJCenter" />
<option name="name" value="BintrayJCenter" />
<option name="url" value="https://jcenter.bintray.com/" />
</remote-repository>
<remote-repository>
<option name="id" value="Google" />
<option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository>
<remote-repository>
<option name="id" value="D:\AndroidSDK\extras\m2repository" />
<option name="name" value="D:\AndroidSDK\extras\m2repository" />
<option name="url" value="file:/$PROJECT_DIR$/../AndroidSDK/extras/m2repository" />
</remote-repository>
<remote-repository>
<option name="id" value="D:\AndroidSDK\extras\google\m2repository" />
<option name="name" value="D:\AndroidSDK\extras\google\m2repository" />
<option name="url" value="file:/$PROJECT_DIR$/../AndroidSDK/extras/google/m2repository" />
</remote-repository>
<remote-repository>
<option name="id" value="D:\AndroidSDK\extras\android\m2repository" />
<option name="name" value="D:\AndroidSDK\extras\android\m2repository" />
<option name="url" value="file:/$PROJECT_DIR$/../AndroidSDK/extras/android/m2repository" />
</remote-repository>
<remote-repository>
<option name="id" value="C:\Users\99693\AppData\Local\Android\Sdk\extras\google\m2repository" />
<option name="name" value="C:\Users\99693\AppData\Local\Android\Sdk\extras\google\m2repository" />
<option name="url" value="file:/$USER_HOME$/AppData/Local/Android/Sdk/extras/google/m2repository" />
</remote-repository>
<remote-repository>
<option name="id" value="C:\Users\99693\AppData\Local\Android\Sdk\extras\m2repository" />
<option name="name" value="C:\Users\99693\AppData\Local\Android\Sdk\extras\m2repository" />
<option name="url" value="file:/$USER_HOME$/AppData/Local/Android/Sdk/extras/m2repository" />
</remote-repository>
<remote-repository>
<option name="id" value="C:\Users\99693\AppData\Local\Android\Sdk\extras\android\m2repository" />
<option name="name" value="C:\Users\99693\AppData\Local\Android\Sdk\extras\android\m2repository" />
<option name="url" value="file:/$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository" />
</remote-repository>
<remote-repository>
<option name="id" value="MavenRepo" />
<option name="name" value="MavenRepo" />
<option name="url" value="https://repo.maven.apache.org/maven2/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven4" />
<option name="name" value="maven4" />
<option name="url" value="https://maven.aliyun.com/repository/gradle-plugin/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven" />
<option name="name" value="maven" />
<option name="url" value="https://maven.aliyun.com/repository/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven5" />
<option name="name" value="maven5" />
<option name="url" value="https://maven.aliyun.com/repository/spring-plugin/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven3" />
<option name="name" value="maven3" />
<option name="url" value="https://maven.aliyun.com/repository/google/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven7" />
<option name="name" value="maven7" />
<option name="url" value="https://maven.aliyun.com/repository/apache-snapshots/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven6" />
<option name="name" value="maven6" />
<option name="url" value="https://maven.aliyun.com/repository/grails-core/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven2" />
<option name="name" value="maven2" />
<option name="url" value="https://maven.aliyun.com/repository/spring/" />
</remote-repository>
<remote-repository>
<option name="id" value="D:\coder888\sdk\extras\android\m2repository" />
<option name="name" value="D:\coder888\sdk\extras\android\m2repository" />
<option name="url" value="file:/D:/coder888/sdk/extras/android/m2repository" />
</remote-repository>
<remote-repository>
<option name="id" value="D:\coder888\sdk\extras\google\m2repository" />
<option name="name" value="D:\coder888\sdk\extras\google\m2repository" />
<option name="url" value="file:/D:/coder888/sdk/extras/google/m2repository" />
</remote-repository>
<remote-repository>
<option name="id" value="D:\coder888\sdk\extras\m2repository" />
<option name="name" value="D:\coder888\sdk\extras\m2repository" />
<option name="url" value="file:/D:/coder888/sdk/extras/m2repository" />
</remote-repository>
</component>
</project>

@ -1,46 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DesignSurface">
<option name="filePathToZoomLevelMap">
<map>
<entry key="..\:/Users/CYJ/Downloads/SmartTrashCan/app/src/main/res/layout/activity_main.xml" value="0.19739583333333333" />
<entry key="..\:/Users/CYJ/Downloads/SmartTrashCan/app/src/main/res/layout/activity_main1.xml" value="0.21614583333333334" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/activity_home.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/activity_index.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/activity_main.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/activity_main1.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/activity_notes.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/activity_rigister.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/classification.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/frag_category.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/frag_home.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/frag_setting.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/layout_dry.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/layout_less.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/layout_recycler.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/layout/layout_wish.xml" value="0.19895833333333332" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/menu/main.xml" value="0.16296296296296298" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/menu/menu_action_options.xml" value="0.16296296296296298" />
<entry key="..\:/Users/www27/Downloads/SmartTrashCanV2/app/src/main/res/menu/notes.xml" value="0.16296296296296298" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/activity_home.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/activity_index.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/activity_main.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/activity_main1.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/activity_notes.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/frag_category.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/frag_home.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/frag_setting.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/layout_dry.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/layout_less.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/layout_recycler.xml" value="0.2046875" />
<entry key="..\:/Users/zhang'yun'han/Desktop/gxz224/app/src/main/res/layout/layout_wish.xml" value="0.2046875" />
</map>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

@ -1,150 +0,0 @@
import java.security.MessageDigest
apply plugin: 'com.android.application'
android {
compileSdkVersion 30
defaultConfig {
applicationId "com.example.administrator.baiduvoicetest"
minSdkVersion 28
targetSdkVersion 28
versionCode 100000
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
//cpu.so
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
// 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
useLibrary 'org.apache.http.legacy'
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation files('libs/fastjson-1.0.4.jar')
implementation files('libs/xUtils-2.6.14.jar')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
implementation files('libs\\mysql-connector-java-5.1.47-bin.jar')
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation files('libs/PaddlePredictor.jar')
implementation files('libs/com.baidu.tts_2.2.9.20161020_154fa02_release.jar')
implementation files('libs/VoiceRecognition-2.1.20.jar')
implementation files('libs/galaxy-v2.0.jar')
}
def paddleLiteLibs = 'https://paddlelite-demo.bj.bcebos.com/libs/android/paddle_lite_libs_v2_6_1.tar.gz'
task downloadAndExtractPaddleLiteLibs(type: DefaultTask) {
doFirst {
println "Downloading and extracting Paddle Lite libs"
}
doLast {
// Prepare cache folder for libs
if (!file("cache").exists()) {
mkdir "cache"
}
// Generate cache name for libs
MessageDigest messageDigest = MessageDigest.getInstance('MD5')
messageDigest.update(paddleLiteLibs.bytes)
String cacheName = new BigInteger(1, messageDigest.digest()).toString(32)
// Download libs
if (!file("cache/${cacheName}.tar.gz").exists()) {
ant.get(src: paddleLiteLibs, dest: file("cache/${cacheName}.tar.gz"))
}
// Unpack libs
copy {
from tarTree("cache/${cacheName}.tar.gz")
into "cache/${cacheName}"
}
// Copy PaddlePredictor.jar
if (!file("libs/PaddlePredictor.jar").exists()) {
copy {
from "cache/${cacheName}/java/PaddlePredictor.jar"
into "libs"
}
}
// Copy libpaddle_lite_jni.so for armeabi-v7a and arm64-v8a
if (!file("src/main/jniLibs/armeabi-v7a/libpaddle_lite_jni.so").exists()) {
copy {
from "cache/${cacheName}/java/libs/armeabi-v7a/"
into "src/main/jniLibs/armeabi-v7a"
}
}
if (!file("src/main/jniLibs/arm64-v8a/libpaddle_lite_jni.so").exists()) {
copy {
from "cache/${cacheName}/java/libs/arm64-v8a/"
into "src/main/jniLibs/arm64-v8a"
}
}
}
}
preBuild.dependsOn downloadAndExtractPaddleLiteLibs
def paddleLiteModels = [
[
'src' : 'https://paddlelite-demo.bj.bcebos.com/models/mobilenet_v1_fp32_224_for_cpu_v2_6_0.tar.gz',
'dest' : 'src/main/assets/models/mobilenet_v1_for_cpu'
],
[
'src' : 'https://paddlelite-demo.bj.bcebos.com/models/mobilenet_v1_fp32_224_for_npu_v2_6_0.tar.gz',
'dest' : 'src/main/assets/models/mobilenet_v1_for_npu'
]
]
task downloadAndExtractPaddleLiteModels(type: DefaultTask) {
doFirst {
println "Downloading and extracting Paddle Lite models"
}
doLast {
// Prepare cache folder for models
if (!file("cache").exists()) {
mkdir "cache"
}
paddleLiteModels.eachWithIndex { model, index ->
MessageDigest messageDigest = MessageDigest.getInstance('MD5')
messageDigest.update(model.src.bytes)
String cacheName = new BigInteger(1, messageDigest.digest()).toString(32)
// Download model file
if (!file("cache/${cacheName}.tar.gz").exists()) {
ant.get(src: model.src, dest: file("cache/${cacheName}.tar.gz"))
}
// Unpack model file
copy {
from tarTree("cache/${cacheName}.tar.gz")
into "cache/${cacheName}"
}
// Copy model file
if (!file("${model.dest}/model.nb").exists()) {
copy {
from "cache/${cacheName}"
into "${model.dest}"
}
}
}
}
}
preBuild.dependsOn downloadAndExtractPaddleLiteModels

@ -1,277 +0,0 @@
// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
//
// 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.
/*
* This file defines PaddlePredictor, the api for lite. It supports multiple
* hardware including ARM, X86, OpenCL, CUDA and so on.
*/
#ifndef PADDLE_LITE_API_H_ // NOLINT
#define PADDLE_LITE_API_H_
#include <memory>
#include <string>
#include <vector>
#include "paddle_place.h" // NOLINT
namespace paddle {
namespace lite_api {
using shape_t = std::vector<int64_t>;
using lod_t = std::vector<std::vector<uint64_t>>;
enum class LiteModelType { kProtobuf = 0, kNaiveBuffer, UNK };
struct LITE_API Tensor {
explicit Tensor(void* raw);
explicit Tensor(const void* raw);
void Resize(const shape_t& shape);
/// Readonly data.
template <typename T>
const T* data() const;
template <typename T>
T* mutable_data(TargetType type = TargetType::kHost) const;
template <typename T, TargetType type = TargetType::kHost>
void CopyFromCpu(const T* data);
template <typename T>
void CopyToCpu(T* data) const;
/// Shape of the tensor.
shape_t shape() const;
TargetType target() const;
PrecisionType precision() const;
// LoD of the tensor
lod_t lod() const;
// Set LoD of the tensor
void SetLoD(const lod_t& lod);
private:
void* raw_tensor_;
};
/// The PaddlePredictor defines the basic interfaces for different kinds of
/// predictors.
class LITE_API PaddlePredictor {
public:
PaddlePredictor() = default;
/// Get i-th input.
virtual std::unique_ptr<Tensor> GetInput(int i) = 0;
/// Get i-th output.
virtual std::unique_ptr<const Tensor> GetOutput(int i) const = 0;
virtual void Run() = 0;
virtual std::shared_ptr<PaddlePredictor> Clone() = 0;
virtual std::string GetVersion() const = 0;
// Get input names
virtual std::vector<std::string> GetInputNames() = 0;
// Get output names
virtual std::vector<std::string> GetOutputNames() = 0;
// Get output names
virtual std::vector<std::string> GetParamNames();
// Get Input by name
virtual std::unique_ptr<Tensor> GetInputByName(const std::string& name) = 0;
/// Get a readonly tensor, return null if no one called `name` exists.
virtual std::unique_ptr<const Tensor> GetTensor(
const std::string& name) const = 0;
/// Get a mutable tensor, return null if on one called `name` exists
/// internal infereces API, not recommanded.
virtual std::unique_ptr<Tensor> GetMutableTensor(const std::string& name);
/// Persist the optimized model to disk. This API is only supported by
/// CxxConfig, and the persisted model can be reused for MobileConfig.
virtual void SaveOptimizedModel(
const std::string& model_dir,
LiteModelType model_type = LiteModelType::kProtobuf,
bool record_info = false);
virtual ~PaddlePredictor() = default;
protected:
int threads_{1};
lite_api::PowerMode mode_{lite_api::LITE_POWER_NO_BIND};
};
/// Base class for all the configs.
class LITE_API ConfigBase {
std::string model_dir_;
int threads_{1};
PowerMode mode_{LITE_POWER_NO_BIND};
public:
explicit ConfigBase(PowerMode mode = LITE_POWER_NO_BIND, int threads = 1);
// set Model_dir
void set_model_dir(const std::string& x) { model_dir_ = x; }
const std::string& model_dir() const { return model_dir_; }
// set Power_mode
void set_power_mode(PowerMode mode);
PowerMode power_mode() const { return mode_; }
// set Thread
void set_threads(int threads);
int threads() const { return threads_; }
};
/// CxxConfig is the config for the Full feature predictor.
class LITE_API CxxConfig : public ConfigBase {
std::vector<Place> valid_places_;
std::string model_file_;
std::string param_file_;
std::vector<std::string> passes_internal_{};
bool model_from_memory_{false};
#ifdef LITE_WITH_X86
int x86_math_library_math_threads_ = 1;
#endif
#ifdef LITE_WITH_CUDA
bool multi_stream_{false};
#endif
#ifdef LITE_WITH_MLU
lite_api::MLUCoreVersion mlu_core_version_{lite_api::MLUCoreVersion::MLU_270};
int mlu_core_number_{1};
DataLayoutType mlu_input_layout_{DATALAYOUT(kNCHW)};
bool mlu_use_first_conv_{false};
std::vector<float> mlu_first_conv_mean_;
std::vector<float> mlu_first_conv_std_;
#endif
public:
void set_valid_places(const std::vector<Place>& x) { valid_places_ = x; }
void set_model_file(const std::string& path) { model_file_ = path; }
void set_param_file(const std::string& path) { param_file_ = path; }
void set_model_buffer(const char* model_buffer,
size_t model_buffer_size,
const char* param_buffer,
size_t param_buffer_size) {
model_file_ = std::string(model_buffer, model_buffer + model_buffer_size);
param_file_ = std::string(param_buffer, param_buffer + param_buffer_size);
model_from_memory_ = true;
}
// internal inference to choose passes for model optimizing,
// it's designed for internal developer and not recommanded
// for comman users.
void set_passes_internal(
const std::vector<std::string>& passes_internal = {}) {
passes_internal_ = passes_internal;
}
const std::vector<std::string>& get_passes_internal() const {
return passes_internal_;
}
const std::vector<Place>& valid_places() const { return valid_places_; }
std::string model_file() const { return model_file_; }
std::string param_file() const { return param_file_; }
bool model_from_memory() const { return model_from_memory_; }
#ifdef LITE_WITH_X86
void set_x86_math_library_num_threads(int threads) {
x86_math_library_math_threads_ = threads;
}
int x86_math_library_num_threads() const {
return x86_math_library_math_threads_;
}
#endif
#ifdef LITE_WITH_CUDA
void set_multi_stream(bool multi_stream) { multi_stream_ = multi_stream; }
bool multi_stream() const { return multi_stream_; }
#endif
#ifdef LITE_WITH_MLU
// set MLU core version, which is used when compiling MLU kernels
void set_mlu_core_version(lite_api::MLUCoreVersion core_version);
// set MLU core number, which is used when compiling MLU kernels
void set_mlu_core_number(int core_number);
// set MLU input layout. User can specify layout of input data to be NHWC,
// default is NCHW
void set_mlu_input_layout(DataLayoutType layout);
// whether use MLU's first conv kernel. First conv is a special kernel
// provided by MLU, its input is uint8, and also needs two 3-dimentional
// vectors which save all inputs' mean and std values
void set_mlu_use_first_conv(bool use_first_conv);
// set the 3-dimentional mean vector used by MLU's first conv
void set_mlu_first_conv_mean(const std::vector<float>& mean);
// set the 3-dimentional std vector used by MLU's first conv
void set_mlu_first_conv_std(const std::vector<float>& std);
lite_api::MLUCoreVersion mlu_core_version() const;
int mlu_core_number() const;
DataLayoutType mlu_input_layout() const;
bool mlu_use_first_conv() const;
const std::vector<float>& mlu_first_conv_mean() const;
const std::vector<float>& mlu_first_conv_std() const;
#endif
// XPU only, set the size of the workspace memory from L3 cache for the
// current thread.
void set_xpu_workspace_l3_size_per_thread(int l3_size = 0xfffc00);
// XPU only, specify the target device ID for the current thread.
// **DEPRECATED**, use xpu_set_device() at the very beginning of each worker
// thread
void set_xpu_dev_per_thread(int dev_no = 0);
};
/// MobileConfig is the config for the light weight predictor, it will skip
/// IR optimization or other unnecessary stages.
class LITE_API MobileConfig : public ConfigBase {
// whether to load data from memory. Model data will be loaded from memory
// buffer if model_from_memory_ is true.
bool model_from_memory_{false};
// model data readed from file or memory buffer in combined format.
std::string lite_model_file_;
// NOTE: This is a deprecated variable and will be removed in latter release.
std::string model_buffer_;
std::string param_buffer_;
public:
// set model data in combined format, `set_model_from_file` refers to loading
// model from file, set_model_from_buffer refers to loading model from memory
// buffer
void set_model_from_file(const std::string& x);
void set_model_from_buffer(const std::string& x);
// return model data in lite_model_file_, which is in combined format.
const std::string& lite_model_file() const { return lite_model_file_; }
// return model_from_memory_, which indicates whether to load model from
// memory buffer.
bool model_from_memory() const { return model_from_memory_; }
// NOTE: This is a deprecated API and will be removed in latter release.
void set_model_buffer(const char* model_buffer,
size_t model_buffer_size,
const char* param_buffer,
size_t param_buffer_size);
// NOTE: This is a deprecated API and will be removed in latter release.
const std::string& model_buffer() const { return model_buffer_; }
// NOTE: This is a deprecated API and will be removed in latter release.
const std::string& param_buffer() const { return param_buffer_; }
};
template <typename ConfigT>
LITE_API std::shared_ptr<PaddlePredictor> CreatePaddlePredictor(const ConfigT&);
} // namespace lite_api
} // namespace paddle
#endif // NOLINT

@ -1,222 +0,0 @@
// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
//
// 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.
#pragma once
#include <stdint.h>
#include <stdio.h>
#include <vector>
#include "lite/api/paddle_api.h"
#include "lite/api/paddle_place.h"
namespace paddle {
namespace lite {
namespace utils {
namespace cv {
typedef paddle::lite_api::Tensor Tensor;
typedef paddle::lite_api::DataLayoutType LayoutType;
// color enum
enum ImageFormat {
RGBA = 0,
BGRA,
RGB,
BGR,
GRAY,
NV21 = 11,
NV12,
};
// flip enum
enum FlipParam {
XY = -1, // flip along the XY axis
X = 0, // flip along the X axis
Y // flip along the Y axis
};
// transform param
typedef struct {
int ih; // input height
int iw; // input width
int oh; // outpu theight
int ow; // output width
FlipParam flip_param; // flip, support x, y, xy
float rotate_param; // rotate, support 90, 180, 270
} TransParam;
class ImagePreprocess {
public:
/*
* init
* param srcFormat: input image color
* param dstFormat: output image color
* param param: input image parameter, egs: input size
*/
ImagePreprocess(ImageFormat srcFormat,
ImageFormat dstFormat,
TransParam param);
/*
* image color convert
* support NV12/NV21_to_BGR(RGB), NV12/NV21_to_BGRA(RGBA),
* BGR(RGB)and BGRA(RGBA) transform,
* BGR(RGB)and RGB(BGR) transform,
* BGR(RGB)and RGBA(BGRA) transform,
* BGR(RGB) and GRAY transform,
* BGRA(RGBA) and GRAY transform,
* param src: input image data
* param dst: output image data
*/
void imageConvert(const uint8_t* src, uint8_t* dst);
/*
* image color convert
* support NV12/NV21_to_BGR(RGB), NV12/NV21_to_BGRA(RGBA),
* BGR(RGB)and BGRA(RGBA) transform,
* BGR(RGB)and RGB(BGR) transform,
* BGR(RGB)and RGBA(BGRA) transform,
* BGR(RGB)and GRAY transform,
* BGRA(RGBA) and GRAY transform,
* param src: input image data
* param dst: output image data
* param srcFormat: input image image format support: GRAY, NV12(NV21),
* BGR(RGB) and BGRA(RGBA)
* param dstFormat: output image image format, support GRAY, BGR(RGB) and
* BGRA(RGBA)
*/
void imageConvert(const uint8_t* src,
uint8_t* dst,
ImageFormat srcFormat,
ImageFormat dstFormat);
/*
* image resize, use bilinear method
* support image format: 1-channel image (egs: GRAY, 2-channel image (egs:
* NV12, NV21), 3-channel(egs: BGR), 4-channel(egs: BGRA)
* param src: input image data
* param dst: output image data
*/
void imageResize(const uint8_t* src, uint8_t* dst);
/*
image resize, use bilinear method
* support image format: 1-channel image (egs: GRAY, 2-channel image (egs:
NV12, NV21), 3-channel image(egs: BGR), 4-channel image(egs: BGRA)
* param src: input image data
* param dst: output image data
* param srcw: input image width
* param srch: input image height
* param dstw: output image width
* param dsth: output image height
*/
void imageResize(const uint8_t* src,
uint8_t* dst,
ImageFormat srcFormat,
int srcw,
int srch,
int dstw,
int dsth);
/*
* image Rotate
* support 90, 180 and 270 Rotate process
* color format support 1-channel image, 3-channel image and 4-channel image
* param src: input image data
* param dst: output image data
*/
void imageRotate(const uint8_t* src, uint8_t* dst);
/*
* image Rotate
* support 90, 180 and 270 Rotate process
* color format support 1-channel image, 3-channel image and 4-channel image
* param src: input image data
* param dst: output image data
* param srcFormat: input image format, support GRAY, BGR(RGB) and BGRA(RGBA)
* param srcw: input image width
* param srch: input image height
* param degree: Rotate degree, support 90, 180 and 270
*/
void imageRotate(const uint8_t* src,
uint8_t* dst,
ImageFormat srcFormat,
int srcw,
int srch,
float degree);
/*
* image Flip
* support X, Y and XY flip process
* color format support 1-channel image, 3-channel image and 4-channel image
* param src: input image data
* param dst: output image data
*/
void imageFlip(const uint8_t* src, uint8_t* dst);
/*
* image Flip
* support X, Y and XY flip process
* color format support 1-channel image, 3-channel image and 4-channel image
* param src: input image data
* param dst: output image data
* param srcFormat: input image format, support GRAY, BGR(RGB) and BGRA(RGBA)
* param srcw: input image width
* param srch: input image height
* param flip_param: flip parameter, support X, Y and XY
*/
void imageFlip(const uint8_t* src,
uint8_t* dst,
ImageFormat srcFormat,
int srcw,
int srch,
FlipParam flip_param);
/*
* change image data to tensor data
* support image format is GRAY, BGR(RGB) and BGRA(RGBA), Data layout is NHWC
* and
* NCHW
* param src: input image data
* param dstTensor: output tensor data
* param layout: output tensor layoutsupport NHWC and NCHW
* param means: means of image
* param scales: scales of image
*/
void image2Tensor(const uint8_t* src,
Tensor* dstTensor,
LayoutType layout,
float* means,
float* scales);
/*
* change image data to tensor data
* support image format is GRAY, BGR(RGB) and BGRA(RGBA), Data layout is NHWC
* and
* NCHW
* param src: input image data
* param dstTensor: output tensor data
* param srcFormat: input image format, support BGR(RGB) and BGRA(RGBA)
* param srcw: input image width
* param srch: input image height
* param layout: output tensor layoutsupport NHWC and NCHW
* param means: means of image
* param scales: scales of image
*/
void image2Tensor(const uint8_t* src,
Tensor* dstTensor,
ImageFormat srcFormat,
int srcw,
int srch,
LayoutType layout,
float* means,
float* scales);
private:
ImageFormat srcFormat_;
ImageFormat dstFormat_;
TransParam transParam_;
};
} // namespace cv
} // namespace utils
} // namespace lite
} // namespace paddle

@ -1,44 +0,0 @@
// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
//
// 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.
/*
* This file defines some MACROS that explicitly determine the op, kernel, mir
* passes used in the inference lib.
*/
#pragma once
// some platform-independent defintion
#if defined(_WIN32)
#define UNUSED
#define __builtin_expect(EXP, C) (EXP)
#else
#define UNUSED __attribute__((unused))
#endif
#define USE_LITE_OP(op_type__) \
extern int touch_op_##op_type__(); \
int LITE_OP_REGISTER_FAKE(op_type__) UNUSED = touch_op_##op_type__();
#define USE_LITE_KERNEL(op_type__, target__, precision__, layout__, alias__) \
extern int touch_##op_type__##target__##precision__##layout__##alias__(); \
int op_type__##target__##precision__##layout__##alias__##__use_lite_kernel \
UNUSED = touch_##op_type__##target__##precision__##layout__##alias__();
#define USE_MIR_PASS(name__) \
extern bool mir_pass_registry##name__##_fake(); \
static bool mir_pass_usage##name__ UNUSED = \
mir_pass_registry##name__##_fake();
#define LITE_OP_REGISTER_FAKE(op_type__) op_type__##__registry__

@ -1,223 +0,0 @@
// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
//
// 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.
#pragma once
#include <set>
#include <string>
// Generic helper definitions for shared library support
#if defined _WIN32 || defined __CYGWIN__
#define PADDLE_LITE_HELPER_DLL_IMPORT __declspec(dllimport)
#define PADDLE_LITE_HELPER_DLL_EXPORT __declspec(dllexport)
#define PADDLE_LITE_HELPER_DLL_LOCAL
#else
#if __GNUC__ >= 4
#define PADDLE_LITE_HELPER_DLL_IMPORT __attribute__((visibility("default")))
#define PADDLE_LITE_HELPER_DLL_EXPORT __attribute__((visibility("default")))
#else
#define PADDLE_LITE_HELPER_DLL_IMPORT
#define PADDLE_LITE_HELPER_DLL_EXPORT
#endif
#endif
#ifdef LITE_ON_TINY_PUBLISH
#define LITE_API PADDLE_LITE_HELPER_DLL_EXPORT
#define LITE_API_IMPORT PADDLE_LITE_HELPER_DLL_IMPORT
#else
#define LITE_API
#define LITE_API_IMPORT
#endif
namespace paddle {
namespace lite_api {
enum class TargetType : int {
kUnk = 0,
kHost = 1,
kX86 = 2,
kCUDA = 3,
kARM = 4,
kOpenCL = 5,
kAny = 6, // any target
kFPGA = 7,
kNPU = 8,
kXPU = 9,
kBM = 10,
kMLU = 11,
kRKNPU = 12,
kAPU = 13,
NUM = 14, // number of fields.
};
enum class PrecisionType : int {
kUnk = 0,
kFloat = 1,
kInt8 = 2,
kInt32 = 3,
kAny = 4, // any precision
kFP16 = 5,
kBool = 6,
kInt64 = 7,
kInt16 = 8,
NUM = 9, // number of fields.
};
enum class DataLayoutType : int {
kUnk = 0,
kNCHW = 1,
kNHWC = 3,
kImageDefault = 4, // for opencl image2d
kImageFolder = 5, // for opencl image2d
kImageNW = 6, // for opencl image2d
kAny = 2, // any data layout
NUM = 7, // number of fields.
};
typedef enum {
LITE_POWER_HIGH = 0,
LITE_POWER_LOW = 1,
LITE_POWER_FULL = 2,
LITE_POWER_NO_BIND = 3,
LITE_POWER_RAND_HIGH = 4,
LITE_POWER_RAND_LOW = 5
} PowerMode;
typedef enum { MLU_220 = 0, MLU_270 = 1 } MLUCoreVersion;
enum class ActivationType : int {
kIndentity = 0,
kRelu = 1,
kRelu6 = 2,
kPRelu = 3,
kLeakyRelu = 4,
kSigmoid = 5,
kTanh = 6,
kSwish = 7,
kExp = 8,
kAbs = 9,
kHardSwish = 10,
kReciprocal = 11,
NUM = 12,
};
static size_t PrecisionTypeLength(PrecisionType type) {
switch (type) {
case PrecisionType::kFloat:
return 4;
case PrecisionType::kInt8:
return 1;
case PrecisionType::kInt32:
return 4;
case PrecisionType::kInt64:
return 8;
case PrecisionType::kFP16:
return 2;
default:
return 4;
}
}
template <typename T>
struct PrecisionTypeTrait {
constexpr static PrecisionType Type() { return PrecisionType::kUnk; }
};
#define _ForEachPrecisionTypeHelper(callback, cpp_type, precision_type) \
callback(cpp_type, ::paddle::lite_api::PrecisionType::precision_type);
#define _ForEachPrecisionType(callback) \
_ForEachPrecisionTypeHelper(callback, bool, kBool); \
_ForEachPrecisionTypeHelper(callback, float, kFloat); \
_ForEachPrecisionTypeHelper(callback, int8_t, kInt8); \
_ForEachPrecisionTypeHelper(callback, int16_t, kInt16); \
_ForEachPrecisionTypeHelper(callback, int, kInt32); \
_ForEachPrecisionTypeHelper(callback, int64_t, kInt64);
#define DefinePrecisionTypeTrait(cpp_type, precision_type) \
template <> \
struct PrecisionTypeTrait<cpp_type> { \
constexpr static PrecisionType Type() { return precision_type; } \
}
_ForEachPrecisionType(DefinePrecisionTypeTrait);
#undef _ForEachPrecisionTypeHelper
#undef _ForEachPrecisionType
#undef DefinePrecisionTypeTrait
#define TARGET(item__) paddle::lite_api::TargetType::item__
#define PRECISION(item__) paddle::lite_api::PrecisionType::item__
#define DATALAYOUT(item__) paddle::lite_api::DataLayoutType::item__
const std::string& ActivationTypeToStr(ActivationType act);
const std::string& TargetToStr(TargetType target);
const std::string& PrecisionToStr(PrecisionType precision);
const std::string& DataLayoutToStr(DataLayoutType layout);
const std::string& TargetRepr(TargetType target);
const std::string& PrecisionRepr(PrecisionType precision);
const std::string& DataLayoutRepr(DataLayoutType layout);
// Get a set of all the elements represented by the target.
std::set<TargetType> ExpandValidTargets(TargetType target = TARGET(kAny));
// Get a set of all the elements represented by the precision.
std::set<PrecisionType> ExpandValidPrecisions(
PrecisionType precision = PRECISION(kAny));
// Get a set of all the elements represented by the layout.
std::set<DataLayoutType> ExpandValidLayouts(
DataLayoutType layout = DATALAYOUT(kAny));
/*
* Place specifies the execution context of a Kernel or input/output for a
* kernel. It is used to make the analysis of the MIR more clear and accurate.
*/
struct LITE_API Place {
TargetType target{TARGET(kUnk)};
PrecisionType precision{PRECISION(kUnk)};
DataLayoutType layout{DATALAYOUT(kUnk)};
int16_t device{0}; // device ID
Place() = default;
Place(TargetType target,
PrecisionType precision = PRECISION(kFloat),
DataLayoutType layout = DATALAYOUT(kNCHW),
int16_t device = 0)
: target(target), precision(precision), layout(layout), device(device) {}
bool is_valid() const {
return target != TARGET(kUnk) && precision != PRECISION(kUnk) &&
layout != DATALAYOUT(kUnk);
}
size_t hash() const;
bool operator==(const Place& other) const {
return target == other.target && precision == other.precision &&
layout == other.layout && device == other.device;
}
bool operator!=(const Place& other) const { return !(*this == other); }
friend bool operator<(const Place& a, const Place& b);
std::string DebugString() const;
};
} // namespace lite_api
} // namespace paddle

@ -1,104 +0,0 @@
#pragma once
#include "paddle_lite_factory_helper.h"
USE_LITE_KERNEL(yolo_box, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(fetch, kHost, kAny, kAny, def);
USE_LITE_KERNEL(relu, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(leaky_relu, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(relu_clipped, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(prelu, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(sigmoid, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(tanh, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(swish, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(relu6, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(log, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(exp, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(floor, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(hard_sigmoid, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(rsqrt, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(square, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(hard_swish, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(reciprocal, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(abs, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(fc, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(fc, kARM, kInt8, kNCHW, int8out);
USE_LITE_KERNEL(fc, kARM, kInt8, kNCHW, fp32out);
USE_LITE_KERNEL(feed, kHost, kAny, kAny, def);
USE_LITE_KERNEL(calib, kARM, kInt8, kNCHW, fp32_to_int8);
USE_LITE_KERNEL(calib, kARM, kInt8, kNCHW, int8_to_fp32);
USE_LITE_KERNEL(calib, kARM, kInt8, kNHWC, fp32_to_int8);
USE_LITE_KERNEL(calib, kARM, kInt8, kNHWC, int8_to_fp32);
USE_LITE_KERNEL(calib_once, kARM, kInt8, kNCHW, fp32_to_int8);
USE_LITE_KERNEL(calib_once, kARM, kInt8, kNCHW, int8_to_fp32);
USE_LITE_KERNEL(calib_once, kARM, kInt8, kNHWC, fp32_to_int8);
USE_LITE_KERNEL(calib_once, kARM, kInt8, kNHWC, int8_to_fp32);
USE_LITE_KERNEL(reduce_mean, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(cast, kARM, kAny, kNCHW, def);
USE_LITE_KERNEL(transpose, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(transpose2, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(affine_channel, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(grid_sampler, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(fill_constant_batch_size_like, kARM, kAny, kNCHW, def);
USE_LITE_KERNEL(pad2d, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(slice, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(slice, kARM, kInt32, kNCHW, def);
USE_LITE_KERNEL(unsqueeze, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(unsqueeze2, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(stack, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(concat, kARM, kAny, kNCHW, def);
USE_LITE_KERNEL(squeeze, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(squeeze2, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(dropout, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(mul, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(conv2d, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(depthwise_conv2d, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(conv2d, kARM, kInt8, kNCHW, int8_out);
USE_LITE_KERNEL(conv2d, kARM, kInt8, kNCHW, fp32_out);
USE_LITE_KERNEL(depthwise_conv2d, kARM, kInt8, kNCHW, int8_out);
USE_LITE_KERNEL(depthwise_conv2d, kARM, kInt8, kNCHW, fp32_out);
USE_LITE_KERNEL(arg_max, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(scale, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(scale, kARM, kInt32, kNCHW, def);
USE_LITE_KERNEL(conv2d_transpose, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(reshape, kHost, kAny, kAny, def);
USE_LITE_KERNEL(reshape2, kHost, kAny, kAny, def);
USE_LITE_KERNEL(flatten, kHost, kAny, kAny, def);
USE_LITE_KERNEL(flatten2, kHost, kAny, kAny, def);
USE_LITE_KERNEL(elementwise_add, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(fusion_elementwise_add_activation, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(elementwise_sub, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(fusion_elementwise_sub_activation, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(elementwise_mul, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(elementwise_mul, kARM, kInt32, kNCHW, def);
USE_LITE_KERNEL(elementwise_mul, kARM, kInt64, kNCHW, def);
USE_LITE_KERNEL(fusion_elementwise_mul_activation, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(elementwise_max, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(fusion_elementwise_max_activation, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(elementwise_div, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(fusion_elementwise_div_activation, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(prior_box, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(split, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(pool2d, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(subgraph, kNPU, kAny, kNCHW, def);
USE_LITE_KERNEL(batch_norm, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(matmul, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(box_coder, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(softmax, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(fill_constant, kARM, kAny, kNCHW, def);
USE_LITE_KERNEL(layout, kARM, kFloat, kNCHW, nchw2nhwc);
USE_LITE_KERNEL(layout, kARM, kFloat, kNCHW, nhwc2nchw);
USE_LITE_KERNEL(layout, kARM, kInt8, kNCHW, int8_nchw2nhwc);
USE_LITE_KERNEL(layout, kARM, kInt8, kNCHW, int8_nhwc2nchw);
USE_LITE_KERNEL(layout_once, kARM, kFloat, kNCHW, nchw2nhwc);
USE_LITE_KERNEL(layout_once, kARM, kFloat, kNCHW, nhwc2nchw);
USE_LITE_KERNEL(layout_once, kARM, kInt8, kNCHW, int8_nchw2nhwc);
USE_LITE_KERNEL(layout_once, kARM, kInt8, kNCHW, int8_nhwc2nchw);
USE_LITE_KERNEL(multiclass_nms, kHost, kFloat, kNCHW, def);
USE_LITE_KERNEL(multiclass_nms2, kHost, kFloat, kNCHW, def);
USE_LITE_KERNEL(density_prior_box, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(shuffle_channel, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(bilinear_interp, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(nearest_interp, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(instance_norm, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(range, kARM, kFloat, kNCHW, def);
USE_LITE_KERNEL(expand, kARM, kFloat, kNCHW, def);

@ -1,80 +0,0 @@
#pragma once
#include "paddle_lite_factory_helper.h"
USE_LITE_OP(prior_box);
USE_LITE_OP(matmul);
USE_LITE_OP(grid_sampler);
USE_LITE_OP(fake_channel_wise_dequantize_max_abs);
USE_LITE_OP(split);
USE_LITE_OP(box_coder);
USE_LITE_OP(subgraph);
USE_LITE_OP(scale);
USE_LITE_OP(fusion_elementwise_sub_activation);
USE_LITE_OP(fusion_elementwise_add_activation);
USE_LITE_OP(fusion_elementwise_mul_activation);
USE_LITE_OP(fusion_elementwise_max_activation);
USE_LITE_OP(fusion_elementwise_div_activation);
USE_LITE_OP(calib);
USE_LITE_OP(fake_quantize_moving_average_abs_max);
USE_LITE_OP(squeeze);
USE_LITE_OP(squeeze2);
USE_LITE_OP(fill_constant_batch_size_like);
USE_LITE_OP(nearest_interp);
USE_LITE_OP(bilinear_interp);
USE_LITE_OP(stack);
USE_LITE_OP(concat);
USE_LITE_OP(io_copy_once);
USE_LITE_OP(fake_quantize_dequantize_moving_average_abs_max);
USE_LITE_OP(fake_quantize_range_abs_max);
USE_LITE_OP(fake_quantize_abs_max);
USE_LITE_OP(sequence_topk_avg_pooling);
USE_LITE_OP(affine_channel);
USE_LITE_OP(arg_max);
USE_LITE_OP(sigmoid);
USE_LITE_OP(tanh);
USE_LITE_OP(relu);
USE_LITE_OP(leaky_relu);
USE_LITE_OP(relu6);
USE_LITE_OP(prelu);
USE_LITE_OP(transpose);
USE_LITE_OP(transpose2);
USE_LITE_OP(search_fc);
USE_LITE_OP(fetch);
USE_LITE_OP(fill_constant);
USE_LITE_OP(range);
USE_LITE_OP(mul);
USE_LITE_OP(softmax);
USE_LITE_OP(multiclass_nms);
USE_LITE_OP(multiclass_nms2);
USE_LITE_OP(shuffle_channel);
USE_LITE_OP(density_prior_box);
USE_LITE_OP(instance_norm);
USE_LITE_OP(fake_dequantize_max_abs);
USE_LITE_OP(yolo_box);
USE_LITE_OP(conv2d_transpose);
USE_LITE_OP(depthwise_conv2d_transpose);
USE_LITE_OP(expand);
USE_LITE_OP(pad2d);
USE_LITE_OP(slice);
USE_LITE_OP(pool2d);
USE_LITE_OP(io_copy);
USE_LITE_OP(flatten);
USE_LITE_OP(flatten2);
USE_LITE_OP(unsqueeze);
USE_LITE_OP(unsqueeze2);
USE_LITE_OP(reshape);
USE_LITE_OP(reshape2);
USE_LITE_OP(conv2d);
USE_LITE_OP(depthwise_conv2d);
USE_LITE_OP(feed);
USE_LITE_OP(batch_norm);
USE_LITE_OP(elementwise_sub);
USE_LITE_OP(elementwise_add);
USE_LITE_OP(elementwise_mul);
USE_LITE_OP(elementwise_max);
USE_LITE_OP(elementwise_div);
USE_LITE_OP(dropout);
USE_LITE_OP(fc);
USE_LITE_OP(cast);
USE_LITE_OP(reduce_mean);
USE_LITE_OP(layout);

@ -1,58 +0,0 @@
// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
//
// 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.
#pragma once
#include "paddle_lite_factory_helper.h" // NOLINT
USE_MIR_PASS(demo);
USE_MIR_PASS(static_kernel_pick_pass);
USE_MIR_PASS(variable_place_inference_pass);
USE_MIR_PASS(type_target_cast_pass);
USE_MIR_PASS(generate_program_pass);
USE_MIR_PASS(io_copy_kernel_pick_pass);
USE_MIR_PASS(argument_type_display_pass);
USE_MIR_PASS(runtime_context_assign_pass);
USE_MIR_PASS(graph_visualize_pass);
USE_MIR_PASS(lite_conv_bn_fuse_pass);
USE_MIR_PASS(lite_fc_fuse_pass);
USE_MIR_PASS(lite_shuffle_channel_fuse_pass);
USE_MIR_PASS(lite_transpose_softmax_transpose_fuse_pass);
USE_MIR_PASS(lite_interpolate_fuse_pass);
USE_MIR_PASS(lite_sequence_pool_concat_fuse_pass);
USE_MIR_PASS(identity_scale_eliminate_pass);
USE_MIR_PASS(identity_dropout_eliminate_pass);
USE_MIR_PASS(lite_conv_elementwise_fuse_pass);
USE_MIR_PASS(lite_conv_activation_fuse_pass);
USE_MIR_PASS(lite_var_conv_2d_activation_fuse_pass);
USE_MIR_PASS(lite_elementwise_add_activation_fuse_pass);
USE_MIR_PASS(lite_quant_dequant_fuse_pass);
USE_MIR_PASS(type_precision_cast_pass);
USE_MIR_PASS(type_layout_cast_pass);
USE_MIR_PASS(type_layout_cast_preprocess_pass);
USE_MIR_PASS(memory_optimize_pass);
USE_MIR_PASS(multi_stream_analysis_pass);
USE_MIR_PASS(elementwise_mul_constant_eliminate_pass)
USE_MIR_PASS(npu_subgraph_pass);
USE_MIR_PASS(xpu_subgraph_pass);
USE_MIR_PASS(mlu_subgraph_pass);
USE_MIR_PASS(mlu_postprocess_pass);
USE_MIR_PASS(weight_quantization_preprocess_pass);
USE_MIR_PASS(apu_subgraph_pass);
USE_MIR_PASS(quantized_op_attributes_inference_pass);
USE_MIR_PASS(__xpu__resnet_fuse_pass);
USE_MIR_PASS(__xpu__multi_encoder_fuse_pass);
USE_MIR_PASS(__xpu__embedding_with_eltwise_add_fuse_pass);
USE_MIR_PASS(__xpu__fc_fuse_pass);

@ -1,21 +0,0 @@
# 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

@ -1,20 +0,0 @@
{
"version": 1,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.example.administrator.baiduvoicetest",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"properties": [],
"versionCode": 100000,
"versionName": "1.0",
"enabled": true,
"outputFile": "app-release.apk"
}
]
}

@ -1 +0,0 @@
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]

@ -1,26 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.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.getTargetContext();
assertEquals("com.baidu.paddle.lite.demo", appContext.getPackageName());
}
}

@ -1,105 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.administrator.baiduvoicetest"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".LoginActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NotesActivity"
android:label="@string/title_activity_notes" >
</activity>
<activity
android:name=".RigisterActivity"
android:label="@string/title_activity_rigister" >
</activity>
<activity
android:name=".SettingsActivity"
android:label="Settings">
</activity>
<activity
android:name=".MainActivity">
</activity>
<meta-data android:name="com.baidu.speech.APP_ID" android:value="8888274"/>
<meta-data android:name="com.baidu.speech.API_KEY" android:value="FOFOGnjFERG3UTZC4FdDnXhM"/>
<meta-data android:name="com.baidu.speech.SECRET_KEY" android:value="63830985f5b05d2863f13ad07c7feaa3"/>
<service android:name="com.baidu.speech.VoiceRecognitionService" android:exported="false" />
<activity
android:name="com.baidu.voicerecognition.android.ui.BaiduASRDigitalDialog"
android:configChanges="orientation|keyboardHidden|screenLayout"
android:theme="@android:style/Theme.Dialog"
android:exported="false">
<intent-filter>
<action android:name="com.baidu.action.RECOGNIZE_SPEECH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- end : baidu speech sdk-->
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>
<!--<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.baidu.paddle.lite.demo.image_classification">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity1">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".SettingsActivity"
android:label="Settings">
</activity>
</application>
</manifest>-->

@ -1,4 +0,0 @@
百度语音识别SDK在demo程序中assets目录的文件解释说明:
license-android-easr_recognizedemo.txt 离线授权文件, 该文件与包名相关, 故请勿放置到自己的app中
WakeUp.bin 唤醒功能的唤醒词配置文件, 需要在百度语音开发平台中定义和导出
baidu_speech_grammar.bsg 自定义语义以及离线识别共用的语法文件, 需要在百度语音开发平台中定义和导出

@ -1 +0,0 @@
fAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõfAEYGGtÓßOpEYB_ZBòõ

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

@ -1,40 +0,0 @@
0 其他垃圾/一次性快餐盒
1 其他垃圾/污损塑料
2 其他垃圾/烟蒂
3 其他垃圾/牙签
4 其他垃圾/破碎花盆及碟碗
5 其他垃圾/竹筷
6 厨余垃圾/剩饭剩菜
7 厨余垃圾/大骨头
8 厨余垃圾/水果果皮
9 厨余垃圾/水果果肉
10 厨余垃圾/茶叶渣
11 厨余垃圾/菜叶菜根
12 厨余垃圾/蛋壳
13 厨余垃圾/鱼骨
14 可回收物/充电宝
15 可回收物/包
16 可回收物/化妆品瓶
17 可回收物/塑料玩具
18 可回收物/塑料碗盆
19 可回收物/塑料衣架
20 可回收物/快递纸袋
21 可回收物/插头电线
22 可回收物/旧衣服
23 可回收物/易拉罐
24 可回收物/枕头
25 可回收物/毛绒玩具
26 可回收物/洗发水瓶
27 可回收物/玻璃杯
28 可回收物/皮鞋
29 可回收物/砧板
30 可回收物/纸板箱
31 可回收物/调料瓶
32 可回收物/酒瓶
33 可回收物/金属食品罐
34 可回收物/锅
35 可回收物/食用油桶
36 可回收物/饮料瓶
37 有害垃圾/干电池
38 有害垃圾/软膏
39 有害垃圾/过期药物

@ -1 +0,0 @@
acfcb9c8b0260c3716134d26152f47ac60a08c922ac4c612cf9b769e2feca9574aa981255bcd9bc0d0cb306cee8f7bc7bad433108240724160c9fd95d580e36e518b285fe595f8e2394013fb17f07a580acfe74e6454e1a27b3916fcd52bcd4a192b3cda88ddb3dcf267dd7a9ee0148211803b6d6cb0b4ac3450528b545e1f3b822fd78e8db3c35847b21d673d61d89ae3ab3178e4a584d5e0a7f38deedbe0dbb90ec907955b5f08015cdb50e97adadc8c1e935cf66127e7ba8036e63df77560a76d86c4781a7f3cc24a04d595472216df3905965643a36bdaffeedcfc0b35f090ac02b268698a77ec092ce0548a3e1e5e2c9a6ffb5d949c202be3367af75f6a

@ -1,175 +0,0 @@
/*
* Copyright (C) 2014 The Android Open Source Project
*
* 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.
*/
package com.example.administrator.baiduvoicetest;
import android.content.res.Configuration;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* AppCompatPreferenceActivity {@link android.preference.PreferenceActivity}
* Android AppCompat ActionBar
* AppCompatDelegate
* <p>
* 使 AppCompat 使 Toolbar ActionBar
*/
public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
// AppCompatDelegate 的实例,用于处理所有 AppCompat 相关的功能。
private AppCompatDelegate mDelegate;
/**
* AppCompatDelegate onCreate
* @param savedInstanceState Bundle null
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
getDelegate().installViewFactory();
getDelegate().onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
}
/**
* AppCompatDelegate onPostCreate
* @param savedInstanceState Bundle null
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
getDelegate().onPostCreate(savedInstanceState);
}
/**
* ActionBar
* @return ActionBar null
*/
public ActionBar getSupportActionBar() {
return getDelegate().getSupportActionBar();
}
/**
* Toolbar ActionBar
* @param toolbar ActionBar Toolbar
*/
public void setSupportActionBar(@Nullable Toolbar toolbar) {
getDelegate().setSupportActionBar(toolbar);
}
/**
* MenuInflater
* @return MenuInflater inflate
*/
@Override
public MenuInflater getMenuInflater() {
return getDelegate().getMenuInflater();
}
/**
*
* @param layoutResID ID
*/
@Override
public void setContentView(@LayoutRes int layoutResID) {
getDelegate().setContentView(layoutResID);
}
/**
*
* @param view
*/
@Override
public void setContentView(View view) {
getDelegate().setContentView(view);
}
/**
*
* @param view
* @param params
*/
@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
getDelegate().setContentView(view, params);
}
/**
*
* @param view
* @param params
*/
@Override
public void addContentView(View view, ViewGroup.LayoutParams params) {
getDelegate().addContentView(view, params);
}
/**
* AppCompatDelegate onPostResume
*/
@Override
protected void onPostResume() {
super.onPostResume();
getDelegate().onPostResume();
}
/**
* AppCompatDelegate setTitle
* @param title
* @param color
*/
@Override
protected void onTitleChanged(CharSequence title, int color) {
super.onTitleChanged(title, color);
getDelegate().setTitle(title);
}
/**
* AppCompatDelegate onConfigurationChanged
* @param newConfig
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
getDelegate().onConfigurationChanged(newConfig);
}
/**
* AppCompatDelegate onStop
*/
@Override
protected void onStop() {
super.onStop();
getDelegate().onStop();
}
/**
* AppCompatDelegate onDestroy
*/
@Override
protected void onDestroy() {
super.onDestroy();
getDelegate().onDestroy();
}
/**
* 使便 {@link #onCreateOptionsMenu}
*/
public void invalidateOptionsMenu() {
getDelegate().invalidateOptionsMenu();
}
/**
* AppCompatDelegate
* @return AppCompatDelegate
*/
private AppCompatDelegate getDelegate() {
if (mDelegate == null) {
mDelegate = AppCompatDelegate.create(this, null);
}
return mDelegate;
}
}

@ -1,68 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.util.AttributeSet;
import android.widget.ImageButton;
/**
* ImageButton
* ImageButton
* @author SJR
*/
public class CustomImageButton extends android.support.v7.widget.AppCompatImageButton {
// 文本内容变量
private String _text = "";
// 文本颜色变量
private int _color = 0;
// 文本大小变量
private float _textsize = 0f;
/**
* ImageButton
* @param context
* @param attrs
*/
public CustomImageButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
*
* @param text
*/
public void setText(String text){
this._text = text;
}
/**
*
* @param color
*/
public void setColor(int color){
this._color = color;
}
/**
*
* @param textsize
*/
public void setTextSize(float textsize){
this._textsize = textsize;
}
/**
* onDraw
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 创建并配置Paint对象用于绘制文本
Paint paint = new Paint();
paint.setTextAlign(Align.CENTER); // 设置文本对齐方式为居中
paint.setColor(_color); // 设置文本颜色
paint.setTextSize(_textsize);// 设置文本大小
// 在按钮中心位置绘制文本
canvas.drawText(_text, canvas.getWidth()/2, (canvas.getHeight()/2)+12, paint);
}
}

@ -1,124 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.util.Log;
/**
*
*/
public class DigitalConversion {
/**
* 09
*/
private static String nums[] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
/**
* 109999
*/
private static String pos_units[] = {"", "十", "百", "千"};
/**
* 亿
*/
private static String weight_units[] = {"", "万", "亿"};
/**
*
*
* @param num
* @return
*/
/**
*
*
* @param num
* @return
*/
public static String numberToChinese(int num) {
// 如果num为0直接返回"零"
if (num == 0) {
return "零";
}
// 权位指示,用于添加重量级单位
int weigth = 0;//节权位
// 最终的中文表示字符串
String chinese = "";
// 每个小节的中文表示
String chinese_section = "";
// 标志位,用于判断是否需要在下一小节添加"零"
boolean setZero = false;//下一小节是否需要零第一次没有上一小节所以为false
// 循环处理每一小节
while (num > 0) {
// 获取当前小节的数值
int section = num % 10000;//得到最后面的小节
// 如果上一小节的千位是0则在此小节前添加"零"
if (setZero) {
chinese = nums[0] + chinese;
}
// 转换当前小节为中文
chinese_section = sectionTrans(section);
// 如果当前小节不为0则添加重量级单位
if (section != 0) {
chinese_section = chinese_section + weight_units[weigth];
}
// 将当前小节的中文表示添加到最终结果的前面
chinese = chinese_section + chinese;
chinese_section = "";
// 标志位,用于判断下一小节是否需要添加"零"
setZero = (section < 1000) && (section > 0);
// 处理下一个小节
num = num / 10000;
weigth++;
}
// 处理特殊情况:"一十"改为"十"
if ((chinese.length() == 2 || (chinese.length() == 3)) && chinese.contains("一十")) {
chinese = chinese.substring(1, chinese.length());
}
if (chinese.indexOf("一十") == 0) {
chinese = chinese.replaceFirst("一十", "十");
}
return chinese;
}
/**
*
*
* @param section
* @return
*/
/**
*
*
* @param section
* @return
*/
public static String sectionTrans(int section) {
// 用于构建小节的中文表示
StringBuilder section_chinese = new StringBuilder();
// 小节内部的权位计数器
int pos = 0;//小节内部权位的计数器
// 标志位,用于判断是否需要添加"零"
boolean zero = true;//小节内部的置零判断,每一个小节只能有一个零。
// 循环处理小节的每一位
while (section > 0) {
// 获取小节的最后一位数字
int v = section % 10;//得到最后一个数
// 如果是0且之前没有添加过"零",则添加"零"
if (v == 0) {
if (!zero) {
zero = true;//需要补零的操作,确保对连续多个零只是输出一个
section_chinese.insert(0, nums[0]);
}
} else {
// 如果不是0设置标志位为false并添加相应的数字和单位
zero = false;//有非零数字就把置
section_chinese.insert(0, pos_units[pos]);
section_chinese.insert(0, nums[v]);
}
// 更新权位计数器
pos++;
// 处理下一位数字
section = section / 10;
}
// 返回小节的中文表示
return section_chinese.toString();
}
}

@ -1,815 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import com.alibaba.fastjson.JSON;
import com.example.administrator.baiduvoicetest.DigitalConversion;
import android.os.HandlerThread;
import android.os.Message;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.util.AndroidRuntimeException;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.speech.EventListener;
import com.baidu.speech.EventManager;
import com.baidu.speech.EventManagerFactory;
import com.baidu.tts.auth.AuthInfo;
import com.baidu.tts.client.SpeechError;
import com.baidu.tts.client.SpeechSynthesizer;
import com.baidu.tts.client.SpeechSynthesizerListener;
import com.baidu.tts.client.TtsMode;
import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
public class IndexActivity extends AppCompatActivity implements OnInitListener {
private SpeechSynthesizer mSpeechSynthesizer;
private String mSampleDirPath;
private static final String SAMPLE_DIR_NAME = "baiduTTS";
private static final String SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female.dat";
private static final String SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male.dat";
private static final String TEXT_MODEL_NAME = "bd_etts_text.dat";
private static final String LICENSE_FILE_NAME = "temp_license";
private static final String ENGLISH_SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female_en.dat";
private static final String ENGLISH_SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male_en.dat";
private static final String ENGLISH_TEXT_MODEL_NAME = "bd_etts_text_en.dat";
private EventManager mWpEventManager;
private boolean first = true;
private static final String TAG = IndexActivity.class.getSimpleName();
public static final int OPEN_GALLERY_REQUEST_CODE = 0;
public static final int TAKE_PHOTO_REQUEST_CODE = 1;
public static final int REQUEST_LOAD_MODEL = 0;
public static final int REQUEST_RUN_MODEL = 1;
public static final int RESPONSE_LOAD_MODEL_SUCCESSED = 0;
public static final int RESPONSE_LOAD_MODEL_FAILED = 1;
public static final int RESPONSE_RUN_MODEL_SUCCESSED = 2;
public static final int RESPONSE_RUN_MODEL_FAILED = 3;
protected ProgressDialog pbLoadModel = null;
protected ProgressDialog pbRunModel = null;
protected Handler receiver = null; // Receive messages from worker thread
protected Handler sender = null; // Send command to worker thread
protected HandlerThread worker = null; // Worker thread to load&run model
// UI components of image classification
protected TextView tvInputSetting;
protected ImageView ivInputImage;
protected Button open_gallery, take_photo,shanchuan;
protected TextView tvTop1Result;
protected TextView tvTop2Result;
// protected TextView tvTop3Result;
protected TextView percent1;
protected TextView percent2;
protected TextView tvInferenceTime;
protected TextView result;
protected TextToSpeech tts;
// Model settings of image classification
protected String modelPath = "";
protected String labelPath = "";
protected String imagePath = "";
protected int cpuThreadNum = 1;
protected String cpuPowerMode = "";
protected String inputColorFormat = "";
protected long[] inputShape = new long[]{};
protected float[] inputMean = new float[]{};
protected float[] inputStd = new float[]{};
protected Predictor predictor = new Predictor();
//开始开始开始开始开始开始开始开始开始开始开始开始开始开始开始
// 测试路径(默认值)
//static String testPath = "/sdcard/Pictures/t.jpg";//"/storage/sdcard/Download/t.jpg";
//Environment.getExternalStorageDirectory().getAbsolutePath()
//+ "/test.jpg";///storage/sdcard/Download/android-env.jpg
//Button btn_send;// "上传"按钮
//ImageView iv; // 图片框
static String baseUrl = "http://192.168.56.1/demo/";
static String infoUrl = baseUrl + "uploadfile_get.php";
static String upUrl = baseUrl + "uploadfile.php";
@RequiresApi(api = Build.VERSION_CODES.M)
// 发送文件
private void sendFile(){
// 接口地址
String url = upUrl;
String filepath = imagePath;
File file = new File(filepath);
if (file.exists()) {
upload(url, file);
}else{
show("你给的文件路径不存在");
}
}
/**
*
* @param url
* @param uploadfile
*/
private void upload(String url, File uploadfile) {
RequestParams params = new RequestParams();
// 这里必须按照文档写
params.addBodyParameter("uploadfile", uploadfile);
shanchuan.setEnabled(false);
// 发送请求
new HttpUtils().send(
HttpRequest.HttpMethod.POST,// 上传必须是POST
url,
params,
new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> info) {
String result = info.result.trim();// 上传文件的数据库ID
show("上传后的结果:"+result);
result = result.substring(result.indexOf("{")+1);// 从{开始截取,包含{
if (result.equals("0")) {
show("上传失败");
} else {
show("上传成功,新ID是:" + result);
}
shanchuan.setEnabled(true);
// 获取服务器信息,展示上传的图片
// getUploadedInfo(infoUrl,result);
}
@Override
public void onFailure(HttpException e, String s) {
show("网络失败:" + s);
shanchuan.setEnabled(true);
}
}
);
}
public void show(String msg){
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
Log.i("spl",msg);
}
@SuppressLint("WrongViewCast")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
tts = new TextToSpeech(this, this);
// Clear all setting items to avoid app crashing due to the incorrect settings
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.commit();
// Prepare the worker thread for mode loading and inference
receiver = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case RESPONSE_LOAD_MODEL_SUCCESSED:
pbLoadModel.dismiss();
onLoadModelSuccessed();
break;
case RESPONSE_LOAD_MODEL_FAILED:
pbLoadModel.dismiss();
Toast.makeText(IndexActivity.this, "Load model failed!", Toast.LENGTH_SHORT).show();
onLoadModelFailed();
break;
case RESPONSE_RUN_MODEL_SUCCESSED:
pbRunModel.dismiss();
onRunModelSuccessed();
break;
case RESPONSE_RUN_MODEL_FAILED:
pbRunModel.dismiss();
Toast.makeText(IndexActivity.this, "Run model failed!", Toast.LENGTH_SHORT).show();
onRunModelFailed();
break;
default:
break;
}
}
};
worker = new HandlerThread("Predictor Worker");
worker.start();
sender = new Handler(worker.getLooper()) {
public void handleMessage(Message msg) {
switch (msg.what) {
case REQUEST_LOAD_MODEL:
// Load model and reload test image
if (onLoadModel()) {
receiver.sendEmptyMessage(RESPONSE_LOAD_MODEL_SUCCESSED);
} else {
receiver.sendEmptyMessage(RESPONSE_LOAD_MODEL_FAILED);
}
break;
case REQUEST_RUN_MODEL:
// Run model if model is loaded
if (onRunModel()) {
receiver.sendEmptyMessage(RESPONSE_RUN_MODEL_SUCCESSED);
} else {
receiver.sendEmptyMessage(RESPONSE_RUN_MODEL_FAILED);
}
break;
default:
break;
}
}
};
// Setup the UI components
tvInputSetting = findViewById(R.id.tv_input_setting);
ivInputImage = findViewById(R.id.iv_input_image);
tvTop1Result = findViewById(R.id.tv_top1_result);
//tvTop2Result = findViewById(R.id.tv_top2_result);
percent1=findViewById(R.id.percent1);
//percent2=findViewById(R.id.percent2);
//tvTop3Result = findViewById(R.id.tv_top3_result);
tvInferenceTime = findViewById(R.id.tv_inference_time);
open_gallery = findViewById(R.id.t1);
take_photo = findViewById(R.id.t2);
shanchuan=findViewById(R.id.t3);
tvInputSetting.setMovementMethod(ScrollingMovementMethod.getInstance());
open_gallery.setOnClickListener(new OnClickListener() {
@Override
//在当前onClick方法中监听点击Button的动作
public void onClick(View v) {
if (requestAllPermissions()) {
takePhoto();
}
}
});
take_photo.setOnClickListener(new OnClickListener() {
@Override
//在当前onClick方法中监听点击Button的动作
public void onClick(View v) {
if (requestAllPermissions()) {
openGallery();
}
}
});
shanchuan.setOnClickListener(new OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
//在当前onClick方法中监听点击Button的动作
public void onClick(View v) {
sendFile();
Toast.makeText(IndexActivity.this,"技术君努力开发中",Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onInit(int status) {
// 判断是否转化成功
if (status == TextToSpeech.SUCCESS) {
//默认设定语言为中文原生的android貌似不支持中文。
int result = tts.setLanguage(Locale.CHINESE);
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
} else {
//不支持中文就将语言设置为英文
tts.setLanguage(Locale.US);
}
}
}
@Override
protected void onResume() {
super.onResume();
if (first) {
initialEnv();
initialTts();
first = false;
}
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean settingsChanged = false;
String model_path = sharedPreferences.getString(getString(R.string.MODEL_PATH_KEY),
getString(R.string.MODEL_PATH_DEFAULT));
String label_path = sharedPreferences.getString(getString(R.string.LABEL_PATH_KEY),
getString(R.string.LABEL_PATH_DEFAULT));
String image_path = sharedPreferences.getString(getString(R.string.IMAGE_PATH_KEY),
getString(R.string.IMAGE_PATH_DEFAULT));
settingsChanged |= !model_path.equalsIgnoreCase(modelPath);
settingsChanged |= !label_path.equalsIgnoreCase(labelPath);
settingsChanged |= !image_path.equalsIgnoreCase(imagePath);
int cpu_thread_num = Integer.parseInt(sharedPreferences.getString(getString(R.string.CPU_THREAD_NUM_KEY),
getString(R.string.CPU_THREAD_NUM_DEFAULT)));
settingsChanged |= cpu_thread_num != cpuThreadNum;
String cpu_power_mode =
sharedPreferences.getString(getString(R.string.CPU_POWER_MODE_KEY),
getString(R.string.CPU_POWER_MODE_DEFAULT));
settingsChanged |= !cpu_power_mode.equalsIgnoreCase(cpuPowerMode);
String input_color_format =
sharedPreferences.getString(getString(R.string.INPUT_COLOR_FORMAT_KEY),
getString(R.string.INPUT_COLOR_FORMAT_DEFAULT));
settingsChanged |= !input_color_format.equalsIgnoreCase(inputColorFormat);
long[] input_shape =
Utils.parseLongsFromString(sharedPreferences.getString(getString(R.string.INPUT_SHAPE_KEY),
getString(R.string.INPUT_SHAPE_DEFAULT)), ",");
float[] input_mean =
Utils.parseFloatsFromString(sharedPreferences.getString(getString(R.string.INPUT_MEAN_KEY),
getString(R.string.INPUT_MEAN_DEFAULT)), ",");
float[] input_std =
Utils.parseFloatsFromString(sharedPreferences.getString(getString(R.string.INPUT_STD_KEY)
, getString(R.string.INPUT_STD_DEFAULT)), ",");
settingsChanged |= input_shape.length != inputShape.length;
settingsChanged |= input_mean.length != inputMean.length;
settingsChanged |= input_std.length != inputStd.length;
if (!settingsChanged) {
for (int i = 0; i < input_shape.length; i++) {
settingsChanged |= input_shape[i] != inputShape[i];
}
for (int i = 0; i < input_mean.length; i++) {
settingsChanged |= input_mean[i] != inputMean[i];
}
for (int i = 0; i < input_std.length; i++) {
settingsChanged |= input_std[i] != inputStd[i];
}
}
if (settingsChanged) {
modelPath = model_path;
labelPath = label_path;
imagePath = image_path;
cpuThreadNum = cpu_thread_num;
cpuPowerMode = cpu_power_mode;
inputColorFormat = input_color_format;
inputShape = input_shape;
inputMean = input_mean;
inputStd = input_std;
loadModel();
}
}
public void loadModel() {
pbLoadModel = ProgressDialog.show(this, "", "Loading model...", false, false);
sender.sendEmptyMessage(REQUEST_LOAD_MODEL);
}
public void runModel() {
pbRunModel = ProgressDialog.show(this, "", "Running model...", false, false);
sender.sendEmptyMessage(REQUEST_RUN_MODEL);
}
public boolean onLoadModel() {
return predictor.init(IndexActivity.this, modelPath, labelPath, cpuThreadNum,
cpuPowerMode,
inputColorFormat,
inputShape, inputMean,
inputStd);
}
public boolean onRunModel() {
return predictor.isLoaded() && predictor.runModel();
}
public void onLoadModelSuccessed() {
// Load test image from path and run model
try {
if (imagePath.isEmpty()) {
return;
}
Bitmap image = null;
// Read test image file from custom path if the first character of mode path is '/', otherwise read test
// image file from assets
if (!imagePath.substring(0, 1).equals("/")) {
InputStream imageStream = getAssets().open(imagePath);
image = BitmapFactory.decodeStream(imageStream);
} else {
if (!new File(imagePath).exists()) {
return;
}
image = BitmapFactory.decodeFile(imagePath);
}
if (image != null && predictor.isLoaded()) {
predictor.setInputImage(image);
runModel();
}
} catch (IOException e) {
//Toast.makeText(IndexActivity.this, "Load image failed!", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
public void onLoadModelFailed() {
}
public void onRunModelSuccessed() {
// Obtain results and update UI
tvInferenceTime.setText(predictor.inferenceTime + " ms");
Bitmap inputImage = predictor.inputImage();
if (inputImage != null) {
ivInputImage.setImageBitmap(inputImage);
}
tvTop1Result.setText(predictor.top1Result());
// tvTop2Result.setText(predictor.top1Result());
percent1.setText(predictor.percent1);
// percent2.setText(predictor.percent2);
// tvTop3Result.setText(predictor.top3Result());
DigitalConversion dig=new DigitalConversion();
double num=Double.parseDouble(predictor.percent1)*100;
int i=(int)num;
String temp=dig.numberToChinese(i);
String res = "该物品有百分之"+temp+"的可能性是"+tvTop1Result.getText().toString()+"请妥善处理";
tts.speak(res, TextToSpeech.QUEUE_FLUSH, null);
}
public void onRunModelFailed() {
}
public void onImageChanged(Bitmap image) {
// Rerun model if users pick test image from gallery or camera
if (image != null && predictor.isLoaded()) {
predictor.setInputImage(image);
runModel();
}
}
public void onSettingsClicked() {
startActivity(new Intent(IndexActivity.this, SettingsActivity.class));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_action_options, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
}
private boolean requestAllPermissions() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA},
0);
return false;
}
return true;
}
private void openGallery() {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, OPEN_GALLERY_REQUEST_CODE);
}
private void takePhoto() {
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePhotoIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePhotoIntent, TAKE_PHOTO_REQUEST_CODE);
}
}
@Override
protected void onStart() {
super.onStart();
// 唤醒功能打开步骤
// 1) 创建唤醒事件管理器
mWpEventManager = EventManagerFactory.create(IndexActivity.this, "wp");
// 2) 注册唤醒事件监听器
mWpEventManager.registerListener(new EventListener() {
@Override
public void onEvent(String name, String params, byte[] data, int offset, int length) {
Log.d(TAG, String.format("event: name=%s, params=%s", name, params));
try {
JSONObject json = new JSONObject(params);
if ("wp.data".equals(name)) { // 每次唤醒成功, 将会回调name=wp.data的时间, 被激活的唤醒词在params的word字段
String word = json.getString("word");
Toast.makeText(IndexActivity.this, "唤醒成功,请说出指令", Toast.LENGTH_LONG).show();
speak("唤醒成功,请说出指令");
//延时3秒防止语音合成的内容又被语音识别
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Intent intent = new Intent("com.baidu.action.RECOGNIZE_SPEECH");
intent.putExtra("grammar", "asset:///baidu_speech_grammardemo.bsg"); // 设置离线的授权文件(离线模块需要授权), 该语法可以用自定义语义工具生成, 链接http://yuyin.baidu.com/asr#m5
//intent.putExtra("slot-data", your slots); // 设置grammar中需要覆盖的词条,如联系人名
startActivityForResult(intent, 2);
} else if ("wp.exit".equals(name)) {
}
} catch (JSONException e) {
throw new AndroidRuntimeException(e);
}
}
});
// 3) 通知唤醒管理器, 启动唤醒功能
HashMap params = new HashMap();
params.put("kws-file", "assets:///WakeUpDemo.bin"); // 设置唤醒资源, 唤醒资源请到 http://yuyin.baidu.com/wake#m4 来评估和导出
mWpEventManager.send("wp.start", new JSONObject(params).toString(), null, 0, 0);
}
private void initialEnv() {
if (mSampleDirPath == null) {
String sdcardPath = Environment.getExternalStorageDirectory().toString();
mSampleDirPath = sdcardPath + "/" + SAMPLE_DIR_NAME;
}
makeDir(mSampleDirPath);
copyFromAssetsToSdcard(false, SPEECH_FEMALE_MODEL_NAME, mSampleDirPath + "/" + SPEECH_FEMALE_MODEL_NAME);
copyFromAssetsToSdcard(false, SPEECH_MALE_MODEL_NAME, mSampleDirPath + "/" + SPEECH_MALE_MODEL_NAME);
copyFromAssetsToSdcard(false, TEXT_MODEL_NAME, mSampleDirPath + "/" + TEXT_MODEL_NAME);
copyFromAssetsToSdcard(false, LICENSE_FILE_NAME, mSampleDirPath + "/" + LICENSE_FILE_NAME);
copyFromAssetsToSdcard(false, "english/" + ENGLISH_SPEECH_FEMALE_MODEL_NAME, mSampleDirPath + "/"
+ ENGLISH_SPEECH_FEMALE_MODEL_NAME);
copyFromAssetsToSdcard(false, "english/" + ENGLISH_SPEECH_MALE_MODEL_NAME, mSampleDirPath + "/"
+ ENGLISH_SPEECH_MALE_MODEL_NAME);
copyFromAssetsToSdcard(false, "english/" + ENGLISH_TEXT_MODEL_NAME, mSampleDirPath + "/"
+ ENGLISH_TEXT_MODEL_NAME);
}
private void makeDir(String dirPath) {
File file = new File(dirPath);
if (!file.exists()) {
file.mkdirs();
}
}
/**
* sampleSD使
*
* @param isCover
* @param source
* @param dest
*/
private void copyFromAssetsToSdcard(boolean isCover, String source, String dest) {
File file = new File(dest);
if (isCover || (!isCover && !file.exists())) {
InputStream is = null;
FileOutputStream fos = null;
try {
is = getResources().getAssets().open(source);
String path = dest;
fos = new FileOutputStream(path);
byte[] buffer = new byte[1024];
int size = 0;
while ((size = is.read(buffer, 0, 1024)) >= 0) {
fos.write(buffer, 0, size);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void initialTts() {
this.mSpeechSynthesizer = SpeechSynthesizer.getInstance();
this.mSpeechSynthesizer.setContext(this);
this.mSpeechSynthesizer.setSpeechSynthesizerListener(new SpeechSynthesizerListener() {
@Override
public void onSynthesizeStart(String s) {
}
@Override
public void onSynthesizeDataArrived(String s, byte[] bytes, int i) {
}
@Override
public void onSynthesizeFinish(String s) {
}
@Override
public void onSpeechStart(String s) {
}
@Override
public void onSpeechProgressChanged(String s, int i) {
}
@Override
public void onSpeechFinish(String s) {
}
@Override
public void onError(String s, SpeechError speechError) {
}
});
// 文本模型文件路径 (离线引擎使用)
this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_TEXT_MODEL_FILE, mSampleDirPath + "/"
+ TEXT_MODEL_NAME);
// 声学模型文件路径 (离线引擎使用)
this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_SPEECH_MODEL_FILE, mSampleDirPath + "/"
+ SPEECH_FEMALE_MODEL_NAME);
// 本地授权文件路径,如未设置将使用默认路径.设置临时授权文件路径LICENCE_FILE_NAME请替换成临时授权文件的实际路径仅在使用临时license文件时需要进行设置如果在[应用管理]中开通了正式离线授权,不需要设置该参数,建议将该行代码删除(离线引擎)
// 如果合成结果出现临时授权文件将要到期的提示,说明使用了临时授权文件,请删除临时授权即可。
this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_LICENCE_FILE, mSampleDirPath + "/"
+ LICENSE_FILE_NAME);
// 请替换为语音开发者平台上注册应用得到的App ID (离线授权)
this.mSpeechSynthesizer.setAppId("8888274"/*这里只是为了让Demo运行使用的APPID,请替换成自己的id。*/);
// 请替换为语音开发者平台注册应用得到的apikey和secretkey (在线授权)
this.mSpeechSynthesizer.setApiKey("FOFOGnjFERG3UTZC4FdDnXhM",
"63830985f5b05d2863f13ad07c7feaa3"/*这里只是为了让Demo正常运行使用APIKey,请替换成自己的APIKey*/);
// 发音人在线引擎可用参数为0,1,2,3。。。服务器端会动态增加各值含义参考文档以文档说明为准。0--普通女声1--普通男声2--特别男声3--情感男声。。。)
this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0");
// 设置Mix模式的合成策略
this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE, SpeechSynthesizer.MIX_MODE_DEFAULT);
// 授权检测接口(只是通过AuthInfo进行检验授权是否成功。)
// AuthInfo接口用于测试开发者是否成功申请了在线或者离线授权如果测试授权成功了可以删除AuthInfo部分的代码该接口首次验证时比较耗时不会影响正常使用合成使用时SDK内部会自动验证授权
AuthInfo authInfo = this.mSpeechSynthesizer.auth(TtsMode.MIX);
if (authInfo.isSuccess()) {
Toast.makeText(this, "百度语音认证成功", Toast.LENGTH_LONG).show();
} else {
String errorMsg = authInfo.getTtsError().getDetailMessage();
Toast.makeText(this, "百度语音认证失败=" + errorMsg, Toast.LENGTH_LONG).show();
}
// 初始化tts
mSpeechSynthesizer.initTts(TtsMode.MIX);
}
@Override
protected void onStop() {
super.onStop();
// 停止唤醒监听
mWpEventManager.send("wp.stop", null, null, 0, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && data != null) {
switch (requestCode) {
case OPEN_GALLERY_REQUEST_CODE:
try {
ContentResolver resolver = getContentResolver();
Uri uri = data.getData();
Bitmap image = MediaStore.Images.Media.getBitmap(resolver, uri);
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(uri, proj, null, null, null);
cursor.moveToFirst();
onImageChanged(image);
} catch (IOException e) {
Log.e(TAG, e.toString());
}
break;
case TAKE_PHOTO_REQUEST_CODE:
Bundle extras = data.getExtras();
Bitmap image = (Bitmap) extras.get("data");
onImageChanged(image);
break;
case 2:
Bundle results = data.getExtras();
ArrayList<String> results_recognition = results.getStringArrayList("results_recognition");
//txtResult.append("识别结果(数组形式): " + results_recognition + "\n");
//将数组形式的识别结果变为正常的String类型[给张三打电话]变成给张三打电话
String str = results_recognition + "";
String res = str.substring(str.indexOf("[") + 1, str.indexOf("]"));
// txtResult.append(res+"\n");
if (res.contains("相册") || res.contains("相片") || res.contains("图库") || res.contains("图片")) {
openGallery();
}
if (res.contains("相机")) {
takePhoto();
}
break;
default:
break;
}
}
}
private void speak(String text) {
int result = this.mSpeechSynthesizer.speak(text);
if (result < 0) {
Toast.makeText(this, "error,please look up error code in doc or URL:http://yuyin.baidu.com/docs/tts/122 ", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onDestroy() {
if (predictor != null) {
predictor.releaseModel();
}
worker.quit();
super.onDestroy();
}
}

@ -1,85 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
* LoginActivity
*
*/
public class LoginActivity extends Activity {
EditText uname, upass;// 用户名和密码输入框
Button login, sign_in; // 登录和注册按钮
// RALDbConnect 是数据库连接类的实例
RALDbConnect ralDbConnect ;
/**
* Activity
* @param savedInstanceState null
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
uname = (EditText)findViewById(R.id.editText1);
upass = (EditText) findViewById(R.id.editText2);
login = (Button) findViewById(R.id.button1);
sign_in = (Button)findViewById(R.id.button2);
// 初始化数据库连接类
// mdq = new RALDbQuery(this);
ralDbConnect = new RALDbConnect(this) ;
// 设置注册按钮点击事件,跳转到注册页面
sign_in.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i = new Intent(LoginActivity.this, RigisterActivity.class);
startActivity(i);
finish();
}
});
// 设置登录按钮点击事件,验证用户身份
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// intent to move on next activity
// 从输入框获取用户名和密码
String checkname = uname.getText().toString();
String checkpass = upass.getText().toString();
// 获取可读数据库
SQLiteDatabase sdb= ralDbConnect.getReadableDatabase();
// 构造查询用户名和密码是否匹配的SQL语句
String sql="select * from mytable where USERNAME=? and PASSWORD=?";
// 执行查询并获取结果集
Cursor cursor=sdb.rawQuery(sql, new String[]{checkname,checkpass});
// 检查结果集是否为空
if(cursor.getCount()>0) {
cursor.moveToFirst();
cursor.close();
// 用户名和密码匹配,跳转到主页面
Intent i = new Intent(LoginActivity.this, MainActivity.class);
startActivity(i);
// finish(); // to close current activity
}
else
// 用户名和密码不匹配,提示用户
Toast.makeText(getApplicationContext(), "输入正确的用户名和密码!", Toast.LENGTH_LONG).show();
}
});
}
}

@ -1,177 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.administrator.baiduvoicetest.adapter.FragmentAdapter;
import com.example.administrator.baiduvoicetest.fragment.CategoryFragment;
//import com.example.administrator.baiduvoicetest.fragment.Connection;
import com.example.administrator.baiduvoicetest.fragment.SettingFragment;
import com.example.administrator.baiduvoicetest.fragment.TestFragment;
import com.example.administrator.baiduvoicetest.utils.JDBCUtils;
import java.util.ArrayList;
import java.util.List;
/**
*
* View.OnClickListener
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
/* 视图pager用于滑动切换不同标签页 */
private ViewPager mViewPager;
/* 家庭、分类、设置三个标签页的线性布局 */
private LinearLayout home,category,setting;
/* 家庭、分类、设置三个标签页的文本视图 */
private TextView tvHome,tvCategory,tvSetting;
/* 存储所有标签页的fragment实例 */
private List<Fragment> fragments = new ArrayList<>();
/* 当前选中的标签页索引 */
private int current = 0;
/* 家庭标签页的fragment实例 */
private TestFragment homeFragment;
/**
*
* @param savedInstanceState
*
*
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
JDBCUtils.mymysql();
homeFragment = new TestFragment();
fragments.add(homeFragment);
fragments.add(new CategoryFragment());
fragments.add(new SettingFragment());
mViewPager = findViewById(R.id.vp);
home = findViewById(R.id.ll_home);
category = findViewById(R.id.ll_category);
setting = findViewById(R.id.ll_setting);
tvHome = findViewById(R.id.tv_home);
tvCategory = findViewById(R.id.tv_category);
tvSetting = findViewById(R.id.tv_setting);
FragmentAdapter fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(),fragments);
mViewPager.setAdapter(fragmentAdapter);
changeTab(1);
// home.setOnClickListener(v->{changeTab(0);});
// category.setOnClickListener(v->{changeTab(1);});
// setting.setOnClickListener(v->{changeTab(2);});
home.setOnClickListener(this);
category.setOnClickListener(this);
setting.setOnClickListener(this);
//Connection.mymysql();
}
/**
*
* @param position
*/
private void changeTab(int position){
tvHome.setTextColor(getResources().getColor(position==0?R.color.tab_pre:R.color.tab_nor));
tvCategory.setTextColor(getResources().getColor(position==1?R.color.tab_pre:R.color.tab_nor));
tvSetting.setTextColor(getResources().getColor(position==2?R.color.tab_pre:R.color.tab_nor));
mViewPager.setCurrentItem(position,false);
}
/**
*
* @param v
*/
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.ll_home:
changeTab(0);
break;
case R.id.ll_category:
changeTab(1);
break;
case R.id.ll_setting:
changeTab(2);
break;
}
}
/**
*
* @param menu
* @return
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_action_options, menu);
return true;
}
/**
*
* @param menu
* @return
*/
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
/**
*
* @param item
* @return
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(homeFragment!=null&&mViewPager.getCurrentItem()==0){
homeFragment.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}
/**
* fragment
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(homeFragment!=null&&mViewPager.getCurrentItem()==0){
homeFragment.onActivityResult(requestCode,resultCode,data);
}
}
}

@ -1,38 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.app.Activity;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.Vector;
import com.example.administrator.baiduvoicetest.R;
import android.widget.ArrayAdapter;
import android.widget.ListView;
/**
* NotesActivity
* ListView
*/
public class NotesActivity extends Activity {
ListView list ; // 列表视图组件
RALDbQuery mdq;// 数据库查询工具实例
ArrayAdapter<String> adapter ; // 用于将数据从 vector 显示到 listview 的适配器
Vector<String> vector = new Vector<String>(); // 用于存储从数据库获取的数据的容器
/**
* onCreate
*
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notes); // 设置当前活动的布局文件
list = (ListView)findViewById(R.id.listView1); // 初始化列表视图组件
mdq = new RALDbQuery(this); // 创建数据库查询工具实例
ArrayList<String> v = mdq.getAllData(); // 从数据库获取所有笔记数据
// 创建并配置适配器
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,v);
list.setAdapter(adapter);// 为列表视图设置适配器以显示数据
}
}

@ -1,434 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import com.baidu.paddle.lite.MobileConfig;
import com.baidu.paddle.lite.PaddlePredictor;
import com.baidu.paddle.lite.PowerMode;
import com.baidu.paddle.lite.Tensor;
import java.io.File;
import java.io.InputStream;
import java.util.Date;
import java.util.Vector;
import static android.graphics.Color.blue;
import static android.graphics.Color.green;
import static android.graphics.Color.red;
/**
* PaddlePaddlePaddleLite
*
*/
public class Predictor {
// 日志标签
private static final String TAG = Predictor.class.getSimpleName();
// 模型是否已加载标志
public boolean isLoaded = false;
// 预热迭代次数
public int warmupIterNum = 1;
// 推理迭代次数
public int inferIterNum = 1;
// CPU线程数
public int cpuThreadNum = 1;
// CPU功率模式
public String cpuPowerMode = "LITE_POWER_HIGH";
// 模型路径
public String modelPath = "";
// 模型名称
public String modelName = "";
// PaddlePredictor实例
protected PaddlePredictor paddlePredictor = null;
// 推理时间
protected float inferenceTime = 0;
// 图像分类标签列表
protected Vector<String> wordLabels = new Vector<String>();
// 输入颜色格式
protected String inputColorFormat = "RGB";
// 输入形状
protected long[] inputShape = new long[]{1, 3, 224, 224};
// 输入归一化均值
protected float[] inputMean = new float[]{0.485f, 0.456f, 0.406f};
// 输入归一化标准差
protected float[] inputStd = new float[]{0.229f, 0.224f, 0.225f};
// 输入图像位图
protected Bitmap inputImage = null;
// 推理结果Top1
protected String top1Result = "";
// 推理结果Top2
protected String top2Result = "";
// protected String top3Result = "";
// Top1置信度
protected String percent1 = "";
// Top2置信度
protected String percent2 = "";
// Top3置信度
protected String percent3 = "";
// 预处理时间
protected float preprocessTime = 0;
// 后处理时间
protected float postprocessTime = 0;
// 构造函数
public Predictor() {
}
/**
*
*
* @param appCtx
* @param modelPath
* @param labelPath
* @param cpuThreadNum 使CPU线
* @param cpuPowerMode CPU
* @param inputColorFormat RGBBGR
* @param inputShape 4
* @param inputMean
* @param inputStd
* @return
*/
public boolean init(Context appCtx, String modelPath, String labelPath, int cpuThreadNum, String cpuPowerMode,
String inputColorFormat,
long[] inputShape, float[] inputMean,
float[] inputStd) {
// 验证输入形状尺寸是否为4
if (inputShape.length != 4) {
Log.i(TAG, "Size of input shape should be: 4");
return false;
}
// 验证输入均值长度是否与通道数匹配
if (inputMean.length != inputShape[1]) {
Log.i(TAG, "Size of input mean should be: " + Long.toString(inputShape[1]));
return false;
}
// 验证输入标准差长度是否与通道数匹配
if (inputStd.length != inputShape[1]) {
Log.i(TAG, "Size of input std should be: " + Long.toString(inputShape[1]));
return false;
}
// 验证是否仅支持单批次处理
if (inputShape[0] != 1) {
Log.i(TAG, "Only one batch is supported in the image classification demo, you can use any batch size in " +
"your Apps!");
return false;
}
// 验证通道数是否为1或3
if (inputShape[1] != 1 && inputShape[1] != 3) {
Log.i(TAG, "Only one/three channels are supported in the image classification demo, you can use any " +
"channel size in your Apps!");
return false;
}
// 验证颜色格式是否支持
if (!inputColorFormat.equalsIgnoreCase("RGB") && !inputColorFormat.equalsIgnoreCase("BGR")) {
Log.i(TAG, "Only RGB and BGR color format is supported.");
return false;
}
// 加载模型
isLoaded = loadModel(appCtx, modelPath, cpuThreadNum, cpuPowerMode);
if (!isLoaded) {
return false;
}
// 加载标签
isLoaded = loadLabel(appCtx, labelPath);
if (!isLoaded) {
return false;
}
// 保存配置信息
this.inputColorFormat = inputColorFormat;
this.inputShape = inputShape;
this.inputMean = inputMean;
this.inputStd = inputStd;
return true;
}
/**
*
*
* @param appCtx
* @param modelPath
* @param cpuThreadNum CPU线
* @param cpuPowerMode CPU
* @return
*/
protected boolean loadModel(Context appCtx, String modelPath, int cpuThreadNum, String cpuPowerMode) {
// 若已有模型,先释放
releaseModel();
// 确保模型路径有效并加载模型
if (modelPath.isEmpty()) {
return false;
}
String realPath = modelPath;
if (!modelPath.substring(0, 1).equals("/")) {
// 若路径不是以'/'开头则从assets复制模型到缓存目录
realPath = appCtx.getCacheDir() + "/" + modelPath;
Utils.copyDirectoryFromAssets(appCtx, modelPath, realPath);
}
if (realPath.isEmpty()) {
return false;
}
// 配置模型加载参数
MobileConfig config = new MobileConfig();
config.setModelFromFile(realPath + File.separator + "model.nb");
config.setThreads(cpuThreadNum);
// 设置CPU功耗模式
if (cpuPowerMode.equalsIgnoreCase("LITE_POWER_HIGH")) {
config.setPowerMode(PowerMode.LITE_POWER_HIGH);
} else if (cpuPowerMode.equalsIgnoreCase("LITE_POWER_LOW")) {
config.setPowerMode(PowerMode.LITE_POWER_LOW);
} else if (cpuPowerMode.equalsIgnoreCase("LITE_POWER_FULL")) {
config.setPowerMode(PowerMode.LITE_POWER_FULL);
} else if (cpuPowerMode.equalsIgnoreCase("LITE_POWER_NO_BIND")) {
config.setPowerMode(PowerMode.LITE_POWER_NO_BIND);
} else if (cpuPowerMode.equalsIgnoreCase("LITE_POWER_RAND_HIGH")) {
config.setPowerMode(PowerMode.LITE_POWER_RAND_HIGH);
} else if (cpuPowerMode.equalsIgnoreCase("LITE_POWER_RAND_LOW")) {
config.setPowerMode(PowerMode.LITE_POWER_RAND_LOW);
} else {
Log.e(TAG, "Unknown cpu power mode!");
return false;
}
// 创建预测器实例
paddlePredictor = PaddlePredictor.createPaddlePredictor(config);
// 保存配置信息
this.cpuThreadNum = cpuThreadNum;
this.cpuPowerMode = cpuPowerMode;
this.modelPath = realPath;
this.modelName = realPath.substring(realPath.lastIndexOf("/") + 1);
return true;
}
/**
*
*/
public void releaseModel() {
paddlePredictor = null;
isLoaded = false;
cpuThreadNum = 1;
cpuPowerMode = "LITE_POWER_HIGH";
modelPath = "";
modelName = "";
}
/**
*
*
* @param appCtx
* @param labelPath
* @return truefalse
*/
protected boolean loadLabel(Context appCtx, String labelPath) {
wordLabels.clear();
// 从文件加载词汇标签
try {
InputStream assetsInputStream = appCtx.getAssets().open(labelPath);
int available = assetsInputStream.available();
byte[] lines = new byte[available];
assetsInputStream.read(lines);
assetsInputStream.close();
String words = new String(lines);
String[] contents = words.split("\n");
for (String content : contents) {
int first_space_pos = content.indexOf(" ");
if (first_space_pos >= 0 && first_space_pos < content.length()) {
wordLabels.add(content.substring(first_space_pos));
}
}
Log.i(TAG, "Word label size: " + wordLabels.size());
} catch (Exception e) {
Log.e(TAG, e.getMessage());
return false;
}
return true;
}
/**
* Tensor
*
* @param idx Tensor
* @return Tensornull
*/
public Tensor getInput(int idx) {
if (!isLoaded()) {
return null;
}
return paddlePredictor.getInput(idx);
}
/**
* Tensor
*
* @param idx Tensor
* @return Tensornull
*/
public Tensor getOutput(int idx) {
if (!isLoaded()) {
return null;
}
return paddlePredictor.getOutput(idx);
}
/**
*
*
* @return truefalse
*/
public boolean runModel() {
if (inputImage == null || !isLoaded()) {
return false;
}
// 设置输入形状
Tensor inputTensor = getInput(0);
inputTensor.resize(inputShape);
// Pre-process image, and feed input tensor with pre-processed data
Date start = new Date();
int channels = (int) inputShape[1];
int width = (int) inputShape[3];
int height = (int) inputShape[2];
float[] inputData = new float[channels * width * height];
if (channels == 3) {
int[] channelIdx = null;
if (inputColorFormat.equalsIgnoreCase("RGB")) {
channelIdx = new int[]{0, 1, 2};
} else if (inputColorFormat.equalsIgnoreCase("BGR")) {
channelIdx = new int[]{2, 1, 0};
} else {
Log.i(TAG, "Unknown color format " + inputColorFormat + ", only RGB and BGR color format is " +
"supported!");
return false;
}
int[] channelStride = new int[]{width * height, width * height * 2};
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int color = inputImage.getPixel(x, y);
float[] rgb = new float[]{(float) red(color) / 255.0f, (float) green(color) / 255.0f,
(float) blue(color) / 255.0f};
inputData[y * width + x] = (rgb[channelIdx[0]] - inputMean[0]) / inputStd[0];
inputData[y * width + x + channelStride[0]] = (rgb[channelIdx[1]] - inputMean[1]) / inputStd[1];
inputData[y * width + x + channelStride[1]] = (rgb[channelIdx[2]] - inputMean[2]) / inputStd[2];
}
}
} else if (channels == 1) {
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int color = inputImage.getPixel(x, y);
float gray = (float) (red(color) + green(color) + blue(color)) / 3.0f / 255.0f;
inputData[y * width + x] = (gray - inputMean[0]) / inputStd[0];
}
}
} else {
Log.i(TAG, "Unsupported channel size " + Integer.toString(channels) + ", only channel 1 and 3 is " +
"supported!");
return false;
}
inputTensor.setData(inputData);
Date end = new Date();
preprocessTime = (float) (end.getTime() - start.getTime());
// Warm up
for (int i = 0; i < warmupIterNum; i++) {
paddlePredictor.run();
}
// Run inference
start = new Date();
for (int i = 0; i < inferIterNum; i++) {
paddlePredictor.run();
}
end = new Date();
inferenceTime = (end.getTime() - start.getTime()) / (float) inferIterNum;
// Fetch output tensor
Tensor outputTensor = getOutput(0);
// Post-process
start = new Date();
long outputShape[] = outputTensor.shape();
long outputSize = 1;
for (long s : outputShape) {
outputSize *= s;
}
int[] max_index = new int[3]; // Top3 indices
double[] max_num = new double[3]; // Top3 scores
for (int i = 0; i < outputSize; i++) {
float tmp = outputTensor.getFloatData()[i];
int tmp_index = i;
for (int j = 0; j < 3; j++) {
if (tmp > max_num[j]) {
tmp_index += max_index[j];
max_index[j] = tmp_index - max_index[j];
tmp_index -= max_index[j];
tmp += max_num[j];
max_num[j] = tmp - max_num[j];
tmp -= max_num[j];
}
}
}
end = new Date();
postprocessTime = (float) (end.getTime() - start.getTime());
if (wordLabels.size() > 0) {
top1Result = wordLabels.get(max_index[0]);
// top2Result = wordLabels.get(max_index[1]);
// top3Result = "Top3: " + wordLabels.get(max_index[2]);
percent1=String.format("%.2f", max_num[0]);
// percent2=String.format("%.2f", max_num[1]);
// percent3=String.format("%.3f", max_num[2]);
//String.format("%.3f", max_num[0]);
}
return true;
}
public boolean isLoaded() {
return paddlePredictor != null && isLoaded;
}
public String modelPath() {
return modelPath;
}
public String modelName() {
return modelName;
}
public int cpuThreadNum() {
return cpuThreadNum;
}
public String cpuPowerMode() {
return cpuPowerMode;
}
public float inferenceTime() {
return inferenceTime;
}
public Bitmap inputImage() {
return inputImage;
}
public String top1Result() {
return top1Result;
}
public String percent1() {
return percent1;
}
public String top2Result() {
return top2Result;
}
public float preprocessTime() {
return preprocessTime;
}
public float postprocessTime() {
return postprocessTime;
}
public void setInputImage(Bitmap image) {
if (image == null) {
return;
}
// Scale image to the size of input tensor
Bitmap rgbaImage = image.copy(Bitmap.Config.ARGB_8888, true);
Bitmap scaleImage = Bitmap.createScaledBitmap(rgbaImage, (int) inputShape[3], (int) inputShape[2], true);
this.inputImage = scaleImage;
}
}

@ -1,67 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.content.Context; // 导入Context类提供应用程序环境信息
import android.database.sqlite.SQLiteDatabase; // 导入SQLiteDatabase类用于操作SQLite数据库
import android.database.sqlite.SQLiteOpenHelper; // 导入SQLiteOpenHelper类用于帮助创建、管理和版本控制SQLite数据库
import android.util.Log; // 导入Log类用于打印日志信息
/**
*
*/
public class RALDbConnect extends SQLiteOpenHelper {
// 数据库名称
public static final String DATABASE_NAME = "UserInfo";
// 表名称
public static final String TABLE_NAME = "mytable";
// 数据库版本
public static final int DATABASE_VERSION = 1;
// 表中列的名称
public static final String UID = "_id"; // 主键,自动递增
public static final String USERNAME = "Username"; // 用户名
public static final String PASSWORD = "Password"; // 密码
public static final String EMAIL = "Email"; // 邮箱
public static final String PHONENUMBER = "Phonenumber"; // 电话号码
public static final String ADDRESS = "Address"; // 地址
// 创建表的SQL语句
private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ UID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ USERNAME + " VARCHAR(255), "
+ PASSWORD + " VARCHAR(255), "
+ EMAIL + " VARCHAR(255), "
+ PHONENUMBER + " VARCHAR(255), "
+ ADDRESS + " VARCHAR(255));";
// 删除表的SQL语句
private static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
// 上下文对象
private Context context;
// 构造函数接收Context对象
public RALDbConnect(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION); // 调用父类的构造函数
this.context = context;
}
// 当数据库第一次创建时调用
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE); // 执行SQL语句创建表
} catch (Exception ex) {
Log.e("myerror", ex.getMessage()); // 打印错误日志
}
}
// 当数据库版本升级时调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
Log.i("currentDb", "upgraded"); // 打印日志信息
db.execSQL(DROP_TABLE); // 删除旧表
onCreate(db); // 重新创建表
} catch (Exception ex) {
Log.e("error on Upgrade", ex.getMessage()); // 打印升级错误日志
}
}
}

@ -1,44 +0,0 @@
package com.example.administrator.baiduvoicetest;
import java.util.ArrayList; // 导入ArrayList类
import android.content.ContentValues; // 导入ContentValues类用于存储数据库的行值
import android.content.Context; // 导入Context类提供应用程序环境信息
import android.database.Cursor; // 导入Cursor类用于遍历数据库查询结果
import android.database.sqlite.SQLiteDatabase; // 导入SQLiteDatabase类用于操作SQLite数据库
public class RALDbQuery {
RALDbConnect mdc; // RALDbConnect类的实例用于数据库连接
public static ArrayList<String> dataList; // 用于存储从数据库获取的数据
public RALDbQuery(Context context){ // 构造函数接收Context对象作为参数
mdc = new RALDbConnect(context); // 初始化数据库连接
}
// 向数据库插入数据的方法
public long insertData(String name, String pass, String email, String phonenumber, String address) {
SQLiteDatabase sdb = mdc.getWritableDatabase(); // 获取可写的数据库实例
ContentValues cntvals = new ContentValues(); // 创建ContentValues实例用于存储列的值
cntvals.put(RALDbConnect.USERNAME, name); // 将用户名存入ContentValues
cntvals.put(RALDbConnect.PASSWORD, pass); // 将密码存入ContentValues
cntvals.put(RALDbConnect.EMAIL, email); // 将邮箱存入ContentValues
cntvals.put(RALDbConnect.PHONENUMBER, phonenumber); // 将电话号码存入ContentValues
cntvals.put(RALDbConnect.ADDRESS, address); // 将地址存入ContentValues
long id = sdb.insert(RALDbConnect.TABLE_NAME, null, cntvals); // 将数据插入数据库并返回新插入行的ID
return id; // 返回插入数据的ID
}
// 从数据库获取所有数据的方法
public ArrayList<String> getAllData() {
dataList = new ArrayList<String>(); // 初始化dataList
SQLiteDatabase sdb = mdc.getWritableDatabase(); // 获取可写的数据库实例
String[] columns = {mdc.UID, mdc.USERNAME, mdc.PASSWORD}; // 指定要查询的列
Cursor cursor = sdb.query(mdc.TABLE_NAME, columns, null, null, null, null, null); // 执行查询返回Cursor对象
while(cursor.moveToNext()) { // 遍历Cursor中的每一行
int cid = cursor.getInt(cursor.getColumnIndex(mdc.UID)); // 获取当前行的UID
String name = cursor.getString(cursor.getColumnIndex(mdc.USERNAME)); // 获取当前行的用户名
String password = cursor.getString(cursor.getColumnIndex(mdc.PASSWORD)); // 获取当前行的密码
dataList.add(cid + " " + name + " " + password); // 将UID、用户名和密码添加到dataList
}
return dataList; // 返回包含所有数据的ArrayList
}
}

@ -1,124 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
*
*/
public class RigisterActivity extends Activity {
// 用户名、密码、确认密码、电子邮件、电话号码、地址的输入框
EditText uname, upass,apass,uemail, uphonenumber, uaddress;
// 返回登录按钮和注册按钮
Button BackLogin, sign_in;
// 数据库查询对象,用于用户数据的插入操作
RALDbQuery mdq;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rigister);
// 初始化用户名、密码、确认密码、电子邮件、电话号码、地址的输入框
uname = (EditText)findViewById(R.id.editText1);
upass = (EditText) findViewById(R.id.editText2);
apass = (EditText) findViewById(R.id.editText3);
uemail=(EditText)findViewById(R.id.editText4);
uphonenumber=(EditText)findViewById(R.id.editText5);
uaddress=(EditText)findViewById(R.id.editText6);
// 初始化返回登录按钮和注册按钮
sign_in = (Button)findViewById(R.id.button1);
BackLogin = (Button) findViewById(R.id.button2);
// 创建数据库查询对象
mdq = new RALDbQuery(this);
// 设置注册按钮点击事件监听器
sign_in.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// 获取输入的用户名、密码、确认密码、电子邮件、电话号码、地址
String name = uname.getText().toString(); // read username entered by the user
String pass = upass.getText().toString(); // read password entered by the user
String a_pass = apass.getText().toString();
String email=uemail.getText().toString();
String phonenumber=uphonenumber.getText().toString();
String address=uaddress.getText().toString();
// 验证输入项是否为空
if( name.isEmpty())
{
uname.setError("Enter Uername");
}
else
if(pass.isEmpty())
{
upass.setError("Enter password");
}
else
if (a_pass.isEmpty()) {
apass.setError("Enter again password");
}
// else
// if (pass!=a_pass) {
// upass.setError("Enter different password");
// apass.setError("Enter different password");
// upass.setText("");
// apass.setText("");
// }
else
if (!pass.equals(a_pass)){
// 如果密码和确认密码不一致,清空输入并提示错误
upass.setError("Enter different password");
apass.setError("Enter different password");
upass.setText("");
apass.setText("");
uemail.setText("");
uphonenumber.setText("");
uaddress.setText("");
}
if (pass.equals(a_pass)) {
// 将用户数据插入数据库
long id = mdq.insertData(name,pass,email,phonenumber,address); // call to store name and pass given by the user
// 根据插入结果提示用户注册成功或失败,并清空输入框
if(id>=0)
{
Toast.makeText(getApplicationContext(), "注册成功", Toast.LENGTH_LONG).show();
uname.setText("");
upass.setText("");
apass.setText("");
uemail.setText("");
uphonenumber.setText("");
uaddress.setText("");
}
else
{
Toast.makeText(getApplicationContext(), "Data Inserted error", Toast.LENGTH_LONG).show();
uname.setText("");
upass.setText("");
apass.setText("");
uemail.setText("");
uphonenumber.setText("");
uaddress.setText("");
}
}
}
});
// 设置返回登录按钮点击事件监听器,点击后返回登录活动
BackLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i = new Intent(RigisterActivity.this, LoginActivity.class);
startActivity(i);
finish();
}
});
}
}

@ -1,202 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.support.v7.app.ActionBar;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class SettingsActivity extends AppCompatPreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
ListPreference lpChoosePreInstalledModel = null;
CheckBoxPreference cbEnableCustomSettings = null;
EditTextPreference etModelPath = null;
EditTextPreference etLabelPath = null;
EditTextPreference etImagePath = null;
ListPreference lpCPUThreadNum = null;
ListPreference lpCPUPowerMode = null;
ListPreference lpInputColorFormat = null;
EditTextPreference etInputShape = null;
EditTextPreference etInputMean = null;
EditTextPreference etInputStd = null;
List<String> preInstalledModelPaths = null;
List<String> preInstalledLabelPaths = null;
List<String> preInstalledImagePaths = null;
List<String> preInstalledCPUThreadNums = null;
List<String> preInstalledCPUPowerModes = null;
List<String> preInstalledInputShapes = null;
List<String> preInstalledInputColorFormats = null;
List<String> preInstalledInputMeans = null;
List<String> preInstalledInputStds = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar != null) {
supportActionBar.setDisplayHomeAsUpEnabled(true);
}
// Initialized pre-installed models
preInstalledModelPaths = new ArrayList<String>();
preInstalledLabelPaths = new ArrayList<String>();
preInstalledImagePaths = new ArrayList<String>();
preInstalledInputShapes = new ArrayList<String>();
preInstalledCPUThreadNums = new ArrayList<String>();
preInstalledCPUPowerModes = new ArrayList<String>();
preInstalledInputColorFormats = new ArrayList<String>();
preInstalledInputMeans = new ArrayList<String>();
preInstalledInputStds = new ArrayList<String>();
// Add mobilenet_v1_for_cpu
preInstalledModelPaths.add(getString(R.string.MODEL_PATH_DEFAULT));
preInstalledLabelPaths.add(getString(R.string.LABEL_PATH_DEFAULT));
preInstalledImagePaths.add(getString(R.string.IMAGE_PATH_DEFAULT));
preInstalledCPUThreadNums.add(getString(R.string.CPU_THREAD_NUM_DEFAULT));
preInstalledCPUPowerModes.add(getString(R.string.CPU_POWER_MODE_DEFAULT));
preInstalledInputColorFormats.add(getString(R.string.INPUT_COLOR_FORMAT_DEFAULT));
preInstalledInputShapes.add(getString(R.string.INPUT_SHAPE_DEFAULT));
preInstalledInputMeans.add(getString(R.string.INPUT_MEAN_DEFAULT));
preInstalledInputStds.add(getString(R.string.INPUT_STD_DEFAULT));
// Add mobilenet_v1_for_npu if Soc is kirin 810 or 990
if (Utils.isSupportedNPU()) {
preInstalledModelPaths.add("models/mobilenet_v1_for_npu");
preInstalledLabelPaths.add("labels/synset_words.txt");
preInstalledImagePaths.add("images/tabby_cat.jpg");
preInstalledCPUThreadNums.add("1"); // Useless for NPU
preInstalledCPUPowerModes.add("LITE_POWER_HIGH"); // Useless for NPU
preInstalledInputColorFormats.add("RGB");
preInstalledInputShapes.add("1,3,224,224");
preInstalledInputMeans.add("0.485,0.456,0.406");
preInstalledInputStds.add("0.229,0.224,0.225");
} else {
Toast.makeText(this, "NPU model is not supported by your device.", Toast.LENGTH_LONG).show();
}
// Setup UI components
lpChoosePreInstalledModel =
(ListPreference) findPreference(getString(R.string.CHOOSE_PRE_INSTALLED_MODEL_KEY));
String[] preInstalledModelNames = new String[preInstalledModelPaths.size()];
for (int i = 0; i < preInstalledModelPaths.size(); i++) {
preInstalledModelNames[i] =
preInstalledModelPaths.get(i).substring(preInstalledModelPaths.get(i).lastIndexOf("/") + 1);
}
lpChoosePreInstalledModel.setEntries(preInstalledModelNames);
lpChoosePreInstalledModel.setEntryValues(preInstalledModelPaths.toArray(new String[preInstalledModelPaths.size()]));
lpCPUThreadNum =
(ListPreference) findPreference(getString(R.string.CPU_THREAD_NUM_KEY));
lpCPUPowerMode =
(ListPreference) findPreference(getString(R.string.CPU_POWER_MODE_KEY));
cbEnableCustomSettings =
(CheckBoxPreference) findPreference(getString(R.string.ENABLE_CUSTOM_SETTINGS_KEY));
etModelPath = (EditTextPreference) findPreference(getString(R.string.MODEL_PATH_KEY));
etModelPath.setTitle("Model Path (SDCard: " + Utils.getSDCardDirectory() + ")");
etLabelPath = (EditTextPreference) findPreference(getString(R.string.LABEL_PATH_KEY));
etImagePath = (EditTextPreference) findPreference(getString(R.string.IMAGE_PATH_KEY));
lpInputColorFormat =
(ListPreference) findPreference(getString(R.string.INPUT_COLOR_FORMAT_KEY));
etInputShape = (EditTextPreference) findPreference(getString(R.string.INPUT_SHAPE_KEY));
etInputMean = (EditTextPreference) findPreference(getString(R.string.INPUT_MEAN_KEY));
etInputStd = (EditTextPreference) findPreference(getString(R.string.INPUT_STD_KEY));
}
private void reloadPreferenceAndUpdateUI() {
SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
boolean enableCustomSettings =
sharedPreferences.getBoolean(getString(R.string.ENABLE_CUSTOM_SETTINGS_KEY), false);
String modelPath = sharedPreferences.getString(getString(R.string.CHOOSE_PRE_INSTALLED_MODEL_KEY),
getString(R.string.MODEL_PATH_DEFAULT));
int modelIdx = lpChoosePreInstalledModel.findIndexOfValue(modelPath);
if (modelIdx >= 0 && modelIdx < preInstalledModelPaths.size()) {
if (!enableCustomSettings) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(getString(R.string.MODEL_PATH_KEY), preInstalledModelPaths.get(modelIdx));
editor.putString(getString(R.string.LABEL_PATH_KEY), preInstalledLabelPaths.get(modelIdx));
editor.putString(getString(R.string.IMAGE_PATH_KEY), preInstalledImagePaths.get(modelIdx));
editor.putString(getString(R.string.CPU_THREAD_NUM_KEY), preInstalledCPUThreadNums.get(modelIdx));
editor.putString(getString(R.string.CPU_POWER_MODE_KEY), preInstalledCPUPowerModes.get(modelIdx));
editor.putString(getString(R.string.INPUT_COLOR_FORMAT_KEY),
preInstalledInputColorFormats.get(modelIdx));
editor.putString(getString(R.string.INPUT_SHAPE_KEY), preInstalledInputShapes.get(modelIdx));
editor.putString(getString(R.string.INPUT_MEAN_KEY), preInstalledInputMeans.get(modelIdx));
editor.putString(getString(R.string.INPUT_STD_KEY), preInstalledInputStds.get(modelIdx));
editor.commit();
}
lpChoosePreInstalledModel.setSummary(modelPath);
}
cbEnableCustomSettings.setChecked(enableCustomSettings);
etModelPath.setEnabled(enableCustomSettings);
etLabelPath.setEnabled(enableCustomSettings);
etImagePath.setEnabled(enableCustomSettings);
lpCPUThreadNum.setEnabled(enableCustomSettings);
lpCPUPowerMode.setEnabled(enableCustomSettings);
lpInputColorFormat.setEnabled(enableCustomSettings);
etInputShape.setEnabled(enableCustomSettings);
etInputMean.setEnabled(enableCustomSettings);
etInputStd.setEnabled(enableCustomSettings);
modelPath = sharedPreferences.getString(getString(R.string.MODEL_PATH_KEY),
getString(R.string.MODEL_PATH_DEFAULT));
String labelPath = sharedPreferences.getString(getString(R.string.LABEL_PATH_KEY),
getString(R.string.LABEL_PATH_DEFAULT));
String imagePath = sharedPreferences.getString(getString(R.string.IMAGE_PATH_KEY),
getString(R.string.IMAGE_PATH_DEFAULT));
String cpuThreadNum = sharedPreferences.getString(getString(R.string.CPU_THREAD_NUM_KEY),
getString(R.string.CPU_THREAD_NUM_DEFAULT));
String cpuPowerMode = sharedPreferences.getString(getString(R.string.CPU_POWER_MODE_KEY),
getString(R.string.CPU_POWER_MODE_DEFAULT));
String inputColorFormat = sharedPreferences.getString(getString(R.string.INPUT_COLOR_FORMAT_KEY),
getString(R.string.INPUT_COLOR_FORMAT_DEFAULT));
String inputShape = sharedPreferences.getString(getString(R.string.INPUT_SHAPE_KEY),
getString(R.string.INPUT_SHAPE_DEFAULT));
String inputMean = sharedPreferences.getString(getString(R.string.INPUT_MEAN_KEY),
getString(R.string.INPUT_MEAN_DEFAULT));
String inputStd = sharedPreferences.getString(getString(R.string.INPUT_STD_KEY),
getString(R.string.INPUT_STD_DEFAULT));
etModelPath.setSummary(modelPath);
etModelPath.setText(modelPath);
etLabelPath.setSummary(labelPath);
etLabelPath.setText(labelPath);
etImagePath.setSummary(imagePath);
etImagePath.setText(imagePath);
lpCPUThreadNum.setValue(cpuThreadNum);
lpCPUThreadNum.setSummary(cpuThreadNum);
lpCPUPowerMode.setValue(cpuPowerMode);
lpCPUPowerMode.setSummary(cpuPowerMode);
lpInputColorFormat.setValue(inputColorFormat);
lpInputColorFormat.setSummary(inputColorFormat);
etInputShape.setSummary(inputShape);
etInputShape.setText(inputShape);
etInputMean.setSummary(inputMean);
etInputMean.setText(inputMean);
etInputStd.setSummary(inputStd);
etInputStd.setText(inputStd);
}
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
reloadPreferenceAndUpdateUI();
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(getString(R.string.CHOOSE_PRE_INSTALLED_MODEL_KEY))) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(getString(R.string.ENABLE_CUSTOM_SETTINGS_KEY), false);
editor.commit();
}
reloadPreferenceAndUpdateUI();
}
}

@ -1,65 +0,0 @@
package com.example.administrator.baiduvoicetest;
/**
*
*/
public class Uploadfile {
public int fid;
public String dateline;
public String userip;
public String uploadfile;
public int status;
public int getFid() {
return fid;
}
public void setFid(int fid) {
this.fid = fid;
}
public String getDateline() {
return dateline;
}
public void setDateline(String dateline) {
this.dateline = dateline;
}
public String getUserip() {
return userip;
}
public void setUserip(String userip) {
this.userip = userip;
}
public String getUploadfile() {
return uploadfile;
}
public void setUploadfile(String uploadfile) {
this.uploadfile = uploadfile;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
@Override
public String toString() {
return "Uploadfile{" +
"fid=" + fid +
", dateline='" + dateline + '\'' +
", userip='" + userip + '\'' +
", uploadfile='" + uploadfile + '\'' +
", status=" + status +
'}';
}
}

@ -1,87 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.content.Context;
import android.os.Environment;
import java.io.*;
public class Utils {
private static final String TAG = Utils.class.getSimpleName();
public static void copyFileFromAssets(Context appCtx, String srcPath, String dstPath) {
if (srcPath.isEmpty() || dstPath.isEmpty()) {
return;
}
InputStream is = null;
OutputStream os = null;
try {
is = new BufferedInputStream(appCtx.getAssets().open(srcPath));
os = new BufferedOutputStream(new FileOutputStream(new File(dstPath)));
byte[] buffer = new byte[1024];
int length = 0;
while ((length = is.read(buffer)) != -1) {
os.write(buffer, 0, length);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
os.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void copyDirectoryFromAssets(Context appCtx, String srcDir, String dstDir) {
if (srcDir.isEmpty() || dstDir.isEmpty()) {
return;
}
try {
if (!new File(dstDir).exists()) {
new File(dstDir).mkdirs();
}
for (String fileName : appCtx.getAssets().list(srcDir)) {
String srcSubPath = srcDir + File.separator + fileName;
String dstSubPath = dstDir + File.separator + fileName;
if (new File(srcSubPath).isDirectory()) {
copyDirectoryFromAssets(appCtx, srcSubPath, dstSubPath);
} else {
copyFileFromAssets(appCtx, srcSubPath, dstSubPath);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static float[] parseFloatsFromString(String string, String delimiter) {
String[] pieces = string.trim().toLowerCase().split(delimiter);
float[] floats = new float[pieces.length];
for (int i = 0; i < pieces.length; i++) {
floats[i] = Float.parseFloat(pieces[i].trim());
}
return floats;
}
public static long[] parseLongsFromString(String string, String delimiter) {
String[] pieces = string.trim().toLowerCase().split(delimiter);
long[] longs = new long[pieces.length];
for (int i = 0; i < pieces.length; i++) {
longs[i] = Long.parseLong(pieces[i].trim());
}
return longs;
}
public static String getSDCardDirectory() {
return Environment.getExternalStorageDirectory().getAbsolutePath();
}
public static boolean isSupportedNPU() {
String hardware = android.os.Build.HARDWARE;
return hardware.equalsIgnoreCase("kirin810") || hardware.equalsIgnoreCase("kirin990");
}
}

@ -1,96 +0,0 @@
package com.example.administrator.baiduvoicetest.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
/**
* Created by Administrator on 2018/5/17.
* <p>
* ViewPagerAdapterViewPager
* ID
*/
public class CvPagerAdapter extends PagerAdapter {
// 存储视图资源ID的列表
private List<Integer> views;
// 存储页面标题的列表
private List<String> titles;
// 上下文对象,用于加载视图
private Context context;
/**
* CvPagerAdapter
*
* @param context
* @param views ID
* @param titles
*/
public CvPagerAdapter(Context context, List<Integer> views, List<String> titles){
this.views = views;
this.titles = titles;
this.context = context;
}
/**
*
*
* @return
*/
@Override
public int getCount() {
return views.size();
}
/**
*
*
* @param container ViewPager
* @param position
* @return
*/
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View view = View.inflate(context,views.get(position),null);
container.addView(view);
return view;
}
/**
*
*
* @param view
* @param object
* @return truefalse
*/
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
/**
* ViewPager
*
* @param container ViewPager
* @param position
* @param object
*/
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
/**
*
*
* @param position
* @return
*/
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
}

@ -1,48 +0,0 @@
package com.example.administrator.baiduvoicetest.adapter;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.List;
/**
* FragmentAdapterFragmentViewPager
* FragmentPagerAdapterFragmentFragment
*/
public class FragmentAdapter extends FragmentPagerAdapter {
// 保存Fragment的列表
private List<Fragment> fragments;
/**
* FragmentAdapter
*
* @param fm FragmentManagerFragment
* @param fragments FragmentViewPagerFragment
*/
public FragmentAdapter(@NonNull FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
/**
* Fragment
*
* @param position ViewPager
* @return Fragment
*/
@NonNull
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
/**
* Fragment
*
* @return Fragment
*/
@Override
public int getCount() {
return fragments.size();
}
}

@ -1,64 +0,0 @@
package com.example.administrator.baiduvoicetest.fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.administrator.baiduvoicetest.R;
import com.example.administrator.baiduvoicetest.adapter.CvPagerAdapter;
import java.util.ArrayList;
import java.util.List;
/**
* Fragment
*/
public class CategoryFragment extends Fragment {
// 存储每个标签页的标题
private List<String> titles = new ArrayList<>();
// 存储每个标签页对应的布局资源ID
private List<Integer> views = new ArrayList<>();
/**
* Fragment
*
* @param inflater inflateLayoutInflater
* @param container FragmentViewGroup
* @param savedInstanceState nullFragment
* @return Fragment
*/
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_category,container,false);
// 初始化ViewPager和TabLayout
ViewPager viewPager = view.findViewById(R.id.viewpager);
TabLayout tabLayout = view.findViewById(R.id.tablayout);
// 添加标签页的标题和对应的布局资源
titles.add("可回收物");
titles.add("湿垃圾");
titles.add("干垃圾");
titles.add("有害垃圾");
views.add(R.layout.layout_recycler);
views.add(R.layout.layout_wish);
views.add(R.layout.layout_dry);
views.add(R.layout.layout_less);
// 创建并设置PagerAdapter
CvPagerAdapter pagerAdapter = new CvPagerAdapter(getContext(),views,titles);
viewPager.setAdapter(pagerAdapter);
// 默认选中第一个标签页
viewPager.setCurrentItem(0);
// 将TabLayout与ViewPager绑定
tabLayout.setupWithViewPager(viewPager);
return view;
}
}

@ -1,879 +0,0 @@
package com.example.administrator.baiduvoicetest.fragment;
import android.Manifest;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.speech.tts.TextToSpeech;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.text.method.ScrollingMovementMethod;
import android.util.AndroidRuntimeException;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.speech.EventListener;
import com.baidu.speech.EventManager;
import com.baidu.speech.EventManagerFactory;
import com.baidu.tts.auth.AuthInfo;
import com.baidu.tts.client.SpeechError;
import com.baidu.tts.client.SpeechSynthesizer;
import com.baidu.tts.client.SpeechSynthesizerListener;
import com.baidu.tts.client.TtsMode;
import com.example.administrator.baiduvoicetest.DigitalConversion;
import com.example.administrator.baiduvoicetest.IndexActivity;
import com.example.administrator.baiduvoicetest.Predictor;
import com.example.administrator.baiduvoicetest.R;
import com.example.administrator.baiduvoicetest.SettingsActivity;
import com.example.administrator.baiduvoicetest.Utils;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
/**
*
*
*/
public class HomeFragment extends Fragment implements TextToSpeech.OnInitListener {
private SpeechSynthesizer mSpeechSynthesizer;
private String mSampleDirPath;
private static final String SAMPLE_DIR_NAME = "baiduTTS";
private static final String SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female.dat";
private static final String SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male.dat";
private static final String TEXT_MODEL_NAME = "bd_etts_text.dat";
private static final String LICENSE_FILE_NAME = "temp_license";
private static final String ENGLISH_SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female_en.dat";
private static final String ENGLISH_SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male_en.dat";
private static final String ENGLISH_TEXT_MODEL_NAME = "bd_etts_text_en.dat";
private EventManager mWpEventManager;
public static Bitmap pic;
private boolean first = true;
private static final String TAG = IndexActivity.class.getSimpleName();
public static final int OPEN_GALLERY_REQUEST_CODE = 0;
public static final int TAKE_PHOTO_REQUEST_CODE = 1;
public static final int REQUEST_LOAD_MODEL = 0;
public static final int REQUEST_RUN_MODEL = 1;
public static final int RESPONSE_LOAD_MODEL_SUCCESSED = 0;
public static final int RESPONSE_LOAD_MODEL_FAILED = 1;
public static final int RESPONSE_RUN_MODEL_SUCCESSED = 2;
public static final int RESPONSE_RUN_MODEL_FAILED = 3;
protected ProgressDialog pbLoadModel = null;
protected ProgressDialog pbRunModel = null;
protected Handler receiver = null; // Receive messages from worker thread
protected Handler sender = null; // Send command to worker thread
protected HandlerThread worker = null; // Worker thread to load&run model
// UI components of image classification
protected TextView tvInputSetting;
protected ImageView ivInputImage;
protected Button open_gallery, take_photo,shanchuan;
protected TextView tvTop1Result;
protected TextView percent1;
protected TextView tvInferenceTime;
protected TextView result;
protected TextToSpeech tts;
protected String modelPath = "";
protected String labelPath = "";
protected String imagePath = "";
protected int cpuThreadNum = 1;
protected String cpuPowerMode = "";
protected String inputColorFormat = "";
protected long[] inputShape = new long[]{};
protected float[] inputMean = new float[]{};
protected float[] inputStd = new float[]{};
protected Predictor predictor = new Predictor();
public Predictor getPredictor(){
return predictor;
}
/**
* LayoutInflaterTextToSpeechUI
*
*
* @param inflater .inflate
* @param container
* @param savedInstanceState null
* @return inflate
*/
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main1,container,false);
tts = new TextToSpeech(getActivity(), this);
init(view);
return view;
}
/**
* SharedPreferences
* UI
*
* @param view
*/
private void init(View view) {
// 清除SharedPreferences中的所有数据
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.commit();
// 初始化用于处理模型加载和运行结果的消息接收器
receiver = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case RESPONSE_LOAD_MODEL_SUCCESSED:
pbLoadModel.dismiss();
onLoadModelSuccessed();
break;
case RESPONSE_LOAD_MODEL_FAILED:
pbLoadModel.dismiss();
Toast.makeText(getActivity(), "Load model failed!", Toast.LENGTH_SHORT).show();
onLoadModelFailed();
break;
case RESPONSE_RUN_MODEL_SUCCESSED:
pbRunModel.dismiss();
onRunModelSuccessed();
break;
case RESPONSE_RUN_MODEL_FAILED:
pbRunModel.dismiss();
Toast.makeText(getActivity(), "Run model failed!", Toast.LENGTH_SHORT).show();
onRunModelFailed();
break;
default:
break;
}
}
};
// 初始化工作线程和发送者,用于在后台执行模型加载和运行操作
worker = new HandlerThread("Predictor Worker");
worker.start();
sender = new Handler(worker.getLooper()) {
public void handleMessage(Message msg) {
switch (msg.what) {
case REQUEST_LOAD_MODEL:
// 根据需求加载模型
// Load model and reload test image
if (onLoadModel()) {
receiver.sendEmptyMessage(RESPONSE_LOAD_MODEL_SUCCESSED);
} else {
receiver.sendEmptyMessage(RESPONSE_LOAD_MODEL_FAILED);
}
break;
case REQUEST_RUN_MODEL:
// 根据需求运行模型
// Run model if model is loaded
if (onRunModel()) {
receiver.sendEmptyMessage(RESPONSE_RUN_MODEL_SUCCESSED);
} else {
receiver.sendEmptyMessage(RESPONSE_RUN_MODEL_FAILED);
}
break;
default:
break;
}
}
};
// 初始化UI组件并设置滚动和点击事件
// Setup the UI components
tvInputSetting = view.findViewById(R.id.tv_input_setting);
ivInputImage = view.findViewById(R.id.iv_input_image);
tvTop1Result = view.findViewById(R.id.tv_top1);
shanchuan=view.findViewById(R.id.t3);
percent1=view.findViewById(R.id.percent1);
//tvTop2Result = view.findViewById(R.id.tv_top2_result);
// tvTop3Result = view.findViewById(R.id.tv_top3_result);
tvInferenceTime = view.findViewById(R.id.tv_time);
open_gallery = view.findViewById(R.id.t1);
take_photo = view.findViewById(R.id.t2);
tvInputSetting.setMovementMethod(ScrollingMovementMethod.getInstance());
open_gallery.setOnClickListener(new View.OnClickListener() {
@Override
//在当前onClick方法中监听点击Button的动作
public void onClick(View v) {
//在当前onClick方法中监听点击Button的动作
if (requestAllPermissions()) {
takePhoto();
}
}
});
take_photo.setOnClickListener(new View.OnClickListener() {
@Override
//在当前onClick方法中监听点击Button的动作
public void onClick(View v) {
//在当前onClick方法中监听点击Button的动作
if (requestAllPermissions()) {
openGallery();
}
}
});
take_photo.setOnClickListener(new View.OnClickListener() {
@Override
//在当前onClick方法中监听点击Button的动作
public void onClick(View v) {
//在当前onClick方法中监听点击Button的动作
if (requestAllPermissions()) {
openGallery();
}
}
});
shanchuan.setOnClickListener(new View.OnClickListener() {
@Override
//在当前onClick方法中监听点击Button的动作
public void onClick(View v) {
//在当前onClick方法中监听点击Button的动作
if (requestAllPermissions()) {
ShanChuan c=new ShanChuan(getActivity());
try {
c.sendFile(pic,predictor.top1Result());
} catch (IOException e) {
e.printStackTrace();
}
// Toast.makeText(getActivity(), "图片上传成功", Toast.LENGTH_LONG).show();
}
}
});
}
/**
*
* @param status
*/
@Override
public void onInit(int status) {
// 判断是否转化成功
if (status == TextToSpeech.SUCCESS) {
//默认设定语言为中文原生的android貌似不支持中文。
int result = tts.setLanguage(Locale.CHINESE);
// 检查语言设置是否成功
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
// 如果中文语言数据缺失或不支持,则回退到英文
} else {
//不支持中文就将语言设置为英文
tts.setLanguage(Locale.US);
}
}
}
/**
*
*/
@Override
public void onResume() {
super.onResume();
// 第一次启动时初始化环境和语音合成
if (first) {
initialEnv();
initialTts();
first = false;
}
// 从共享偏好中加载设置
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
boolean settingsChanged = false;
// 检查并更新模型路径、标签路径、图像路径、CPU线程数、CPU电源模式、输入颜色格式、输入形状、输入均值和标准差是否改变
String model_path = sharedPreferences.getString(getString(R.string.MODEL_PATH_KEY),
getString(R.string.MODEL_PATH_DEFAULT));
String label_path = sharedPreferences.getString(getString(R.string.LABEL_PATH_KEY),
getString(R.string.LABEL_PATH_DEFAULT));
String image_path = sharedPreferences.getString(getString(R.string.IMAGE_PATH_KEY),
getString(R.string.IMAGE_PATH_DEFAULT));
settingsChanged |= !model_path.equalsIgnoreCase(modelPath);
settingsChanged |= !label_path.equalsIgnoreCase(labelPath);
settingsChanged |= !image_path.equalsIgnoreCase(imagePath);
int cpu_thread_num = Integer.parseInt(sharedPreferences.getString(getString(R.string.CPU_THREAD_NUM_KEY),
getString(R.string.CPU_THREAD_NUM_DEFAULT)));
settingsChanged |= cpu_thread_num != cpuThreadNum;
String cpu_power_mode =
sharedPreferences.getString(getString(R.string.CPU_POWER_MODE_KEY),
getString(R.string.CPU_POWER_MODE_DEFAULT));
settingsChanged |= !cpu_power_mode.equalsIgnoreCase(cpuPowerMode);
String input_color_format =
sharedPreferences.getString(getString(R.string.INPUT_COLOR_FORMAT_KEY),
getString(R.string.INPUT_COLOR_FORMAT_DEFAULT));
settingsChanged |= !input_color_format.equalsIgnoreCase(inputColorFormat);
long[] input_shape =
Utils.parseLongsFromString(sharedPreferences.getString(getString(R.string.INPUT_SHAPE_KEY),
getString(R.string.INPUT_SHAPE_DEFAULT)), ",");
float[] input_mean =
Utils.parseFloatsFromString(sharedPreferences.getString(getString(R.string.INPUT_MEAN_KEY),
getString(R.string.INPUT_MEAN_DEFAULT)), ",");
float[] input_std =
Utils.parseFloatsFromString(sharedPreferences.getString(getString(R.string.INPUT_STD_KEY)
, getString(R.string.INPUT_STD_DEFAULT)), ",");
settingsChanged |= input_shape.length != inputShape.length;
settingsChanged |= input_mean.length != inputMean.length;
settingsChanged |= input_std.length != inputStd.length;
// 如果设置有变化,则更新模型配置并加载模型
if (!settingsChanged) {
for (int i = 0; i < input_shape.length; i++) {
settingsChanged |= input_shape[i] != inputShape[i];
}
for (int i = 0; i < input_mean.length; i++) {
settingsChanged |= input_mean[i] != inputMean[i];
}
for (int i = 0; i < input_std.length; i++) {
settingsChanged |= input_std[i] != inputStd[i];
}
}
if (settingsChanged) {
modelPath = model_path;
labelPath = label_path;
imagePath = image_path;
cpuThreadNum = cpu_thread_num;
cpuPowerMode = cpu_power_mode;
inputColorFormat = input_color_format;
inputShape = input_shape;
inputMean = input_mean;
inputStd = input_std;
// Update UI
// tvInputSetting.setText("Model: " + modelPath.substring(modelPath.lastIndexOf("/") + 1) + "\n" + "CPU" +
// " Thread Num: " + Integer.toString(cpuThreadNum) + "\n" + "CPU Power Mode: " + cpuPowerMode + "\n");
// tvInputSetting.scrollTo(0, 0);
// Reload model if configure has been changed
//tvInputSetting.setText("");
loadModel();
}
}
/**
*
*/
public void loadModel() {
pbLoadModel = ProgressDialog.show(getActivity(), "", "Loading model...", false, false);
sender.sendEmptyMessage(REQUEST_LOAD_MODEL);
}
/**
*
*/
public void runModel() {
pbRunModel = ProgressDialog.show(getActivity(), "", "Running model...", false, false);
sender.sendEmptyMessage(REQUEST_RUN_MODEL);
}
/**
*
* @return truefalse
*/
public boolean onLoadModel() {
return predictor.init(getActivity(), modelPath, labelPath, cpuThreadNum,
cpuPowerMode,
inputColorFormat,
inputShape, inputMean,
inputStd);
}
/**
*
* true
*/
public boolean onRunModel() {
return predictor.isLoaded() && predictor.runModel();
}
/**
*
*
*/
public void onLoadModelSuccessed() {
// 若图片路径首字符为'/'则从自定义路径读取测试图片文件否则从assets中读取
try {
if (imagePath.isEmpty()) {
return;
}
Bitmap image = null;
// Read test image file from custom path if the first character of mode path is '/', otherwise read test
// image file from assets
if (!imagePath.substring(0, 1).equals("/")) {
InputStream imageStream = getActivity().getAssets().open(imagePath);
image = BitmapFactory.decodeStream(imageStream);
} else {
if (!new File(imagePath).exists()) {
return;
}
image = BitmapFactory.decodeFile(imagePath);
}
if (image != null && predictor.isLoaded()) {
predictor.setInputImage(image);
runModel();
}
} catch (IOException e) {
// 图片加载失败提示(当前注释掉了
e.printStackTrace();
}
}
/**
*
*
*/
public void onLoadModelFailed() {
}
/**
*
*
*/
public void onRunModelSuccessed() {
// 获取结果并更新UI
tvInferenceTime.setText( predictor.inferenceTime() + " ms");
Bitmap inputImage = predictor.inputImage();
pic=inputImage;
if (inputImage != null) {
ivInputImage.setImageBitmap(inputImage);
}
DigitalConversion dig=new DigitalConversion();
double num=Double.parseDouble(predictor.percent1())*100;
tvTop1Result.setText(predictor.top1Result());
// tvTop2Result.setText(predictor.top1Result());
int i=(int)num;
percent1.setText(Integer.toString(i)+"%");
String temp=dig.numberToChinese(i);
String res = "该物品有百分之"+temp+"的可能性是"+tvTop1Result.getText().toString()+"请妥善处理";
tts.speak(res, TextToSpeech.QUEUE_FLUSH, null);
}
/**
*
*
*/
public void onRunModelFailed() {
}
/**
*
* 使
* @param image
*/
public void onImageChanged(Bitmap image) {
// 用户从图库或相机选择测试图片后,重新运行模型
if (image != null && predictor.isLoaded()) {
predictor.setInputImage(image);
runModel();
}
}
/**
*
* SettingsActivity
*/
public void onSettingsClicked() {
startActivity(new Intent(getActivity(), SettingsActivity.class));
}
/**
*
* @param item
* @return truefalse
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
/*switch (item.getItemId()) {
case android.R.id.home:
getActivity(). finish();
break;
case R.id.open_gallery:
if (requestAllPermissions()) {
openGallery();
}
break;
case R.id.take_photo:
if (requestAllPermissions()) {
takePhoto();
}
break;
case R.id.settings:
if (requestAllPermissions()) {
// Make sure we have SDCard r&w permissions to load model from SDCard
onSettingsClicked();
}
break;
}*/
return super.onOptionsItemSelected(item);
}
/**
*
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
/* 检查是否所有权限都已授予,如果有任何权限被拒绝则显示提示 */
if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity(), "Permission Denied", Toast.LENGTH_SHORT).show();
}
}
/**
*
* @return truefalse
*/
private boolean requestAllPermissions() {
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA},
0);
return false;
}
return true;
}
/**
*
*/
private void openGallery() {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, OPEN_GALLERY_REQUEST_CODE);
}
/**
*
*
*/
private void takePhoto() {
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePhotoIntent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivityForResult(takePhotoIntent, TAKE_PHOTO_REQUEST_CODE);
}
}
/**
*
* fragmentonStart
*
*/
@Override
public void onStart() {
super.onStart();
// 初始化唤醒事件管理器
// 唤醒功能打开步骤
// 1) 创建唤醒事件管理器
mWpEventManager = EventManagerFactory.create(getActivity(), "wp");
// 注册唤醒事件监听器,用于处理唤醒后的动作
// 2) 注册唤醒事件监听器
mWpEventManager.registerListener(new EventListener() {
@Override
public void onEvent(String name, String params, byte[] data, int offset, int length) {
// 处理唤醒事件,根据事件名称和参数执行相应的操作
Log.d(TAG, String.format("event: name=%s, params=%s", name, params));
try {
JSONObject json = new JSONObject(params);
if ("wp.data".equals(name)) { // 每次唤醒成功, 将会回调name=wp.data的时间, 被激活的唤醒词在params的word字段
String word = json.getString("word");
Toast.makeText(getActivity(), "唤醒成功,请说出指令", Toast.LENGTH_LONG).show();
speak("唤醒成功,请说出指令");
// 延时3秒防止语音合成的内容被再次识别
//延时3秒防止语音合成的内容又被语音识别
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 启动语音识别
Intent intent = new Intent("com.baidu.action.RECOGNIZE_SPEECH");
intent.putExtra("grammar", "asset:///baidu_speech_grammardemo.bsg"); // 设置离线的授权文件(离线模块需要授权), 该语法可以用自定义语义工具生成, 链接http://yuyin.baidu.com/asr#m5
//intent.putExtra("slot-data", your slots); // 设置grammar中需要覆盖的词条,如联系人名
startActivityForResult(intent, 2);
} else if ("wp.exit".equals(name)) {
// 处理退出唤醒状态的事件
}
} catch (JSONException e) {
throw new AndroidRuntimeException(e);
}
}
});
// 启动唤醒功能
// 3) 通知唤醒管理器, 启动唤醒功能
HashMap params = new HashMap();
params.put("kws-file", "assets:///WakeUpDemo.bin"); // 设置唤醒资源, 唤醒资源请到 http://yuyin.baidu.com/wake#m4 来评估和导出
mWpEventManager.send("wp.start", new JSONObject(params).toString(), null, 0, 0);
}
/**
*
* assetsSD
*
*/
private void initialEnv() {
// 初始化资源文件目录
if (mSampleDirPath == null) {
String sdcardPath = Environment.getExternalStorageDirectory().toString();
mSampleDirPath = sdcardPath + "/" + SAMPLE_DIR_NAME;
}
// 创建目录
makeDir(mSampleDirPath);
// 复制资源文件到SD卡
copyFromAssetsToSdcard(false, SPEECH_FEMALE_MODEL_NAME, mSampleDirPath + "/" + SPEECH_FEMALE_MODEL_NAME);
copyFromAssetsToSdcard(false, SPEECH_MALE_MODEL_NAME, mSampleDirPath + "/" + SPEECH_MALE_MODEL_NAME);
copyFromAssetsToSdcard(false, TEXT_MODEL_NAME, mSampleDirPath + "/" + TEXT_MODEL_NAME);
copyFromAssetsToSdcard(false, LICENSE_FILE_NAME, mSampleDirPath + "/" + LICENSE_FILE_NAME);
copyFromAssetsToSdcard(false, "english/" + ENGLISH_SPEECH_FEMALE_MODEL_NAME, mSampleDirPath + "/"
+ ENGLISH_SPEECH_FEMALE_MODEL_NAME);
copyFromAssetsToSdcard(false, "english/" + ENGLISH_SPEECH_MALE_MODEL_NAME, mSampleDirPath + "/"
+ ENGLISH_SPEECH_MALE_MODEL_NAME);
copyFromAssetsToSdcard(false, "english/" + ENGLISH_TEXT_MODEL_NAME, mSampleDirPath + "/"
+ ENGLISH_TEXT_MODEL_NAME);
}
/**
*
*
*
* @param dirPath
*/
private void makeDir(String dirPath) {
File file = new File(dirPath);
if (!file.exists()) {
file.mkdirs();
}
}
/**
* sampleSD使
*
* @param isCover
* @param source
* @param dest
*/
private void copyFromAssetsToSdcard(boolean isCover, String source, String dest) {
File file = new File(dest);
if (isCover || (!isCover && !file.exists())) {
InputStream is = null;
FileOutputStream fos = null;
try {
is = getResources().getAssets().open(source);
String path = dest;
fos = new FileOutputStream(path);
byte[] buffer = new byte[1024];
int size = 0;
while ((size = is.read(buffer, 0, 1024)) >= 0) {
fos.write(buffer, 0, size);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void initialTts() {
this.mSpeechSynthesizer = SpeechSynthesizer.getInstance();
this.mSpeechSynthesizer.setContext(getActivity());
this.mSpeechSynthesizer.setSpeechSynthesizerListener(new SpeechSynthesizerListener() {
@Override
public void onSynthesizeStart(String s) {
}
@Override
public void onSynthesizeDataArrived(String s, byte[] bytes, int i) {
}
@Override
public void onSynthesizeFinish(String s) {
}
@Override
public void onSpeechStart(String s) {
}
@Override
public void onSpeechProgressChanged(String s, int i) {
}
@Override
public void onSpeechFinish(String s) {
}
@Override
public void onError(String s, SpeechError speechError) {
}
});
// 文本模型文件路径 (离线引擎使用)
this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_TEXT_MODEL_FILE, mSampleDirPath + "/"
+ TEXT_MODEL_NAME);
// 声学模型文件路径 (离线引擎使用)
this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_SPEECH_MODEL_FILE, mSampleDirPath + "/"
+ SPEECH_FEMALE_MODEL_NAME);
// 本地授权文件路径,如未设置将使用默认路径.设置临时授权文件路径LICENCE_FILE_NAME请替换成临时授权文件的实际路径仅在使用临时license文件时需要进行设置如果在[应用管理]中开通了正式离线授权,不需要设置该参数,建议将该行代码删除(离线引擎)
// 如果合成结果出现临时授权文件将要到期的提示,说明使用了临时授权文件,请删除临时授权即可。
this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_LICENCE_FILE, mSampleDirPath + "/"
+ LICENSE_FILE_NAME);
// 请替换为语音开发者平台上注册应用得到的App ID (离线授权)
this.mSpeechSynthesizer.setAppId("8888274"/*这里只是为了让Demo运行使用的APPID,请替换成自己的id。*/);
// 请替换为语音开发者平台注册应用得到的apikey和secretkey (在线授权)
this.mSpeechSynthesizer.setApiKey("FOFOGnjFERG3UTZC4FdDnXhM",
"63830985f5b05d2863f13ad07c7feaa3"/*这里只是为了让Demo正常运行使用APIKey,请替换成自己的APIKey*/);
// 发音人在线引擎可用参数为0,1,2,3。。。服务器端会动态增加各值含义参考文档以文档说明为准。0--普通女声1--普通男声2--特别男声3--情感男声。。。)
this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0");
// 设置Mix模式的合成策略
this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE, SpeechSynthesizer.MIX_MODE_DEFAULT);
// 授权检测接口(只是通过AuthInfo进行检验授权是否成功。)
// AuthInfo接口用于测试开发者是否成功申请了在线或者离线授权如果测试授权成功了可以删除AuthInfo部分的代码该接口首次验证时比较耗时不会影响正常使用合成使用时SDK内部会自动验证授权
AuthInfo authInfo = this.mSpeechSynthesizer.auth(TtsMode.MIX);
if (authInfo.isSuccess()) {
Toast.makeText(getActivity(), "百度语音认证成功", Toast.LENGTH_LONG).show();
} else {
String errorMsg = authInfo.getTtsError().getDetailMessage();
Toast.makeText(getActivity(), "百度语音认证失败 errorMsg=" + errorMsg, Toast.LENGTH_LONG).show();
}
// 初始化tts
mSpeechSynthesizer.initTts(TtsMode.MIX);
// 加载离线英文资源(提供离线英文合成功能)
// int result =
// mSpeechSynthesizer.loadEnglishModel(mSampleDirPath + "/" + ENGLISH_TEXT_MODEL_NAME, mSampleDirPath
// + "/" + ENGLISH_SPEECH_FEMALE_MODEL_NAME);
//Toast.makeText(this,"loadEnglishModel result=" + result,Toast.LENGTH_LONG).show();
//打印引擎信息和model基本信息
//printEngineInfo();
}
@Override
public void onStop() {
super.onStop();
// 停止唤醒监听
mWpEventManager.send("wp.stop", null, null, 0, 0);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && data != null) {
switch (requestCode) {
case OPEN_GALLERY_REQUEST_CODE:
try {
ContentResolver resolver = getActivity().getContentResolver();
Uri uri = data.getData();
Bitmap image = MediaStore.Images.Media.getBitmap(resolver, uri);
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().managedQuery(uri, proj, null, null, null);
cursor.moveToFirst();
onImageChanged(image);
} catch (IOException e) {
Log.e(TAG, e.toString());
}
break;
case TAKE_PHOTO_REQUEST_CODE:
Bundle extras = data.getExtras();
Bitmap image = (Bitmap) extras.get("data");
onImageChanged(image);
break;
case 2:
Bundle results = data.getExtras();
ArrayList<String> results_recognition = results.getStringArrayList("results_recognition");
//txtResult.append("识别结果(数组形式): " + results_recognition + "\n");
//将数组形式的识别结果变为正常的String类型[给张三打电话]变成给张三打电话
String str = results_recognition + "";
String res = str.substring(str.indexOf("[") + 1, str.indexOf("]"));
// txtResult.append(res+"\n");
if (res.contains("相册") || res.contains("相片") || res.contains("图库") || res.contains("图片")) {
openGallery();
}
if (res.contains("相机")) {
takePhoto();
}
//下面可以对识别结果进行判断,语音合成不同的话,然后再完成具体的逻辑,例如下面可以实现打电话的逻辑。我这里就不具体实现了
// speak("好的,马上" + res);
// Toast.makeText(MainActivity1.this, "好的,马上" + res, Toast.LENGTH_LONG).show();
//mWpEventManager.send("wp.stop", null, null, 0, 0);
break;
default:
break;
}
}
}
private void speak(String text) {
// String text = this.mInput.getText().toString();
//需要合成的文本text的长度不能超过1024个GBK字节。
// if (TextUtils.isEmpty(mInput.getText())) {
// text = "欢迎使用百度语音合成SDK,百度语音为你提供支持。";
// mInput.setText(text);
// }
int result = this.mSpeechSynthesizer.speak(text);
if (result < 0) {
Toast.makeText(getActivity(), "error,please look up error code in doc or URL:http://yuyin.baidu.com/docs/tts/122 ", Toast.LENGTH_LONG).show();
}
}
@Override
public void onDestroy() {
if (predictor != null) {
predictor.releaseModel();
}
worker.quit();
super.onDestroy();
}
}

@ -1,128 +0,0 @@
package com.example.administrator.baiduvoicetest.fragment;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.example.administrator.baiduvoicetest.R;
public class SettingFragment extends Fragment {
public WebView webView;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_setting,container,false);
webView = view.findViewById(R.id.web);
setWebView();
webView.loadUrl("https://mtrash.xcditu.com/");
return view;
}
private void setWebView(){
//声明WebSettings子类
WebSettings webSettings = webView.getSettings();
//如果访问的页面中要与Javascript交互则webview必须设置支持Javascript
webSettings.setJavaScriptEnabled(true);
// 若加载的 html 里有JS 在执行动画等操作会造成资源浪费CPU、电量
// 在 onStop 和 onResume 里分别把 setJavaScriptEnabled() 给设置成 false 和 true 即可
//支持插件
webSettings.setPluginState(WebSettings.PluginState.ON);
//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//缩放操作
webSettings.setSupportZoom(true); //支持缩放默认为true。是下面那个的前提。
webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false则该WebView不可缩放
webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
//其他细节操作
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
webSettings.setAllowFileAccess(true); //设置可以访问文件
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
webSettings.setDomStorageEnabled(true); // 开启 DOM storage API 功能
webSettings.setDatabaseEnabled(true); //开启 database storage API 功能
webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能
// 启用JavaScript
webSettings.setJavaScriptEnabled(true);
// 启用DOM存储
webSettings.setDomStorageEnabled(true);
// 启用数据库访问
webSettings.setDatabaseEnabled(true);
// 启用地理定位
webSettings.setGeolocationEnabled(true);
// 启用自动加载图片
webSettings.setLoadsImagesAutomatically(true);
// 启用缩放功能
webSettings.setSupportZoom(true);
// 设置布局算法为标准布局
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
// 设置自动调整屏幕大小适应内容
webSettings.setUseWideViewPort(true);
// 设置是否支持多窗口(弹出窗口)
webSettings.setSupportMultipleWindows(true);
// 设置是否允许JavaScript打开新窗口
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
// 启用媒体播放自动播放
webSettings.setMediaPlaybackRequiresUserGesture(false);
// 启用本地存储
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
// 启用插件
webSettings.setPluginState(WebSettings.PluginState.ON);
// 启用混合内容模式加载HTTP内容到HTTPS页面
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);// 设置允许JS弹窗
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
//false :webview 自加载
return false;
}
});
}
}

@ -1,190 +0,0 @@
package com.example.administrator.baiduvoicetest.fragment;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.alibaba.fastjson.JSON;
import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
public class ShanChuan {
// 测试路径(默认值)
static String testPath = "/sdcard/Pictures/t.jpg";//"/storage/sdcard/Download/t.jpg";
//Environment.getExternalStorageDirectory().getAbsolutePath()
//+ "/test.jpg";///storage/sdcard/Download/android-env.jpg
// Button btn_send;// "上传"按钮
// ImageView iv; // 图片框
static String baseUrl = "http://192.168.56.1/demo/";
static String infoUrl = baseUrl + "uploadfile_get.php";
static String upUrl = baseUrl + "uploadfile.php";
private final Activity activity;
public ShanChuan(Activity activity) {
this.activity = activity;
}
// 发送文件
public void sendFile(Bitmap pic, String name) throws IOException {
// 接口地址
String url = upUrl;
// String filepath = testPath;
File file = saveFile(pic,name);
if (file.exists()) {
upload(url, file);
}else{
// show("你给的文件路径不存在");
Log.d("myTag", "你给的文件路径不存在");
}
}
/**
*
* @param url
* @param uploadfile
*/
public void upload(String url, File uploadfile) {
RequestParams params = new RequestParams();
// 这里必须按照文档写
params.addBodyParameter("uploadfile", uploadfile);
// btn_send.setEnabled(false);
// 发送请求
new HttpUtils().send(
HttpRequest.HttpMethod.POST,// 上传必须是POST
url,
params,
new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> info) {
String result = info.result.trim();// 上传文件的数据库ID
// show("上传后的结果:"+result);
Log.d("myTag", "上传后的结果");
result = result.substring(result.indexOf("{")+1);// 从{开始截取,包含{
if (result.equals("0")) {
//show("上传失败");
Log.d("myTag", "上传失败");
Toast.makeText(activity, "上传失败", Toast.LENGTH_LONG).show();
} else {
//show("上传成功,新ID是:" + result);
Toast.makeText(activity, "图片上传成功", Toast.LENGTH_LONG).show();
Log.d("myTag", "上传成功");
}
// btn_send.setEnabled(true);
// 获取服务器信息,展示上传的图片
Log.d("myTag", "取服务器信息,展示上传的图片");
//getUploadedInfo(infoUrl,result);
}
@Override
public void onFailure(HttpException e, String s) {
//show("网络失败:" + s);
// btn_send.setEnabled(true);
Log.d("myTag", "网络失败");
Toast.makeText(activity, "网络失败", Toast.LENGTH_LONG).show();
}
}
);
}
/* public void show(String msg){
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
Log.i("spl",msg);
}*/
/**
*
* @param url
* @param fid ID
*/
public void getUploadedInfo(String url, String fid) {
int ifid = Integer.parseInt(fid.trim());
url = infoUrl + "?fid="+ifid;
// show("url="+url);
// 发送请求
new HttpUtils().send(
HttpRequest.HttpMethod.GET,
url,
new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> info) {
String result = info.result.trim();
//show("刚获取的:"+result);
result = result.substring(result.indexOf("{"));// 从{开始截取,包含{
// show("截取后的:"+result);
Uploadfile uploadfile = JSON.parseObject(result, Uploadfile.class);
String picUrl = baseUrl+uploadfile.getUploadfile();
if (uploadfile == null) {
// show("失败");
} else {
// show("成功,图片地址是:" + picUrl);
}
//showPic(picUrl);
}
@Override
public void onFailure(HttpException e, String s) {
//show("网络失败:" + s);
}
}
);
}
/* private void showPic(String picUrl) {
//show("图片地址:"+picUrl);
//new BitmapUtils(this).display(iv,picUrl);
}*/
public File saveFile(Bitmap bm, String name) throws IOException {
String fileName = "";
if (name != null && name.contains("/")) {
fileName = name.split("/")[1];
} else {
fileName = name;
}
fileName =fileName+ new Date().getTime() + ".jpg";
// String path = "/sdcard/Pictures" + "/cads";
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
File dirFile = new File(path);
if (!dirFile.exists()) {
dirFile.mkdir();
}
File myCaptureFile = new File(path + fileName);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
bos.flush();
bos.close();
Log.d("myTag", "file转换");
return myCaptureFile;
}
}

@ -1,133 +0,0 @@
package com.example.administrator.baiduvoicetest.fragment;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.example.administrator.baiduvoicetest.R;
public class TestFragment extends Fragment {
public WebView webView;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag_setting,container,false);
webView = view.findViewById(R.id.web);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
setWebView();
}
webView.loadUrl("https://www.wjx.cn/jq/45378312.aspx");
return view;
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
private void setWebView(){
//声明WebSettings子类
WebSettings webSettings = webView.getSettings();
//如果访问的页面中要与Javascript交互则webview必须设置支持Javascript
webSettings.setJavaScriptEnabled(true);
// 若加载的 html 里有JS 在执行动画等操作会造成资源浪费CPU、电量
// 在 onStop 和 onResume 里分别把 setJavaScriptEnabled() 给设置成 false 和 true 即可
//支持插件
webSettings.setPluginState(WebSettings.PluginState.ON);
//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//缩放操作
webSettings.setSupportZoom(true); //支持缩放默认为true。是下面那个的前提。
webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false则该WebView不可缩放
webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
//其他细节操作
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
webSettings.setAllowFileAccess(true); //设置可以访问文件
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
webSettings.setDomStorageEnabled(true); // 开启 DOM storage API 功能
webSettings.setDatabaseEnabled(true); //开启 database storage API 功能
webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);// 设置允许JS弹窗
// 启用JavaScript
webSettings.setJavaScriptEnabled(true);
// 启用DOM存储
webSettings.setDomStorageEnabled(true);
// 启用数据库访问
webSettings.setDatabaseEnabled(true);
// 启用地理定位
webSettings.setGeolocationEnabled(true);
// 启用自动加载图片
webSettings.setLoadsImagesAutomatically(true);
// 启用缩放功能
webSettings.setSupportZoom(true);
// 设置布局算法为标准布局
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
// 设置自动调整屏幕大小适应内容
webSettings.setUseWideViewPort(true);
// 设置是否支持多窗口(弹出窗口)
webSettings.setSupportMultipleWindows(true);
// 设置是否允许JavaScript打开新窗口
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
// 启用媒体播放自动播放
webSettings.setMediaPlaybackRequiresUserGesture(false);
// 启用本地存储
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
// 启用插件
webSettings.setPluginState(WebSettings.PluginState.ON);
// 启用混合内容模式加载HTTP内容到HTTPS页面
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
//false :webview 自加载
return false;
}
});
// webView.setWebChromeClient(new WebChromeClient());
}
}

@ -1,65 +0,0 @@
package com.example.administrator.baiduvoicetest.fragment;
/**
*
*/
public class Uploadfile {
public int fid;
public String dateline;
public String userip;
public String uploadfile;
public int status;
public int getFid() {
return fid;
}
public void setFid(int fid) {
this.fid = fid;
}
public String getDateline() {
return dateline;
}
public void setDateline(String dateline) {
this.dateline = dateline;
}
public String getUserip() {
return userip;
}
public void setUserip(String userip) {
this.userip = userip;
}
public String getUploadfile() {
return uploadfile;
}
public void setUploadfile(String uploadfile) {
this.uploadfile = uploadfile;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
@Override
public String toString() {
return "Uploadfile{" +
"fid=" + fid +
", dateline='" + dateline + '\'' +
", userip='" + userip + '\'' +
", uploadfile='" + uploadfile + '\'' +
", status=" + status +
'}';
}
}

@ -1,80 +0,0 @@
package com.example.administrator.baiduvoicetest;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.tts.auth.AuthInfo;
import com.baidu.tts.client.SpeechError;
import com.baidu.tts.client.SpeechSynthesizer;
import com.baidu.tts.client.SpeechSynthesizerListener;
import java.util.Locale;
/**
*
*/
public class less extends AppCompatActivity implements OnInitListener{
TextView youhai,youhai1,youhai2;
protected TextToSpeech tts;
/**
* ActivityTextToSpeech
* @param savedInstanceState
*/
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_less);
tts = new TextToSpeech(this, this);
youhai = findViewById(R.id.youhai);
youhai1 = findViewById(R.id.youhai1);
youhai2 = findViewById(R.id.youhai2);
// 合并文本并尝试将其转换为语音
String str1=youhai.getText().toString()+"一"+youhai1.getText().toString()+"二"+youhai2.getText().toString();
tts.speak(str1, TextToSpeech.QUEUE_FLUSH, null);
}
/**
* TextToSpeech
* @param status
*/
@Override
public void onInit(int status){
// 判断是否成功初始化
// 判断是否转化成功
if (status == TextToSpeech.SUCCESS){
// 设置语言为中文
// 默认设定语言为中文原生的android貌似不支持中文。
int result = tts.setLanguage(Locale.CHINESE);
// 检查语言设置是否成功
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){
// 若不成功,则显示提示信息(这里采用了注释掉的代码方式)
// Toast.makeText(MainActivity.this, R.string.notAvailable, Toast.LENGTH_SHORT).show();
}else{
//不支持中文就将语言设置为英文
tts.setLanguage(Locale.US);
}
}
}
/**
* Activity
*/
@Override
public void onStart()
{
super.onStart();
this.getDelegate().onStart();
// 合并文本并尝试将其转换为语音
String str1=youhai.getText().toString()+"一"+youhai1.getText().toString()+"二"+youhai2.getText().toString();
tts.speak(str1, TextToSpeech.QUEUE_FLUSH, null);
}
/**
* ActivityTextToSpeech
*/
@Override
public void onStop(){
super.onStop();
this.getDelegate().onStop();
// 停止并关闭TextToSpeech服务
tts.shutdown();
tts.stop();
}
}

@ -1,66 +0,0 @@
package com.example.administrator.baiduvoicetest.utils;
import android.util.Log;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* function
*/
public class JDBCUtils {
private static final String TAG = "mysql11111";
java.sql.Connection conn=null;
public static void mymysql(){
final Thread thread =new Thread(new Runnable() {
@Override
public void run() {
while (!Thread.interrupted()) {
try {
Thread.sleep(100); // 每隔0.1秒尝试连接
} catch (InterruptedException e) {
Log.e(TAG, e.toString());
}
// 1.加载JDBC驱动
try {
Class.forName("com.mysql.jdbc.Driver");
Log.v(TAG, "加载JDBC驱动成功");
} catch (ClassNotFoundException e) {
Log.e(TAG, "加载JDBC驱动失败");
return;
}
// 2.设置好IP/端口/数据库名/用户名/密码等必要的连接信息
String ip = "192.168.31.248";
int port = 3306;
String dbName = "user";
String url = "jdbc:mysql://" + ip + ":" + port
+ "/" + dbName+"?useUnicode=true&characterEncoding=utf-8&useSSL=false";
// 构建连接mysql的字符串
String user = "root";
String password = "root";
// 3.连接JDBC
try {
java.sql.Connection conn = DriverManager.getConnection(url, user, password);
Log.d(TAG, "数据库连接成功");
conn.close();
return;
}
catch (SQLException e) {
Log.e(TAG, e.getMessage());
}
}
}
});
thread.start();
}
}

@ -1,56 +0,0 @@
package com.example.administrator.baiduvoicetest.view;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* ViewPagerViewPager
* onTouchEventonInterceptTouchEvent
*/
public class NoScrollViewPager extends ViewPager {
// 是否禁止ViewPager滑动的标志位
// 是否禁止 viewpager 左右滑动
private boolean noScroll = true;
/**
* NoScrollViewPager
*
* @param context
* @param attrs
*/
public NoScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* onTouchEventnoScrolltruefalseViewPager
* noScrollfalseViewPager
*
* @param arg0
* @return
*/
@Override
public boolean onTouchEvent(MotionEvent arg0) {
if (noScroll){
return false;
}else{
return super.onTouchEvent(arg0);
}
}
/**
* onInterceptTouchEventnoScrolltruefalseViewPager
* noScrollfalseViewPager
*
* @param arg0
* @return
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
if (noScroll){
return false;
}else{
return super.onInterceptTouchEvent(arg0);
}
}
}

@ -1,34 +0,0 @@
package com.example.administrator.baiduvoicetest.view;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
import com.example.administrator.baiduvoicetest.R;
/**
* RecyclerRubbishViewFrameLayout
* layout_recycler.xml
*/
public class RecyclerRubblishView extends FrameLayout {
/**
* ContextRecyclerRubblishView
* @param context
*/
public RecyclerRubblishView(@NonNull Context context) {
this(context,null);
}
/**
* ContextAttributeSetRecyclerRubblishView
* @param context
* @param attrs XML
*/
public RecyclerRubblishView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
// 将layout_recycler.xml布局文件.inflate到当前视图中完成视图的初始化。
View.inflate(context, R.layout.layout_recycler,this);
}
}

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

Loading…
Cancel
Save