diff --git a/app/build.gradle b/app/build.gradle
index 8af0acf..414fe30 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,7 +20,11 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
-
+ sourceSets {
+ main {
+ jniLibs.srcDirs = ['libs']
+ }
+ }
}
dependencies {
@@ -31,43 +35,61 @@ dependencies {
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'
+
//butterknife
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
+
//logger
implementation 'com.orhanobut:logger:2.2.0'
+
//超帅侧拉ui
implementation 'com.mxn.soul:flowingdrawer-core:2.0.0'
implementation 'com.nineoldandroids:library:2.4.0'
+
//图片形状库
implementation 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
+
//cardview
implementation 'com.android.support:cardview-v7:26.1.0'
+
//tablayout
implementation 'com.flyco.tablayout:FlycoTabLayout_Lib:2.0.0@aar'
+
//viewpager transforms
implementation 'com.ToxicBakery.viewpager.transforms:view-pager-transforms:1.2.32@aar'
+
//个人信息的那个条条
implementation 'com.akexorcist:RoundCornerProgressBar:2.0.3'
+
//wave
implementation 'me.itangqi.waveloadingview:library:0.3.5'
+
//计步
implementation project(':todaystepcounterlib')
+
//打分ui
implementation 'com.github.CB-ysx:CBRatingBar:3.0.1'
+
//折线
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'
+
//searchview
implementation 'com.miguelcatalan:materialsearchview:1.4.0'
+
//floatbuttom
implementation 'com.nightonke:boommenu:2.1.1'
+
//recycler and card
implementation 'com.android.support:recyclerview-v7:26.1.0'
implementation 'com.android.support:cardview-v7:26.1.0'
+
//混合式recyclerview
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'
+
//翻页view
implementation 'com.github.czy1121:turncardlistview:1.0.0'
+
//油表盘
implementation 'com.github.lzyzsd:circleprogress:1.2.1'
@@ -80,10 +102,14 @@ dependencies {
//okhttp 网络通信库
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
+
// json解析库
implementation 'com.google.code.gson:gson:2.8.5'
//横向picker
- compile 'com.github.adityagohad:HorizontalPicker:1.0.1'
-
+ implementation 'com.github.adityagohad:HorizontalPicker:1.0.1'
+ implementation files('libs/YoudaoBase.jar')
+ implementation files('libs/YoudaoCnDictOffline.jar')
+ implementation files('libs/YoudaoTranslateOffline.jar')
+ implementation files('libs/YoudaoTranslateOnline.jar')
}
diff --git a/app/libs/YoudaoBase.jar b/app/libs/YoudaoBase.jar
new file mode 100644
index 0000000..274fd8f
Binary files /dev/null and b/app/libs/YoudaoBase.jar differ
diff --git a/app/libs/YoudaoCnDictOffline.jar b/app/libs/YoudaoCnDictOffline.jar
new file mode 100644
index 0000000..f64b019
Binary files /dev/null and b/app/libs/YoudaoCnDictOffline.jar differ
diff --git a/app/libs/YoudaoTranslateOffline.jar b/app/libs/YoudaoTranslateOffline.jar
new file mode 100644
index 0000000..4b680e3
Binary files /dev/null and b/app/libs/YoudaoTranslateOffline.jar differ
diff --git a/app/libs/YoudaoTranslateOnline.jar b/app/libs/YoudaoTranslateOnline.jar
new file mode 100644
index 0000000..67b6e05
Binary files /dev/null and b/app/libs/YoudaoTranslateOnline.jar differ
diff --git a/app/libs/arm64-v8a/libdict-parser.so b/app/libs/arm64-v8a/libdict-parser.so
new file mode 100644
index 0000000..a3ee7c2
Binary files /dev/null and b/app/libs/arm64-v8a/libdict-parser.so differ
diff --git a/app/libs/armeabi-v7a/libdict-parser.so b/app/libs/armeabi-v7a/libdict-parser.so
new file mode 100644
index 0000000..bca7486
Binary files /dev/null and b/app/libs/armeabi-v7a/libdict-parser.so differ
diff --git a/app/libs/armeabi/libdict-parser.so b/app/libs/armeabi/libdict-parser.so
new file mode 100644
index 0000000..2e0346d
Binary files /dev/null and b/app/libs/armeabi/libdict-parser.so differ
diff --git a/app/libs/mips/libdict-parser.so b/app/libs/mips/libdict-parser.so
new file mode 100644
index 0000000..7916a00
Binary files /dev/null and b/app/libs/mips/libdict-parser.so differ
diff --git a/app/libs/mips64/libdict-parser.so b/app/libs/mips64/libdict-parser.so
new file mode 100644
index 0000000..c136872
Binary files /dev/null and b/app/libs/mips64/libdict-parser.so differ
diff --git a/app/libs/x86/libdict-parser.so b/app/libs/x86/libdict-parser.so
new file mode 100644
index 0000000..83b314b
Binary files /dev/null and b/app/libs/x86/libdict-parser.so differ
diff --git a/app/libs/x86_64/libdict-parser.so b/app/libs/x86_64/libdict-parser.so
new file mode 100644
index 0000000..06c7a34
Binary files /dev/null and b/app/libs/x86_64/libdict-parser.so differ
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index f1b4245..b8e5117 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -19,3 +19,13 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
+-ignorewarnings
+-libraryjars libs/ YoudaoBase.jar
+-libraryjars libs/ YoudaoCnDictOffline.jar
+-libraryjars libs/ YoudaoTranslateOnline.jar
+-libraryjars libs/ YoudaoTranslateOffline.jar
+
+-keep class com.youdao.sdk.ydtranslate.** { *;}
+-keep class com.youdao.sdk.chdict.** { *;}
+-keep class com.youdao.localtransengine.** { *;}
+-keep class com.youdao.sdk.ydonlinetranslate.** { *;}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3b6865a..1f28d26 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,8 @@
-
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java
index b0346c4..31b7f5f 100644
--- a/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java
+++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/NutritionMaster.java
@@ -13,6 +13,8 @@ import com.example.ninefourone.nutritionmaster.utils.WebUtil;
import com.google.gson.Gson;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
+import com.youdao.sdk.app.YouDaoApplication;
+import com.youdao.sdk.chdict.ChDictor;
import org.json.JSONObject;
@@ -44,6 +46,7 @@ public class NutritionMaster extends Application {
super.onCreate();
mInstance = this;
init();
+ initYouDao();
}
/**
@@ -150,7 +153,6 @@ public class NutritionMaster extends Application {
*/
private void initBD() {
ConstantUtils.BD_ACCESS_TOKEN = getAccessToken();
-// Logger.d(ConstantUtils.BD_ACCESS_TOKEN);
}
@@ -187,10 +189,8 @@ public class NutritionMaster extends Application {
/**
* 返回结果示例
*/
-// System.err.println("result:" + result);
JSONObject jsonObject = new JSONObject(result);
String access_token = jsonObject.getString("access_token");
-// Logger.d(access_token);
return access_token;
} catch (Exception e) {
e.printStackTrace();
@@ -198,5 +198,12 @@ public class NutritionMaster extends Application {
return null;
}
+ /**
+ * YD init
+ */
+ private void initYouDao() {
+ YouDaoApplication.init(this, ConstantUtils.YOUDAO_APPKEY);
+ }
+
}
diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java
index 97565fc..7a6ad57 100644
--- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java
+++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java
@@ -20,8 +20,8 @@ public class ClassifyResult implements Serializable {
private String imgPath;
private double probability;
private String name;
- private double calorie;
- private Boolean has_calorie;
+ private double calorie = 0;
+ private Boolean has_calorie = false;
private double quantity = -1;
private FoodMenu foodMenu;
diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java
index dcbe994..b691249 100644
--- a/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java
+++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java
@@ -20,10 +20,19 @@ import android.widget.TextView;
import com.example.ninefourone.nutritionmaster.R;
import com.example.ninefourone.nutritionmaster.bean.ClassifyResult;
import com.example.ninefourone.nutritionmaster.modules.classifyresult.DishResultActivity;
+import com.example.ninefourone.nutritionmaster.modules.classifyresult.MaterialResultActivity;
import com.example.ninefourone.nutritionmaster.utils.ConstantUtils;
+import com.example.ninefourone.nutritionmaster.utils.MaterialClassifier;
import com.example.ninefourone.nutritionmaster.utils.MessageUtils;
import com.example.ninefourone.nutritionmaster.utils.WebUtil;
import com.orhanobut.logger.Logger;
+import com.youdao.sdk.app.Language;
+import com.youdao.sdk.app.LanguageUtils;
+import com.youdao.sdk.ydonlinetranslate.Translator;
+import com.youdao.sdk.ydtranslate.Translate;
+import com.youdao.sdk.ydtranslate.TranslateErrorCode;
+import com.youdao.sdk.ydtranslate.TranslateListener;
+import com.youdao.sdk.ydtranslate.TranslateParameters;
import org.json.JSONArray;
import org.json.JSONObject;
@@ -171,27 +180,30 @@ public class ClassifierCamera extends AppCompatActivity {
public void run() {
String result = null;
try {
- if (code == 0) {
- result = WebUtil.HttpPost(ConstantUtils.BD_DISH_URL,
- ConstantUtils.BD_ACCESS_TOKEN, param);
- } else if (code == 1) {
+ if (code == MATERAIL_CODE) {
+ MaterialClassifier materialClassifier = new MaterialClassifier();
+ JSONObject jsonObject = materialClassifier.plantDetect(data);
+ result = jsonObject.getJSONArray("objects")
+ .getJSONObject(0).getString("value");
+ translate(result);
+ } else if (code == DISH_CODE) {
result = WebUtil.HttpPost(ConstantUtils.BD_DISH_URL,
ConstantUtils.BD_ACCESS_TOKEN, param);
+ JSONObject jsonObject = new JSONObject(result);
+ ClassifyResult classifyResult = new ClassifyResult();
+ JSONArray resultObject = jsonObject.getJSONArray("result");
+ jsonObject = resultObject.getJSONObject(0);
+ classifyResult.setCalorie(jsonObject.getInt("calorie"));
+ classifyResult.setHas_calorie(jsonObject.getBoolean("has_calorie"));
+ classifyResult.setProbability(jsonObject.getDouble("probability"));
+ classifyResult.setName(jsonObject.getString("name"));
+ classifyResult.getMenu();
+ resultList.add(classifyResult);
+ refreshUI();
} else {
Logger.e("拍照code为-1");
}
- JSONObject jsonObject = new JSONObject(result);
- ClassifyResult classifyResult = new ClassifyResult();
- JSONArray resultObject = jsonObject.getJSONArray("result");
- jsonObject = resultObject.getJSONObject(0);
- classifyResult.setCalorie(jsonObject.getInt("calorie"));
- classifyResult.setHas_calorie(jsonObject.getBoolean("has_calorie"));
- classifyResult.setProbability(jsonObject.getDouble("probability"));
- classifyResult.setName(jsonObject.getString("name"));
- classifyResult.getMenu();
-// Logger.d(classifyResult);
- resultList.add(classifyResult);
- refreshUI();
+
} catch (Exception e) {
e.printStackTrace();
}
@@ -220,9 +232,15 @@ public class ClassifierCamera extends AppCompatActivity {
cameraCoverLinearlayout.setVisibility(View.VISIBLE);
break;
case R.id.more_takephoto_ok:
- Intent intent = new Intent(ClassifierCamera.this, DishResultActivity.class);
+ Intent intent;
+ if (code == DISH_CODE) {
+ intent = new Intent(ClassifierCamera.this, DishResultActivity.class);
+
+ } else {
+ intent = new Intent(ClassifierCamera.this, MaterialResultActivity.class);
+
+ }
intent.putExtra("LIST", resultList);
-// intent.putExtra("LIST", ConstantUtils.testData);
startActivity(intent);
resultList.clear();
refreshUI();
@@ -281,4 +299,41 @@ public class ClassifierCamera extends AppCompatActivity {
}
});
}
+
+ /**
+ * YOUDAO
+ *
+ * @param english
+ */
+ private void translate(String english) {
+ Language languageFrom = LanguageUtils.getLangByName("英文");
+ Language languageTo = LanguageUtils.getLangByName("中文");
+
+ TranslateParameters tps = new TranslateParameters.Builder()
+ .source("NM")
+ .from(languageFrom).to(languageTo).build();
+ Translator translator = Translator.getInstance(tps);
+ translator.lookup(english, "5c0e8adb488ba180", new TranslateListener() {
+ @Override
+ public void onError(TranslateErrorCode translateErrorCode, String s) {
+
+ }
+
+ @Override
+ public void onResult(Translate translate, String s, String s1) {
+ String result = "";
+ result = translate.getTranslations().get(0);
+// Logger.d(result);
+ ClassifyResult classifyResult = new ClassifyResult();
+ classifyResult.setName(result);
+ resultList.add(classifyResult);
+ refreshUI();
+ }
+
+ @Override
+ public void onResult(List list, List list1, List list2, String s) {
+
+ }
+ });
+ }
}
diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/MaterialResultActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/MaterialResultActivity.java
new file mode 100644
index 0000000..2ef5b8b
--- /dev/null
+++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/MaterialResultActivity.java
@@ -0,0 +1,31 @@
+package com.example.ninefourone.nutritionmaster.modules.classifyresult;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+import com.example.ninefourone.nutritionmaster.R;
+import com.example.ninefourone.nutritionmaster.base.BaseActivity;
+
+public class MaterialResultActivity extends BaseActivity {
+
+
+ @Override
+ public int getLayoutId() {
+ return R.layout.activity_material_result;
+ }
+
+ @Override
+ public void initViews(Bundle savedInstanceState) {
+
+ }
+
+ @Override
+ public void initToolBar() {
+
+ }
+
+ @Override
+ public void onPointerCaptureChanged(boolean hasCapture) {
+
+ }
+}
diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java
index 34658f6..7cf252b 100644
--- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java
+++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java
@@ -341,4 +341,6 @@ public class ConstantUtils {
}
return arrayList;
}
+
+ public static String YOUDAO_APPKEY = "3ea8061348a6bdd6";
}
diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MaterialClassifier.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MaterialClassifier.java
new file mode 100644
index 0000000..7b63230
--- /dev/null
+++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MaterialClassifier.java
@@ -0,0 +1,134 @@
+package com.example.ninefourone.nutritionmaster.utils;
+
+import android.util.Log;
+
+import org.json.JSONObject;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Random;
+
+import javax.net.ssl.SSLException;
+
+/**
+ * Created by ScorpioMiku on 2018/10/6.
+ */
+
+public class MaterialClassifier {
+
+ private String TAG = "face";
+ final String api_url = "https://api-cn.faceplusplus.com/imagepp/beta/detectsceneandobject";
+ final String api_key = "waTeK75Yeqd4YsnyaXRgik_PAJ8bUMea";
+ final String api_secret = "aQpFps5C-gqncIENA5ruPTwhV6fL9Rit";
+ private HashMap map = new HashMap<>();
+ private HashMap byteMap = new HashMap<>();
+
+
+ public JSONObject plantDetect(byte[] image) {
+ String str = "没有训练该样本";
+ JSONObject re = null;
+ map.put("api_key", api_key);
+ map.put("api_secret", api_secret);
+ map.put("objects", "value,confidence");
+// file = new File(path);
+ byteMap.put("image_file", image);
+ try {
+ byte[] bacd = post(api_url, map, byteMap);
+ str = new String(bacd);
+ re = new JSONObject(str);
+ Log.d(TAG, "plantDetect: " + re);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return re;
+ }
+
+ private final static int CONNECT_TIME_OUT = 30000;
+ private final static int READ_OUT_TIME = 50000;
+ private static String boundaryString = getBoundary();
+
+ protected static byte[] post(String url, HashMap map, HashMap fileMap) throws Exception {
+ HttpURLConnection conne;
+ URL url1 = new URL(url);
+ conne = (HttpURLConnection) url1.openConnection();
+ conne.setDoOutput(true);
+ conne.setUseCaches(false);
+ conne.setRequestMethod("POST");
+ conne.setConnectTimeout(CONNECT_TIME_OUT);
+ conne.setReadTimeout(READ_OUT_TIME);
+ conne.setRequestProperty("accept", "*/*");
+ conne.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundaryString);
+ conne.setRequestProperty("connection", "Keep-Alive");
+ conne.setRequestProperty("user-agent", "Mozilla/4.0 (compatible;MSIE 6.0;Windows NT 5.1;SV1)");
+ DataOutputStream obos = new DataOutputStream(conne.getOutputStream());
+ Iterator iter = map.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ String key = entry.getKey();
+ String value = entry.getValue();
+ obos.writeBytes("--" + boundaryString + "\r\n");
+ obos.writeBytes("Content-Disposition: form-data; name=\"" + key
+ + "\"\r\n");
+ obos.writeBytes("\r\n");
+ obos.writeBytes(value + "\r\n");
+ }
+ if (fileMap != null && fileMap.size() > 0) {
+ Iterator fileIter = fileMap.entrySet().iterator();
+ while (fileIter.hasNext()) {
+ Map.Entry fileEntry = (Map.Entry) fileIter.next();
+ obos.writeBytes("--" + boundaryString + "\r\n");
+ obos.writeBytes("Content-Disposition: form-data; name=\"" + fileEntry.getKey()
+ + "\"; filename=\"" + encode(" ") + "\"\r\n");
+ obos.writeBytes("\r\n");
+ obos.write(fileEntry.getValue());
+ obos.writeBytes("\r\n");
+ }
+ }
+ obos.writeBytes("--" + boundaryString + "--" + "\r\n");
+ obos.writeBytes("\r\n");
+ obos.flush();
+ obos.close();
+ InputStream ins = null;
+ int code = conne.getResponseCode();
+ try {
+ if (code == 200) {
+ ins = conne.getInputStream();
+ } else {
+ ins = conne.getErrorStream();
+ }
+ } catch (SSLException e) {
+ e.printStackTrace();
+ return new byte[0];
+ }
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ byte[] buff = new byte[4096];
+ int len;
+ while ((len = ins.read(buff)) != -1) {
+ baos.write(buff, 0, len);
+ }
+ byte[] bytes = baos.toByteArray();
+ ins.close();
+ return bytes;
+ }
+
+ private static String getBoundary() {
+ StringBuilder sb = new StringBuilder();
+ Random random = new Random();
+ for (int i = 0; i < 32; ++i) {
+ sb.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-".charAt(random.nextInt("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_".length())));
+ }
+ return sb.toString();
+ }
+
+ private static String encode(String value) throws Exception {
+ return URLEncoder.encode(value, "UTF-8");
+ }
+
+}
diff --git a/app/src/main/res/layout/activity_material_result.xml b/app/src/main/res/layout/activity_material_result.xml
new file mode 100644
index 0000000..9c05367
--- /dev/null
+++ b/app/src/main/res/layout/activity_material_result.xml
@@ -0,0 +1,9 @@
+
+
+
+