diff --git a/README.md b/README.md index 0656f32..17b1564 100644 --- a/README.md +++ b/README.md @@ -182,6 +182,6 @@ * POST新建用户信息`params`示例 * 1♂ 0♀ - * `occupation_name`,`physique`的值必须和数据库对应 + * `occupation_name`,`physical_name`的值必须和数据库对应 ![](http://ww1.sinaimg.cn/large/0077h8xtly1fvjbfh6vm1j30r70eh3zj.jpg) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed366fe..58bb53a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,7 +44,7 @@ - + resultList = new ArrayList<>(); + + private int code = -1; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + Intent intent = getIntent(); + code = intent.getIntExtra("CODE", -1); //取消toolbar requestWindowFeature(Window.FEATURE_NO_TITLE); //设置全屏 @@ -59,9 +76,6 @@ public class FoodMaterialCamera extends AppCompatActivity { //注意:上面两个设置必须写在setContentView前面 setContentView(R.layout.cameras_layout); ButterKnife.bind(this); - Display display = getWindowManager().getDefaultDisplay(); - widthPixel = display.getWidth(); - heightPixel = display.getHeight() * (14.0f / 16); if (!checkCameraHardware(this)) { MessageUtils.MakeToast("不支持相机"); @@ -101,13 +115,6 @@ public class FoodMaterialCamera extends AppCompatActivity { if (null == mCamera) { mCamera = getCameraInstance(); mPreview = new CameraPreview(this, mCamera); -// mPreview.setOnTouchListener(new View.OnTouchListener() { -// @Override -// public boolean onTouch(View v, MotionEvent event) { -// mCamera.autoFocus(null); -// return false; -// } -// }); mCameraLayout.addView(mPreview); mCamera.startPreview(); } @@ -124,8 +131,10 @@ public class FoodMaterialCamera extends AppCompatActivity { c = Camera.open(); Camera.Parameters mParameters = c.getParameters(); - Logger.d(widthPixel+", "+heightPixel); - mParameters.setPictureSize(widthPixel, (int) heightPixel); + List sizes = mParameters.getSupportedPreviewSizes(); + + mParameters.setPictureSize(2048, 1536); + mParameters.setPreviewSize(2048, 1536); c.setParameters(mParameters); } catch (Exception e) { e.printStackTrace(); @@ -152,7 +161,45 @@ public class FoodMaterialCamera extends AppCompatActivity { private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { @Override public void onPictureTaken(final byte[] data, Camera camera) { - MessageUtils.MakeToast("拍照!"); + try { + String imgStr = Base64.encodeToString(data, Base64.DEFAULT); + String imgParam = URLEncoder.encode(imgStr, "UTF-8"); + final String param = "image=" + imgParam + "&top_num=" + 1; + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + String result = null; + try { + if (code == 0) { + result = WebUtils.HttpPost(ConstantUtils.BD_DISH_URL, + ConstantUtils.BD_ACCESS_TOKEN, param); + } else if (code == 1) { + result = WebUtils.HttpPost(ConstantUtils.BD_DISH_URL, + ConstantUtils.BD_ACCESS_TOKEN, param); + } 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")); + Logger.d(classifyResult); + resultList.add(classifyResult); + refreshUI(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + thread.start(); + } catch (Exception e) { + e.printStackTrace(); + } +// MessageUtils.MakeToast("拍照!"); mCamera.startPreview(); } }; @@ -168,8 +215,10 @@ public class FoodMaterialCamera extends AppCompatActivity { switch (view.getId()) { case R.id.more_take_photo_button_capture: mCamera.autoFocus(mAutoFocusCallback); + cameraCoverLinearlayout.setVisibility(View.VISIBLE); break; case R.id.more_takephoto_ok: + resultList.clear(); break; } } @@ -209,4 +258,19 @@ public class FoodMaterialCamera extends AppCompatActivity { } camera.setDisplayOrientation(result); } + + + private void refreshUI() { + resultsTextView.post(new Runnable() { + @Override + public void run() { + String text = ""; + for (int i = 0; i < resultList.size(); i++) { + text += resultList.get(i).getName() + " "; + } + resultsTextView.setText(text); + cameraCoverLinearlayout.setVisibility(View.INVISIBLE); + } + }); + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java index 2ee2ccd..0a07af7 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java @@ -19,13 +19,12 @@ import android.widget.TextView; import com.ToxicBakery.viewpager.transforms.CubeOutTransformer; import com.akexorcist.roundcornerprogressbar.RoundCornerProgressBar; -import com.bumptech.glide.Glide; import com.cb.ratingbar.CBRatingBar; import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.adapter.HomePagerAdapter; import com.example.ninefourone.nutritionmaster.base.BaseActivity; -import com.example.ninefourone.nutritionmaster.camera.FoodMaterialCamera; +import com.example.ninefourone.nutritionmaster.camera.ClassifierCamera; import com.example.ninefourone.nutritionmaster.modules.addinformation.AddInformationActivity; import com.example.ninefourone.nutritionmaster.modules.addinformation.AddPhysiqueActivity; import com.example.ninefourone.nutritionmaster.modules.information.InformationActivity; @@ -316,14 +315,24 @@ public class MainActivity extends BaseActivity { @Override public void onBoomButtonClick(int index) { Intent cameraIntent = new Intent(MainActivity.this, - FoodMaterialCamera.class); + ClassifierCamera.class); + cameraIntent.putExtra("CODE", ClassifierCamera.MATERAIL_CODE); startActivity(cameraIntent); } }); boomMenuButton.addBuilder(builder); HamButton.Builder builder2 = new HamButton.Builder() .normalImageRes(R.drawable.foods) - .normalTextRes(R.string.food_title); + .normalTextRes(R.string.food_title) + .listener(new OnBMClickListener() { + @Override + public void onBoomButtonClick(int index) { + Intent cameraIntent = new Intent(MainActivity.this, + ClassifierCamera.class); + cameraIntent.putExtra("CODE", ClassifierCamera.DISH_CODE); + startActivity(cameraIntent); + } + }); boomMenuButton.addBuilder(builder2); } 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 f07efdc..0ff1c2a 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 @@ -273,4 +273,6 @@ public class ConstantUtils { public static String BD_SECRET_KEY = "EEXe6pG7QGVdrqDM8eR0S3RY2WPf4Gwn"; public static String BD_ACCESS_TOKEN = ""; + public static String BD_DISH_URL = "https://aip.baidubce.com/rest/2.0/image-classify/v2/dish"; + } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java index bfce3fe..6a8fb37 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/WebUtils.java @@ -7,8 +7,21 @@ import com.example.ninefourone.nutritionmaster.bean.Occupation; import com.google.gson.Gson; import com.orhanobut.logger.Logger; +import java.io.BufferedReader; +import java.io.DataOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.StringWriter; +import java.io.Writer; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; import okhttp3.Call; import okhttp3.Callback; @@ -235,6 +248,54 @@ public class WebUtils { } + public static String HttpPost(String requestUrl, String accessToken, String params) throws Exception { + System.out.println(params); + String generalUrl = ""; + generalUrl = requestUrl + "?access_token=" + accessToken; + System.out.println("发送的连接为:" + generalUrl); + URL url = new URL(generalUrl); + // 打开和URL之间的连接 + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + System.out.println("打开链接,开始发送请求" + new Date().getTime() / 1000); + connection.setRequestMethod("POST"); + // 设置通用的请求属性 + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Connection", "Keep-Alive"); + connection.setUseCaches(false); + connection.setDoOutput(true); + connection.setDoInput(true); + + // 得到请求的输出流对象 + DataOutputStream out = new DataOutputStream(connection.getOutputStream()); + out.writeBytes(params); + out.flush(); + out.close(); + + // 建立实际的连接 + connection.connect(); + // 获取所有响应头字段 + Map> headers = connection.getHeaderFields(); + // 遍历所有的响应头字段 + for (String key : headers.keySet()) { + System.out.println(key + "--->" + headers.get(key)); + } + // 定义 BufferedReader输入流来读取URL的响应 + BufferedReader in = null; + if (requestUrl.contains("nlp")) + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK")); + else + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); + String result = ""; + String getLine; + while ((getLine = in.readLine()) != null) { + result += getLine; + } + in.close(); + System.out.println("请求结束" + new Date().getTime() / 1000); + System.out.println("result:" + result); + return result; + } + public static void main(String[] args) { /*WebUtils.getMenu("雪丽对虾", new Callback() { @Override diff --git a/app/src/main/res/drawable/camera_bg.jpg b/app/src/main/res/drawable/camera_bg.jpg new file mode 100644 index 0000000..d09ed63 Binary files /dev/null and b/app/src/main/res/drawable/camera_bg.jpg differ diff --git a/app/src/main/res/drawable/ic_ok.xml b/app/src/main/res/drawable/ic_ok.xml index 400fd38..0d40b66 100644 --- a/app/src/main/res/drawable/ic_ok.xml +++ b/app/src/main/res/drawable/ic_ok.xml @@ -1,4 +1,5 @@ - + + diff --git a/app/src/main/res/drawable/ic_take_photo.xml b/app/src/main/res/drawable/ic_take_photo.xml new file mode 100644 index 0000000..a9904b6 --- /dev/null +++ b/app/src/main/res/drawable/ic_take_photo.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/layout/cameras_layout.xml b/app/src/main/res/layout/cameras_layout.xml index 13a1e8d..03ec529 100644 --- a/app/src/main/res/layout/cameras_layout.xml +++ b/app/src/main/res/layout/cameras_layout.xml @@ -30,6 +30,8 @@ android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" + android:textColor="#fff" + android:textSize="18sp" tools:text="@string/app_name" /> @@ -39,15 +41,15 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" - android:alpha="0.2" - android:background="#8a515050"> + android:alpha="0.5" + android:background="@drawable/camera_bg"> + android:src="@drawable/ic_take_photo" />