mirror of
				https://github.com/PaddlePaddle/FastDeploy.git
				synced 2025-10-31 20:02:53 +08:00 
			
		
		
		
	[Android] Add some face alignment app example code (#981)
This commit is contained in:
		| @@ -0,0 +1,400 @@ | |||||||
|  | package com.baidu.paddle.fastdeploy.app.examples.facealign; | ||||||
|  |  | ||||||
|  | import static com.baidu.paddle.fastdeploy.ui.Utils.decodeBitmap; | ||||||
|  | import static com.baidu.paddle.fastdeploy.ui.Utils.getRealPathFromURI; | ||||||
|  |  | ||||||
|  | import android.Manifest; | ||||||
|  | import android.annotation.SuppressLint; | ||||||
|  | import android.app.Activity; | ||||||
|  | import android.app.AlertDialog; | ||||||
|  | import android.content.DialogInterface; | ||||||
|  | import android.content.Intent; | ||||||
|  | import android.content.SharedPreferences; | ||||||
|  | import android.content.pm.PackageManager; | ||||||
|  | import android.graphics.Bitmap; | ||||||
|  | import android.net.Uri; | ||||||
|  | import android.os.Bundle; | ||||||
|  | import android.os.SystemClock; | ||||||
|  | import android.preference.PreferenceManager; | ||||||
|  | import android.support.annotation.NonNull; | ||||||
|  | import android.support.v4.app.ActivityCompat; | ||||||
|  | import android.support.v4.content.ContextCompat; | ||||||
|  | import android.view.View; | ||||||
|  | import android.view.ViewGroup; | ||||||
|  | import android.view.Window; | ||||||
|  | import android.view.WindowManager; | ||||||
|  | import android.widget.ImageButton; | ||||||
|  | import android.widget.ImageView; | ||||||
|  | import android.widget.TextView; | ||||||
|  |  | ||||||
|  | import com.baidu.paddle.fastdeploy.RuntimeOption; | ||||||
|  | import com.baidu.paddle.fastdeploy.app.examples.R; | ||||||
|  | import com.baidu.paddle.fastdeploy.ui.Utils; | ||||||
|  | import com.baidu.paddle.fastdeploy.ui.view.CameraSurfaceView; | ||||||
|  | import com.baidu.paddle.fastdeploy.ui.view.ResultListView; | ||||||
|  | import com.baidu.paddle.fastdeploy.ui.view.model.BaseResultModel; | ||||||
|  | import com.baidu.paddle.fastdeploy.vision.Visualize; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | public class FaceAlignMainActivity extends Activity implements View.OnClickListener, CameraSurfaceView.OnTextureChangedListener { | ||||||
|  |     private static final String TAG = FaceAlignMainActivity.class.getSimpleName(); | ||||||
|  |  | ||||||
|  |     CameraSurfaceView svPreview; | ||||||
|  |     TextView tvStatus; | ||||||
|  |     ImageButton btnSwitch; | ||||||
|  |     ImageButton btnShutter; | ||||||
|  |     ImageButton btnSettings; | ||||||
|  |     ImageView realtimeToggleButton; | ||||||
|  |     boolean isRealtimeStatusRunning = false; | ||||||
|  |     ImageView backInPreview; | ||||||
|  |     private ImageView albumSelectButton; | ||||||
|  |     private View cameraPageView; | ||||||
|  |     private ViewGroup resultPageView; | ||||||
|  |     private ImageView resultImage; | ||||||
|  |     private ImageView backInResult; | ||||||
|  |     private ResultListView resultView; | ||||||
|  |     private Bitmap shutterBitmap; | ||||||
|  |     private Bitmap picBitmap; | ||||||
|  |     private boolean isShutterBitmapCopied = false; | ||||||
|  |  | ||||||
|  |     public static final int TYPE_UNKNOWN = -1; | ||||||
|  |     public static final int BTN_SHUTTER = 0; | ||||||
|  |     public static final int ALBUM_SELECT = 1; | ||||||
|  |     public static final int REALTIME_DETECT = 2; | ||||||
|  |     private static int TYPE = REALTIME_DETECT; | ||||||
|  |  | ||||||
|  |     private static final int REQUEST_PERMISSION_CODE_STORAGE = 101; | ||||||
|  |     private static final int INTENT_CODE_PICK_IMAGE = 100; | ||||||
|  |     private static final int TIME_SLEEP_INTERVAL = 50; // ms | ||||||
|  |  | ||||||
|  |     long timeElapsed = 0; | ||||||
|  |     long frameCounter = 0; | ||||||
|  |  | ||||||
|  |     // todo Call 'init' and 'release' manually later | ||||||
|  |     //PaddleSegModel predictor = new PaddleSegModel(); | ||||||
|  |     private List<BaseResultModel> results = new ArrayList<>(); | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onCreate(Bundle savedInstanceState) { | ||||||
|  |         super.onCreate(savedInstanceState); | ||||||
|  |  | ||||||
|  |         // Fullscreen | ||||||
|  |         requestWindowFeature(Window.FEATURE_NO_TITLE); | ||||||
|  |         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); | ||||||
|  |  | ||||||
|  |         setContentView(R.layout.face_align_activity_main); | ||||||
|  |  | ||||||
|  |         // Clear all setting items to avoid app crashing due to the incorrect settings | ||||||
|  |         initSettings(); | ||||||
|  |  | ||||||
|  |         // Check and request CAMERA and WRITE_EXTERNAL_STORAGE permissions | ||||||
|  |         if (!checkAllPermissions()) { | ||||||
|  |             requestAllPermissions(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Init the camera preview and UI components | ||||||
|  |         initView(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @SuppressLint("NonConstantResourceId") | ||||||
|  |     @Override | ||||||
|  |     public void onClick(View v) { | ||||||
|  |         switch (v.getId()) { | ||||||
|  |             case R.id.btn_switch: | ||||||
|  |                 svPreview.switchCamera(); | ||||||
|  |                 break; | ||||||
|  |             case R.id.btn_shutter: | ||||||
|  |                 TYPE = BTN_SHUTTER; | ||||||
|  |                 shutterAndPauseCamera(); | ||||||
|  |                 resultView.setAdapter(null); | ||||||
|  |                 break; | ||||||
|  |             case R.id.btn_settings: | ||||||
|  |                 startActivity(new Intent(FaceAlignMainActivity.this, FaceAlignSettingsActivity.class)); | ||||||
|  |                 break; | ||||||
|  |             case R.id.realtime_toggle_btn: | ||||||
|  |                 toggleRealtimeStyle(); | ||||||
|  |                 break; | ||||||
|  |             case R.id.back_in_preview: | ||||||
|  |                 finish(); | ||||||
|  |                 break; | ||||||
|  |             case R.id.album_select: | ||||||
|  |                 TYPE = ALBUM_SELECT; | ||||||
|  |                 // Judge whether authority has been granted. | ||||||
|  |                 if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { | ||||||
|  |                     // If this permission was requested before the application but the user refused the request, this method will return true. | ||||||
|  |                     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_CODE_STORAGE); | ||||||
|  |                 } else { | ||||||
|  |                     Intent intent = new Intent(Intent.ACTION_PICK); | ||||||
|  |                     intent.setType("image/*"); | ||||||
|  |                     startActivityForResult(intent, INTENT_CODE_PICK_IMAGE); | ||||||
|  |                 } | ||||||
|  |                 resultView.setAdapter(null); | ||||||
|  |                 break; | ||||||
|  |             case R.id.back_in_result: | ||||||
|  |                 back(); | ||||||
|  |                 break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void onBackPressed() { | ||||||
|  |         super.onBackPressed(); | ||||||
|  |         back(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void back() { | ||||||
|  |         resultPageView.setVisibility(View.GONE); | ||||||
|  |         cameraPageView.setVisibility(View.VISIBLE); | ||||||
|  |         TYPE = REALTIME_DETECT; | ||||||
|  |         isShutterBitmapCopied = false; | ||||||
|  |         svPreview.onResume(); | ||||||
|  |         results.clear(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void shutterAndPauseCamera() { | ||||||
|  |         new Thread(new Runnable() { | ||||||
|  |             @Override | ||||||
|  |             public void run() { | ||||||
|  |                 try { | ||||||
|  |                     // Sleep some times to ensure picture has been correctly shut. | ||||||
|  |                     Thread.sleep(TIME_SLEEP_INTERVAL * 10); // 500ms | ||||||
|  |                 } catch (InterruptedException e) { | ||||||
|  |                     e.printStackTrace(); | ||||||
|  |                 } | ||||||
|  |                 runOnUiThread(new Runnable() { | ||||||
|  |                     @SuppressLint("SetTextI18n") | ||||||
|  |                     public void run() { | ||||||
|  |                         // These codes will run in main thread. | ||||||
|  |                         svPreview.onPause(); | ||||||
|  |                         cameraPageView.setVisibility(View.GONE); | ||||||
|  |                         resultPageView.setVisibility(View.VISIBLE); | ||||||
|  |                         if (shutterBitmap != null && !shutterBitmap.isRecycled()) { | ||||||
|  |                             detail(shutterBitmap); | ||||||
|  |                         } else { | ||||||
|  |                             new AlertDialog.Builder(FaceAlignMainActivity.this) | ||||||
|  |                                     .setTitle("Empty Result!") | ||||||
|  |                                     .setMessage("Current picture is empty, please shutting it again!") | ||||||
|  |                                     .setCancelable(true) | ||||||
|  |                                     .show(); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 }); | ||||||
|  |             } | ||||||
|  |         }).start(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void copyBitmapFromCamera(Bitmap ARGB8888ImageBitmap) { | ||||||
|  |         if (isShutterBitmapCopied || ARGB8888ImageBitmap == null) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         if (!ARGB8888ImageBitmap.isRecycled()) { | ||||||
|  |             synchronized (this) { | ||||||
|  |                 shutterBitmap = ARGB8888ImageBitmap.copy(Bitmap.Config.ARGB_8888, true); | ||||||
|  |             } | ||||||
|  |             SystemClock.sleep(TIME_SLEEP_INTERVAL); | ||||||
|  |             isShutterBitmapCopied = true; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onActivityResult(int requestCode, int resultCode, Intent data) { | ||||||
|  |         super.onActivityResult(requestCode, resultCode, data); | ||||||
|  |         if (requestCode == INTENT_CODE_PICK_IMAGE) { | ||||||
|  |             if (resultCode == Activity.RESULT_OK) { | ||||||
|  |                 cameraPageView.setVisibility(View.GONE); | ||||||
|  |                 resultPageView.setVisibility(View.VISIBLE); | ||||||
|  |                 Uri uri = data.getData(); | ||||||
|  |                 String path = getRealPathFromURI(this, uri); | ||||||
|  |                 Bitmap bitmap = decodeBitmap(path, 720, 1280); | ||||||
|  |                 picBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); | ||||||
|  |                 SystemClock.sleep(TIME_SLEEP_INTERVAL * 10); // 500ms | ||||||
|  |                 detail(picBitmap); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void toggleRealtimeStyle() { | ||||||
|  |         if (isRealtimeStatusRunning) { | ||||||
|  |             isRealtimeStatusRunning = false; | ||||||
|  |             realtimeToggleButton.setImageResource(R.drawable.realtime_stop_btn); | ||||||
|  |             svPreview.setOnTextureChangedListener(this); | ||||||
|  |             tvStatus.setVisibility(View.VISIBLE); | ||||||
|  |         } else { | ||||||
|  |             isRealtimeStatusRunning = true; | ||||||
|  |             realtimeToggleButton.setImageResource(R.drawable.realtime_start_btn); | ||||||
|  |             tvStatus.setVisibility(View.GONE); | ||||||
|  |             isShutterBitmapCopied = false; | ||||||
|  |             // Camera is still working but detecting loop is on pause. | ||||||
|  |             svPreview.setOnTextureChangedListener(new CameraSurfaceView.OnTextureChangedListener() { | ||||||
|  |                 @Override | ||||||
|  |                 public boolean onTextureChanged(Bitmap ARGB8888ImageBitmap) { | ||||||
|  |                     if (TYPE == BTN_SHUTTER) { | ||||||
|  |                         copyBitmapFromCamera(ARGB8888ImageBitmap); | ||||||
|  |                     } | ||||||
|  |                     return false; | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public boolean onTextureChanged(Bitmap ARGB8888ImageBitmap) { | ||||||
|  |         if (TYPE == BTN_SHUTTER) { | ||||||
|  |             copyBitmapFromCamera(ARGB8888ImageBitmap); | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         boolean modified = false; | ||||||
|  |         // TODO: 2022/12/20 | ||||||
|  | //        SegmentationResult result = new SegmentationResult(); | ||||||
|  | //        result.setCxxBufferFlag(true); | ||||||
|  | // | ||||||
|  |           //long tc = System.currentTimeMillis(); | ||||||
|  | //        predictor.predict(ARGB8888ImageBitmap, result); | ||||||
|  |           //timeElapsed += (System.currentTimeMillis() - tc); | ||||||
|  | // | ||||||
|  | //        Visualize.visSegmentation(ARGB8888ImageBitmap, result); | ||||||
|  | //        modified = result.initialized(); | ||||||
|  | // | ||||||
|  | //        result.releaseCxxBuffer(); | ||||||
|  |  | ||||||
|  | //        frameCounter++; | ||||||
|  | //        if (frameCounter >= 30) { | ||||||
|  | //            final int fps = (int) (1000 / (timeElapsed / 30)); | ||||||
|  | //            runOnUiThread(new Runnable() { | ||||||
|  | //                @SuppressLint("SetTextI18n") | ||||||
|  | //                public void run() { | ||||||
|  | //                    tvStatus.setText(Integer.toString(fps) + "fps"); | ||||||
|  | //                } | ||||||
|  | //            }); | ||||||
|  | //            frameCounter = 0; | ||||||
|  | //            timeElapsed = 0; | ||||||
|  | //        } | ||||||
|  |         return modified; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onResume() { | ||||||
|  |         super.onResume(); | ||||||
|  |         // Reload settings and re-initialize the predictor | ||||||
|  |         checkAndUpdateSettings(); | ||||||
|  |         // Open camera until the permissions have been granted | ||||||
|  |         if (!checkAllPermissions()) { | ||||||
|  |             svPreview.disableCamera(); | ||||||
|  |         } else { | ||||||
|  |             svPreview.enableCamera(); | ||||||
|  |         } | ||||||
|  |         svPreview.onResume(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onPause() { | ||||||
|  |         super.onPause(); | ||||||
|  |         svPreview.onPause(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onDestroy() { | ||||||
|  |         // TODO: 2022/12/20 | ||||||
|  | //        if (predictor != null) { | ||||||
|  | //            predictor.release(); | ||||||
|  | //        } | ||||||
|  |         super.onDestroy(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void initView() { | ||||||
|  |         TYPE = REALTIME_DETECT; | ||||||
|  |         CameraSurfaceView.EXPECTED_PREVIEW_WIDTH = 480; | ||||||
|  |         CameraSurfaceView.EXPECTED_PREVIEW_HEIGHT = 480; | ||||||
|  |         svPreview = (CameraSurfaceView) findViewById(R.id.sv_preview); | ||||||
|  |         svPreview.setOnTextureChangedListener(this); | ||||||
|  |         svPreview.switchCamera(); | ||||||
|  |  | ||||||
|  |         tvStatus = (TextView) findViewById(R.id.tv_status); | ||||||
|  |         btnSwitch = (ImageButton) findViewById(R.id.btn_switch); | ||||||
|  |         btnSwitch.setOnClickListener(this); | ||||||
|  |         btnShutter = (ImageButton) findViewById(R.id.btn_shutter); | ||||||
|  |         btnShutter.setOnClickListener(this); | ||||||
|  |         btnSettings = (ImageButton) findViewById(R.id.btn_settings); | ||||||
|  |         btnSettings.setOnClickListener(this); | ||||||
|  |         realtimeToggleButton = findViewById(R.id.realtime_toggle_btn); | ||||||
|  |         realtimeToggleButton.setOnClickListener(this); | ||||||
|  |         backInPreview = findViewById(R.id.back_in_preview); | ||||||
|  |         backInPreview.setOnClickListener(this); | ||||||
|  |         albumSelectButton = findViewById(R.id.album_select); | ||||||
|  |         albumSelectButton.setOnClickListener(this); | ||||||
|  |         cameraPageView = findViewById(R.id.camera_page); | ||||||
|  |         resultPageView = findViewById(R.id.result_page); | ||||||
|  |         resultImage = findViewById(R.id.result_image); | ||||||
|  |         backInResult = findViewById(R.id.back_in_result); | ||||||
|  |         backInResult.setOnClickListener(this); | ||||||
|  |         resultView = findViewById(R.id.result_list_view); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void detail(Bitmap bitmap) { | ||||||
|  |         // TODO: 2022/12/20 | ||||||
|  |         //predictor.predict(bitmap, true, 0.7f); | ||||||
|  |         resultImage.setImageBitmap(bitmap); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @SuppressLint("ApplySharedPref") | ||||||
|  |     public void initSettings() { | ||||||
|  |         SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); | ||||||
|  |         SharedPreferences.Editor editor = sharedPreferences.edit(); | ||||||
|  |         editor.clear(); | ||||||
|  |         editor.commit(); | ||||||
|  |         FaceAlignSettingsActivity.resetSettings(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void checkAndUpdateSettings() { | ||||||
|  |         if (FaceAlignSettingsActivity.checkAndUpdateSettings(this)) { | ||||||
|  |             String realModelDir = getCacheDir() + "/" + FaceAlignSettingsActivity.modelDir; | ||||||
|  |             Utils.copyDirectoryFromAssets(this, FaceAlignSettingsActivity.modelDir, realModelDir); | ||||||
|  |  | ||||||
|  |             String modelFile = realModelDir + "/" + "model.pdmodel"; | ||||||
|  |             String paramsFile = realModelDir + "/" + "model.pdiparams"; | ||||||
|  |             String configFile = realModelDir + "/" + "deploy.yaml"; | ||||||
|  |             RuntimeOption option = new RuntimeOption(); | ||||||
|  |             option.setCpuThreadNum(FaceAlignSettingsActivity.cpuThreadNum); | ||||||
|  |             option.setLitePowerMode(FaceAlignSettingsActivity.cpuPowerMode); | ||||||
|  |             if (Boolean.parseBoolean(FaceAlignSettingsActivity.enableLiteFp16)) { | ||||||
|  |                 option.enableLiteFp16(); | ||||||
|  |             } | ||||||
|  |             // TODO: 2022/12/20 | ||||||
|  |             //predictor.setIsVerticalScreen(true); | ||||||
|  |             //predictor.init(modelFile, paramsFile, configFile, option); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @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) { | ||||||
|  |             new AlertDialog.Builder(FaceAlignMainActivity.this) | ||||||
|  |                     .setTitle("Permission denied") | ||||||
|  |                     .setMessage("Click to force quit the app, then open Settings->Apps & notifications->Target " + | ||||||
|  |                             "App->Permissions to grant all of the permissions.") | ||||||
|  |                     .setCancelable(false) | ||||||
|  |                     .setPositiveButton("Exit", new DialogInterface.OnClickListener() { | ||||||
|  |                         @Override | ||||||
|  |                         public void onClick(DialogInterface dialog, int which) { | ||||||
|  |                             FaceAlignMainActivity.this.finish(); | ||||||
|  |                         } | ||||||
|  |                     }).show(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void requestAllPermissions() { | ||||||
|  |         ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, | ||||||
|  |                 Manifest.permission.CAMERA}, 0); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private boolean checkAllPermissions() { | ||||||
|  |         return ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED | ||||||
|  |                 && ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -0,0 +1,164 @@ | |||||||
|  | package com.baidu.paddle.fastdeploy.app.examples.facealign; | ||||||
|  |  | ||||||
|  | import android.annotation.SuppressLint; | ||||||
|  | import android.content.Context; | ||||||
|  | import android.content.SharedPreferences; | ||||||
|  | import android.os.Bundle; | ||||||
|  | import android.preference.EditTextPreference; | ||||||
|  | import android.preference.ListPreference; | ||||||
|  | import android.preference.PreferenceManager; | ||||||
|  | import android.support.v7.app.ActionBar; | ||||||
|  |  | ||||||
|  | import com.baidu.paddle.fastdeploy.app.examples.R; | ||||||
|  | import com.baidu.paddle.fastdeploy.ui.Utils; | ||||||
|  | import com.baidu.paddle.fastdeploy.ui.view.AppCompatPreferenceActivity; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | public class FaceAlignSettingsActivity extends AppCompatPreferenceActivity implements | ||||||
|  |         SharedPreferences.OnSharedPreferenceChangeListener { | ||||||
|  |     private static final String TAG = FaceAlignSettingsActivity.class.getSimpleName(); | ||||||
|  |  | ||||||
|  |     static public int selectedModelIdx = -1; | ||||||
|  |     static public String modelDir = ""; | ||||||
|  |     static public int cpuThreadNum = 2; | ||||||
|  |     static public String cpuPowerMode = ""; | ||||||
|  |     static public String enableLiteFp16 = "true"; | ||||||
|  |  | ||||||
|  |     ListPreference lpChoosePreInstalledModel = null; | ||||||
|  |     EditTextPreference etModelDir = null; | ||||||
|  |     ListPreference lpCPUThreadNum = null; | ||||||
|  |     ListPreference lpCPUPowerMode = null; | ||||||
|  |     ListPreference lpEnableLiteFp16 = null; | ||||||
|  |  | ||||||
|  |     List<String> preInstalledModelDirs = null; | ||||||
|  |     List<String> preInstalledCPUThreadNums = null; | ||||||
|  |     List<String> preInstalledCPUPowerModes = null; | ||||||
|  |     List<String> preInstalledEnableLiteFp16s = null; | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void onCreate(Bundle savedInstanceState) { | ||||||
|  |         super.onCreate(savedInstanceState); | ||||||
|  |         addPreferencesFromResource(R.xml.face_align_settings); | ||||||
|  |         ActionBar supportActionBar = getSupportActionBar(); | ||||||
|  |         if (supportActionBar != null) { | ||||||
|  |             supportActionBar.setDisplayHomeAsUpEnabled(true); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Initialize pre-installed models | ||||||
|  |         preInstalledModelDirs = new ArrayList<String>(); | ||||||
|  |         preInstalledCPUThreadNums = new ArrayList<String>(); | ||||||
|  |         preInstalledCPUPowerModes = new ArrayList<String>(); | ||||||
|  |         preInstalledEnableLiteFp16s = new ArrayList<String>(); | ||||||
|  |         preInstalledModelDirs.add(getString(R.string.FACE_ALIGN_MODEL_DIR_DEFAULT)); | ||||||
|  |         preInstalledCPUThreadNums.add(getString(R.string.CPU_THREAD_NUM_DEFAULT)); | ||||||
|  |         preInstalledCPUPowerModes.add(getString(R.string.CPU_POWER_MODE_DEFAULT)); | ||||||
|  |         preInstalledEnableLiteFp16s.add(getString(R.string.ENABLE_LITE_FP16_MODE_DEFAULT)); | ||||||
|  |  | ||||||
|  |         // Setup UI components | ||||||
|  |         lpChoosePreInstalledModel = | ||||||
|  |                 (ListPreference) findPreference(getString(R.string.CHOOSE_PRE_INSTALLED_MODEL_KEY)); | ||||||
|  |         String[] preInstalledModelNames = new String[preInstalledModelDirs.size()]; | ||||||
|  |         for (int i = 0; i < preInstalledModelDirs.size(); i++) { | ||||||
|  |             preInstalledModelNames[i] = preInstalledModelDirs.get(i).substring(preInstalledModelDirs.get(i).lastIndexOf("/") + 1); | ||||||
|  |         } | ||||||
|  |         lpChoosePreInstalledModel.setEntries(preInstalledModelNames); | ||||||
|  |         lpChoosePreInstalledModel.setEntryValues(preInstalledModelDirs.toArray(new String[preInstalledModelDirs.size()])); | ||||||
|  |         lpCPUThreadNum = (ListPreference) findPreference(getString(R.string.CPU_THREAD_NUM_KEY)); | ||||||
|  |         lpCPUPowerMode = (ListPreference) findPreference(getString(R.string.CPU_POWER_MODE_KEY)); | ||||||
|  |         etModelDir = (EditTextPreference) findPreference(getString(R.string.MODEL_DIR_KEY)); | ||||||
|  |         etModelDir.setTitle("Model dir (SDCard: " + Utils.getSDCardDirectory() + ")"); | ||||||
|  |         lpEnableLiteFp16 = (ListPreference) findPreference(getString(R.string.ENABLE_LITE_FP16_MODE_KEY)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @SuppressLint("ApplySharedPref") | ||||||
|  |     private void reloadSettingsAndUpdateUI() { | ||||||
|  |         SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences(); | ||||||
|  |  | ||||||
|  |         String selected_model_dir = sharedPreferences.getString(getString(R.string.CHOOSE_PRE_INSTALLED_MODEL_KEY), | ||||||
|  |                 getString(R.string.FACE_ALIGN_MODEL_DIR_DEFAULT)); | ||||||
|  |         int selected_model_idx = lpChoosePreInstalledModel.findIndexOfValue(selected_model_dir); | ||||||
|  |         if (selected_model_idx >= 0 && selected_model_idx < preInstalledModelDirs.size() && selected_model_idx != selectedModelIdx) { | ||||||
|  |             SharedPreferences.Editor editor = sharedPreferences.edit(); | ||||||
|  |             editor.putString(getString(R.string.MODEL_DIR_KEY), preInstalledModelDirs.get(selected_model_idx)); | ||||||
|  |             editor.putString(getString(R.string.CPU_THREAD_NUM_KEY), preInstalledCPUThreadNums.get(selected_model_idx)); | ||||||
|  |             editor.putString(getString(R.string.CPU_POWER_MODE_KEY), preInstalledCPUPowerModes.get(selected_model_idx)); | ||||||
|  |             editor.putString(getString(R.string.ENABLE_LITE_FP16_MODE_DEFAULT), preInstalledEnableLiteFp16s.get(selected_model_idx)); | ||||||
|  |             editor.commit(); | ||||||
|  |             lpChoosePreInstalledModel.setSummary(selected_model_dir); | ||||||
|  |             selectedModelIdx = selected_model_idx; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         String model_dir = sharedPreferences.getString(getString(R.string.MODEL_DIR_KEY), | ||||||
|  |                 getString(R.string.FACE_ALIGN_MODEL_DIR_DEFAULT)); | ||||||
|  |         String cpu_thread_num = sharedPreferences.getString(getString(R.string.CPU_THREAD_NUM_KEY), | ||||||
|  |                 getString(R.string.CPU_THREAD_NUM_DEFAULT)); | ||||||
|  |         String cpu_power_mode = sharedPreferences.getString(getString(R.string.CPU_POWER_MODE_KEY), | ||||||
|  |                 getString(R.string.CPU_POWER_MODE_DEFAULT)); | ||||||
|  |         String enable_lite_fp16 = sharedPreferences.getString(getString(R.string.ENABLE_LITE_FP16_MODE_KEY), | ||||||
|  |                 getString(R.string.ENABLE_LITE_FP16_MODE_DEFAULT)); | ||||||
|  |  | ||||||
|  |         etModelDir.setSummary(model_dir); | ||||||
|  |         lpCPUThreadNum.setValue(cpu_thread_num); | ||||||
|  |         lpCPUThreadNum.setSummary(cpu_thread_num); | ||||||
|  |         lpCPUPowerMode.setValue(cpu_power_mode); | ||||||
|  |         lpCPUPowerMode.setSummary(cpu_power_mode); | ||||||
|  |         lpEnableLiteFp16.setValue(enable_lite_fp16); | ||||||
|  |         lpEnableLiteFp16.setSummary(enable_lite_fp16); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     static boolean checkAndUpdateSettings(Context ctx) { | ||||||
|  |         boolean settingsChanged = false; | ||||||
|  |         SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx); | ||||||
|  |  | ||||||
|  |         String model_dir = sharedPreferences.getString(ctx.getString(R.string.MODEL_DIR_KEY), | ||||||
|  |                 ctx.getString(R.string.FACE_ALIGN_MODEL_DIR_DEFAULT)); | ||||||
|  |         settingsChanged |= !modelDir.equalsIgnoreCase(model_dir); | ||||||
|  |         modelDir = model_dir; | ||||||
|  |  | ||||||
|  |         String cpu_thread_num = sharedPreferences.getString(ctx.getString(R.string.CPU_THREAD_NUM_KEY), | ||||||
|  |                 ctx.getString(R.string.CPU_THREAD_NUM_DEFAULT)); | ||||||
|  |         settingsChanged |= cpuThreadNum != Integer.parseInt(cpu_thread_num); | ||||||
|  |         cpuThreadNum = Integer.parseInt(cpu_thread_num); | ||||||
|  |  | ||||||
|  |         String cpu_power_mode = sharedPreferences.getString(ctx.getString(R.string.CPU_POWER_MODE_KEY), | ||||||
|  |                 ctx.getString(R.string.CPU_POWER_MODE_DEFAULT)); | ||||||
|  |         settingsChanged |= !cpuPowerMode.equalsIgnoreCase(cpu_power_mode); | ||||||
|  |         cpuPowerMode = cpu_power_mode; | ||||||
|  |  | ||||||
|  |         String enable_lite_fp16 = sharedPreferences.getString(ctx.getString(R.string.ENABLE_LITE_FP16_MODE_KEY), | ||||||
|  |                 ctx.getString(R.string.ENABLE_LITE_FP16_MODE_DEFAULT)); | ||||||
|  |         settingsChanged |= !enableLiteFp16.equalsIgnoreCase(enable_lite_fp16); | ||||||
|  |         enableLiteFp16 = enable_lite_fp16; | ||||||
|  |  | ||||||
|  |         return settingsChanged; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     static void resetSettings() { | ||||||
|  |         selectedModelIdx = -1; | ||||||
|  |         modelDir = ""; | ||||||
|  |         cpuThreadNum = 2; | ||||||
|  |         cpuPowerMode = ""; | ||||||
|  |         enableLiteFp16 = "true"; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onResume() { | ||||||
|  |         super.onResume(); | ||||||
|  |         getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); | ||||||
|  |         reloadSettingsAndUpdateUI(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     protected void onPause() { | ||||||
|  |         super.onPause(); | ||||||
|  |         getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { | ||||||
|  |         reloadSettingsAndUpdateUI(); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,31 @@ | |||||||
|  | package com.baidu.paddle.fastdeploy.app.examples.facealign; | ||||||
|  |  | ||||||
|  | import android.app.Activity; | ||||||
|  | import android.content.Intent; | ||||||
|  | import android.graphics.Color; | ||||||
|  | import android.os.Build; | ||||||
|  | import android.os.Bundle; | ||||||
|  | import android.support.annotation.Nullable; | ||||||
|  | import android.view.View; | ||||||
|  |  | ||||||
|  | import com.baidu.paddle.fastdeploy.app.examples.R; | ||||||
|  | import com.baidu.paddle.fastdeploy.app.examples.segmentation.SegmentationMainActivity; | ||||||
|  |  | ||||||
|  | public class FaceAlignWelcomeActivity extends Activity { | ||||||
|  |     @Override | ||||||
|  |     protected void onCreate(@Nullable Bundle savedInstanceState) { | ||||||
|  |         super.onCreate(savedInstanceState); | ||||||
|  |         if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { | ||||||
|  |             getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | ||||||
|  |                     | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | ||||||
|  |             ); | ||||||
|  |             getWindow().setStatusBarColor(Color.TRANSPARENT); | ||||||
|  |         } | ||||||
|  |         setContentView(R.layout.face_align_welcome); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void startActivity(View view) { | ||||||
|  |         Intent intent = new Intent(FaceAlignWelcomeActivity.this, FaceAlignMainActivity.class); | ||||||
|  |         startActivity(intent); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,14 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:layout_width="match_parent" | ||||||
|  |     android:layout_height="match_parent"> | ||||||
|  |  | ||||||
|  |     <include | ||||||
|  |         layout="@layout/face_align_camera_page" | ||||||
|  |         android:id="@+id/camera_page"></include> | ||||||
|  |  | ||||||
|  |     <include | ||||||
|  |         layout="@layout/face_align_result_page" | ||||||
|  |         android:id="@+id/result_page" | ||||||
|  |         android:visibility="gone"></include> | ||||||
|  | </FrameLayout> | ||||||
							
								
								
									
										159
									
								
								java/android/app/src/main/res/layout/face_align_camera_page.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								java/android/app/src/main/res/layout/face_align_camera_page.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,159 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     xmlns:app="http://schemas.android.com/apk/res-auto" | ||||||
|  |     xmlns:tools="http://schemas.android.com/tools" | ||||||
|  |     android:layout_width="match_parent" | ||||||
|  |     android:layout_height="match_parent" | ||||||
|  |     android:keepScreenOn="true" | ||||||
|  |     tools:context=".segmentation.SegmentationMainActivity"> | ||||||
|  |  | ||||||
|  |     <RelativeLayout | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent" | ||||||
|  |         android:background="@color/colorWindow"> | ||||||
|  |  | ||||||
|  |         <com.baidu.paddle.fastdeploy.ui.layout.ActionBarLayout | ||||||
|  |             android:id="@+id/action_bar_main" | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="wrap_content"/> | ||||||
|  |  | ||||||
|  |         <ImageView | ||||||
|  |             android:id="@+id/back_in_preview" | ||||||
|  |             android:layout_width="wrap_content" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:cropToPadding="true" | ||||||
|  |             android:paddingLeft="40px" | ||||||
|  |             android:paddingTop="60px" | ||||||
|  |             android:paddingRight="60px" | ||||||
|  |             android:paddingBottom="40px" | ||||||
|  |             android:src="@drawable/back_btn" /> | ||||||
|  |  | ||||||
|  |         <LinearLayout | ||||||
|  |             android:layout_width="wrap_content" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_centerHorizontal="true" | ||||||
|  |             android:layout_marginTop="50px" | ||||||
|  |             android:orientation="horizontal"> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                 android:id="@+id/action_takepicture_btn" | ||||||
|  |                 style="@style/action_btn_selected" | ||||||
|  |                 android:layout_width="300px" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:text="@string/action_bar_take_photo" | ||||||
|  |                 android:textAlignment="center" | ||||||
|  |                 android:visibility="gone" /> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                 android:id="@+id/action_realtime_btn" | ||||||
|  |                 style="@style/action_btn" | ||||||
|  |                 android:layout_width="wrap_content" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:text="@string/action_bar_realtime" | ||||||
|  |                 android:textAlignment="center" /> | ||||||
|  |         </LinearLayout> | ||||||
|  |  | ||||||
|  |         <com.baidu.paddle.fastdeploy.ui.view.CameraSurfaceView | ||||||
|  |             android:id="@+id/sv_preview" | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="match_parent" | ||||||
|  |             android:layout_above="@+id/contral" | ||||||
|  |             android:layout_below="@+id/action_bar_main" | ||||||
|  |             android:layout_centerInParent="true" /> | ||||||
|  |  | ||||||
|  |         <ImageView | ||||||
|  |             android:id="@+id/album_select" | ||||||
|  |             android:layout_width="40dp" | ||||||
|  |             android:layout_height="40dp" | ||||||
|  |             android:layout_alignParentRight="true" | ||||||
|  |             android:layout_alignParentBottom="true" | ||||||
|  |             android:layout_marginRight="20dp" | ||||||
|  |             android:layout_marginBottom="145dp" | ||||||
|  |             android:background="@drawable/album_btn" | ||||||
|  |             android:scaleType="fitXY" /> | ||||||
|  |  | ||||||
|  |         <TextView | ||||||
|  |             android:id="@+id/tv_status" | ||||||
|  |             android:layout_width="wrap_content" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_alignParentRight="true" | ||||||
|  |             android:layout_marginTop="60dp" | ||||||
|  |             android:layout_marginRight="30dp" | ||||||
|  |             android:textColor="@color/colorText" | ||||||
|  |             android:textSize="@dimen/small_font_size" /> | ||||||
|  |  | ||||||
|  |         <RelativeLayout | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="@dimen/top_bar_height" | ||||||
|  |             android:layout_alignParentTop="true" | ||||||
|  |             android:background="@color/colorTopBar"> | ||||||
|  |  | ||||||
|  |             <ImageButton | ||||||
|  |                 android:id="@+id/btn_settings" | ||||||
|  |                 android:layout_width="30dp" | ||||||
|  |                 android:layout_height="30dp" | ||||||
|  |                 android:layout_alignParentRight="true" | ||||||
|  |                 android:layout_centerVertical="true" | ||||||
|  |                 android:layout_marginRight="10dp" | ||||||
|  |                 android:background="@null" | ||||||
|  |                 android:scaleType="fitXY" | ||||||
|  |                 android:src="@drawable/btn_settings" /> | ||||||
|  |  | ||||||
|  |         </RelativeLayout> | ||||||
|  |  | ||||||
|  |         <LinearLayout | ||||||
|  |             android:id="@+id/contral" | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_alignParentBottom="true" | ||||||
|  |             android:background="@color/colorBottomBar" | ||||||
|  |             android:orientation="vertical"> | ||||||
|  |  | ||||||
|  |             <LinearLayout | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="@dimen/bottom_bar_top_margin" | ||||||
|  |                 android:orientation="vertical"></LinearLayout> | ||||||
|  |  | ||||||
|  |             <RelativeLayout | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="@dimen/large_button_height"> | ||||||
|  |  | ||||||
|  |                 <ImageButton | ||||||
|  |                     android:id="@+id/btn_switch" | ||||||
|  |                     android:layout_width="60dp" | ||||||
|  |                     android:layout_height="60dp" | ||||||
|  |                     android:layout_alignParentLeft="true" | ||||||
|  |                     android:layout_centerVertical="true" | ||||||
|  |                     android:layout_marginLeft="60dp" | ||||||
|  |                     android:background="#00000000" | ||||||
|  |                     android:scaleType="fitXY" | ||||||
|  |                     android:src="@drawable/switch_side_btn" /> | ||||||
|  |  | ||||||
|  |                 <ImageButton | ||||||
|  |                     android:id="@+id/btn_shutter" | ||||||
|  |                     android:layout_width="@dimen/large_button_width" | ||||||
|  |                     android:layout_height="@dimen/large_button_height" | ||||||
|  |                     android:layout_centerInParent="true" | ||||||
|  |                     android:background="@null" | ||||||
|  |                     android:scaleType="fitXY" | ||||||
|  |                     android:src="@drawable/take_picture_btn" /> | ||||||
|  |  | ||||||
|  |                 <ImageView | ||||||
|  |                     android:id="@+id/realtime_toggle_btn" | ||||||
|  |                     android:layout_width="60dp" | ||||||
|  |                     android:layout_height="60dp" | ||||||
|  |                     android:layout_alignParentRight="true" | ||||||
|  |                     android:layout_centerVertical="true" | ||||||
|  |                     android:layout_marginRight="60dp" | ||||||
|  |                     android:scaleType="fitXY" | ||||||
|  |                     android:src="@drawable/realtime_stop_btn" /> | ||||||
|  |  | ||||||
|  |             </RelativeLayout> | ||||||
|  |  | ||||||
|  |             <LinearLayout | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="@dimen/bottom_bar_bottom_margin" | ||||||
|  |                 android:orientation="vertical"></LinearLayout> | ||||||
|  |         </LinearLayout> | ||||||
|  |     </RelativeLayout> | ||||||
|  | </android.support.constraint.ConstraintLayout> | ||||||
							
								
								
									
										160
									
								
								java/android/app/src/main/res/layout/face_align_result_page.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								java/android/app/src/main/res/layout/face_align_result_page.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,160 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:layout_width="match_parent" | ||||||
|  |     android:layout_height="match_parent"> | ||||||
|  |  | ||||||
|  |     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent" | ||||||
|  |         android:background="#FFFFFF" | ||||||
|  |         android:orientation="vertical"> | ||||||
|  |  | ||||||
|  |         <com.baidu.paddle.fastdeploy.ui.layout.ActionBarLayout | ||||||
|  |             android:id="@+id/action_bar_result" | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:orientation="horizontal"> | ||||||
|  |  | ||||||
|  |             <ImageView | ||||||
|  |                 android:id="@+id/back_in_result" | ||||||
|  |                 android:layout_width="wrap_content" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:cropToPadding="true" | ||||||
|  |                 android:paddingLeft="40px" | ||||||
|  |                 android:paddingTop="60px" | ||||||
|  |                 android:paddingRight="60px" | ||||||
|  |                 android:paddingBottom="40px" | ||||||
|  |                 android:src="@drawable/back_btn" /> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                 android:id="@+id/model_name" | ||||||
|  |                 android:layout_width="wrap_content" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_centerHorizontal="true" | ||||||
|  |                 android:layout_marginTop="50px" | ||||||
|  |                 android:textColor="@color/textColor" | ||||||
|  |                 android:textSize="@dimen/action_btn_text_size" /> | ||||||
|  |         </com.baidu.paddle.fastdeploy.ui.layout.ActionBarLayout> | ||||||
|  |  | ||||||
|  |         <FrameLayout | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="700px"> | ||||||
|  |  | ||||||
|  |             <ImageView | ||||||
|  |                 android:id="@+id/result_image" | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="match_parent" | ||||||
|  |                 android:background="@color/bk_result_image_padding" /> | ||||||
|  |  | ||||||
|  |         </FrameLayout> | ||||||
|  |  | ||||||
|  |         <TextView | ||||||
|  |             android:layout_width="wrap_content" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_marginLeft="40px" | ||||||
|  |             android:layout_marginTop="26px" | ||||||
|  |             android:layout_marginBottom="20px" | ||||||
|  |             android:text="@string/result_label" | ||||||
|  |             android:textColor="@color/bk_black" | ||||||
|  |             android:textSize="56px" | ||||||
|  |             android:visibility="visible" /> | ||||||
|  |  | ||||||
|  |         <LinearLayout | ||||||
|  |             android:id="@+id/result_seekbar_section" | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="130px" | ||||||
|  |             android:layout_marginLeft="@dimen/result_list_padding_lr" | ||||||
|  |             android:layout_marginRight="@dimen/result_list_padding_lr" | ||||||
|  |             android:layout_marginBottom="@dimen/result_list_gap_width" | ||||||
|  |             android:background="@drawable/result_page_border_section_bk" | ||||||
|  |             android:visibility="gone"> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                 android:layout_width="wrap_content" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_gravity="center_vertical" | ||||||
|  |                 android:layout_weight="2" | ||||||
|  |                 android:paddingLeft="30px" | ||||||
|  |                 android:text="@string/result_table_header_confidence" | ||||||
|  |                 android:textColor="@color/table_result_tableheader_text_color" | ||||||
|  |                 android:textSize="@dimen/result_list_view_text_size" /> | ||||||
|  |  | ||||||
|  |             <SeekBar | ||||||
|  |                 android:id="@+id/confidence_seekbar" | ||||||
|  |                 android:layout_width="220dp" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_gravity="center_vertical" | ||||||
|  |                 android:layout_weight="6" | ||||||
|  |                 android:focusable="false" | ||||||
|  |                 android:maxHeight="8px" | ||||||
|  |                 android:progressDrawable="@drawable/seekbar_progress_result" | ||||||
|  |                 android:splitTrack="false" | ||||||
|  |                 android:thumb="@drawable/seekbar_handle" /> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                 android:id="@+id/seekbar_text" | ||||||
|  |                 android:layout_width="wrap_content" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_gravity="center_vertical" | ||||||
|  |                 android:layout_weight="1" | ||||||
|  |                 android:paddingRight="30px" | ||||||
|  |                 android:textSize="@dimen/result_list_view_text_size" | ||||||
|  |  | ||||||
|  |                 /> | ||||||
|  |         </LinearLayout> | ||||||
|  |  | ||||||
|  |         <LinearLayout | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_marginLeft="@dimen/result_list_padding_lr" | ||||||
|  |             android:layout_marginRight="@dimen/result_list_padding_lr" | ||||||
|  |             android:layout_marginBottom="@dimen/result_list_gap_width" | ||||||
|  |             android:background="@drawable/result_page_border_section_bk" | ||||||
|  |             android:visibility="visible"> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                 style="@style/list_result_view_tablehead_style" | ||||||
|  |                 android:layout_width="wrap_content" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:text="@string/result_table_header_index" | ||||||
|  |                 android:textColor="@color/table_result_tableheader_text_color" /> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                 style="@style/list_result_view_tablehead_style" | ||||||
|  |                 android:layout_width="wrap_content" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:text="@string/result_table_header_name" | ||||||
|  |                 android:textColor="@color/table_result_tableheader_text_color" /> | ||||||
|  |  | ||||||
|  |             <TextView | ||||||
|  |                 style="@style/list_result_view_tablehead_style" | ||||||
|  |                 android:layout_width="wrap_content" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_weight="0.4" | ||||||
|  |                 android:gravity="right" | ||||||
|  |                 android:text="@string/result_table_header_confidence" | ||||||
|  |                 android:textColor="@color/table_result_tableheader_text_color" /> | ||||||
|  |         </LinearLayout> | ||||||
|  |  | ||||||
|  |         <FrameLayout | ||||||
|  |             android:layout_width="match_parent" | ||||||
|  |             android:layout_height="wrap_content"> | ||||||
|  |  | ||||||
|  |             <ScrollView | ||||||
|  |                 android:layout_width="match_parent" | ||||||
|  |                 android:layout_height="wrap_content" | ||||||
|  |                 android:layout_marginBottom="15px" | ||||||
|  |                 android:paddingLeft="@dimen/result_list_padding_lr" | ||||||
|  |                 android:paddingRight="@dimen/result_list_padding_lr"> | ||||||
|  |  | ||||||
|  |                 <com.baidu.paddle.fastdeploy.ui.view.ResultListView | ||||||
|  |                     android:id="@+id/result_list_view" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="700px" | ||||||
|  |                     android:divider="#FFFFFF" | ||||||
|  |                     android:dividerHeight="@dimen/result_list_gap_width"></com.baidu.paddle.fastdeploy.ui.view.ResultListView> | ||||||
|  |             </ScrollView> | ||||||
|  |  | ||||||
|  |         </FrameLayout> | ||||||
|  |     </LinearLayout> | ||||||
|  | </FrameLayout> | ||||||
							
								
								
									
										79
									
								
								java/android/app/src/main/res/layout/face_align_welcome.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								java/android/app/src/main/res/layout/face_align_welcome.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <FrameLayout | ||||||
|  |     xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:layout_width="match_parent" | ||||||
|  |     android:layout_height="match_parent"> | ||||||
|  |  | ||||||
|  |     <ImageView | ||||||
|  |         android:id="@+id/imageView" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent" | ||||||
|  |         android:scaleType="centerCrop" | ||||||
|  |         android:background="@drawable/main_bk" | ||||||
|  |         /> | ||||||
|  |  | ||||||
|  |     <RelativeLayout | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="match_parent"> | ||||||
|  |  | ||||||
|  |         <TextView | ||||||
|  |             android:id="@+id/model_text" | ||||||
|  |             android:layout_width="320dp" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_centerHorizontal="true" | ||||||
|  |             android:layout_marginTop="120dp" | ||||||
|  |             android:background="@color/colorStartBtn" | ||||||
|  |             android:gravity="center" | ||||||
|  |             android:text="FaceAlign" | ||||||
|  |             android:textColor="@color/colorTextWrite" | ||||||
|  |             android:textSize="30sp" /> | ||||||
|  |  | ||||||
|  |         <TextView | ||||||
|  |             android:id="@+id/baidu" | ||||||
|  |             android:layout_width="wrap_content" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_below="@id/model_text" | ||||||
|  |             android:layout_centerHorizontal="true" | ||||||
|  |             android:layout_marginTop="20dp" | ||||||
|  |             android:text="百度FastDeploy" | ||||||
|  |             android:textColor="@color/colorTextWrite" | ||||||
|  |             android:textSize="22sp" /> | ||||||
|  |  | ||||||
|  |         <TextView | ||||||
|  |             android:layout_width="wrap_content" | ||||||
|  |             android:layout_height="wrap_content" | ||||||
|  |             android:layout_below="@id/baidu" | ||||||
|  |             android:layout_centerHorizontal="true" | ||||||
|  |             android:layout_marginTop="10dp" | ||||||
|  |             android:text="Powered by EasyEdge" | ||||||
|  |             android:textColor="@color/colorTextWrite" | ||||||
|  |             android:textSize="18sp" /> | ||||||
|  |  | ||||||
|  |         <Button | ||||||
|  |  | ||||||
|  |             android:id="@+id/start_ui_activity" | ||||||
|  |             android:layout_width="200dp" | ||||||
|  |             android:layout_height="50dp" | ||||||
|  |             android:layout_alignParentBottom="true" | ||||||
|  |             android:layout_centerHorizontal="true" | ||||||
|  |             android:layout_marginBottom="70dp" | ||||||
|  |             android:background="@drawable/round_corner_btn" | ||||||
|  |             android:text="@string/start_ui_activity" | ||||||
|  |             android:textColor="@color/colorTextWrite" | ||||||
|  |             android:textSize="22sp" | ||||||
|  |             android:onClick="startActivity"/> | ||||||
|  |  | ||||||
|  |         <ImageView | ||||||
|  |             android:id="@+id/logo" | ||||||
|  |             android:layout_width="95dp" | ||||||
|  |             android:layout_height="30dp" | ||||||
|  |             android:layout_alignParentBottom="true" | ||||||
|  |             android:layout_centerHorizontal="true" | ||||||
|  |             android:layout_marginBottom="10dp" | ||||||
|  |             android:background="@drawable/paddle_logo" | ||||||
|  |             android:scaleType="centerCrop" /> | ||||||
|  |     </RelativeLayout> | ||||||
|  | </FrameLayout> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -41,6 +41,8 @@ | |||||||
|     <string name="FACEDET_MODEL_DIR_DEFAULT">models/scrfd_500m_bnkps_shape320x320_pd</string> |     <string name="FACEDET_MODEL_DIR_DEFAULT">models/scrfd_500m_bnkps_shape320x320_pd</string> | ||||||
|     <!-- segmentation values ... --> |     <!-- segmentation values ... --> | ||||||
|     <string name="SEGMENTATION_MODEL_DIR_DEFAULT">models/portrait_pp_humansegv2_lite_256x144_inference_model</string> |     <string name="SEGMENTATION_MODEL_DIR_DEFAULT">models/portrait_pp_humansegv2_lite_256x144_inference_model</string> | ||||||
|  |     <!-- face align values ... --> | ||||||
|  |     <string name="FACE_ALIGN_MODEL_DIR_DEFAULT">models</string> | ||||||
|     <!-- keypointdetection values   --> |     <!-- keypointdetection values   --> | ||||||
|     <string name="KEYPOINT_DETECTION_MODEL_DIR_DEFAULT">models/PP_TinyPose_128x96_infer</string> |     <string name="KEYPOINT_DETECTION_MODEL_DIR_DEFAULT">models/PP_TinyPose_128x96_infer</string> | ||||||
|     <string name="VOICE_ASSISTANT_MODEL_DIR_DEFAULT">models</string> |     <string name="VOICE_ASSISTANT_MODEL_DIR_DEFAULT">models</string> | ||||||
|   | |||||||
							
								
								
									
										37
									
								
								java/android/app/src/main/res/xml/face_align_settings.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								java/android/app/src/main/res/xml/face_align_settings.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|  |     <ListPreference | ||||||
|  |         android:defaultValue="@string/FACE_ALIGN_MODEL_DIR_DEFAULT" | ||||||
|  |         android:key="@string/CHOOSE_PRE_INSTALLED_MODEL_KEY" | ||||||
|  |         android:negativeButtonText="@null" | ||||||
|  |         android:positiveButtonText="@null" | ||||||
|  |         android:title="Choose Pre-Installed Models" /> | ||||||
|  |     <EditTextPreference | ||||||
|  |         android:defaultValue="@string/FACE_ALIGN_MODEL_DIR_DEFAULT" | ||||||
|  |         android:key="@string/MODEL_DIR_KEY" | ||||||
|  |         android:title="Model Dir" /> | ||||||
|  |     <ListPreference | ||||||
|  |         android:defaultValue="@string/CPU_THREAD_NUM_DEFAULT" | ||||||
|  |         android:entries="@array/cpu_thread_num_entries" | ||||||
|  |         android:entryValues="@array/cpu_thread_num_values" | ||||||
|  |         android:key="@string/CPU_THREAD_NUM_KEY" | ||||||
|  |         android:negativeButtonText="@null" | ||||||
|  |         android:positiveButtonText="@null" | ||||||
|  |         android:title="CPU Thread Num" /> | ||||||
|  |     <ListPreference | ||||||
|  |         android:defaultValue="@string/CPU_POWER_MODE_DEFAULT" | ||||||
|  |         android:entries="@array/cpu_power_mode_entries" | ||||||
|  |         android:entryValues="@array/cpu_power_mode_values" | ||||||
|  |         android:key="@string/CPU_POWER_MODE_KEY" | ||||||
|  |         android:negativeButtonText="@null" | ||||||
|  |         android:positiveButtonText="@null" | ||||||
|  |         android:title="CPU Power Mode" /> | ||||||
|  |     <ListPreference | ||||||
|  |         android:defaultValue="@string/ENABLE_LITE_FP16_MODE_DEFAULT" | ||||||
|  |         android:entries="@array/enable_lite_fp16_mode_entries" | ||||||
|  |         android:entryValues="@array/enable_lite_fp16_mode_values" | ||||||
|  |         android:key="@string/ENABLE_LITE_FP16_MODE_KEY" | ||||||
|  |         android:negativeButtonText="@null" | ||||||
|  |         android:positiveButtonText="@null" | ||||||
|  |         android:title="Enable Lite FP16" /> | ||||||
|  | </PreferenceScreen> | ||||||
		Reference in New Issue
	
	Block a user
	 Winter
					Winter