移植深度学习训练好的模型,第一步是可以使用安卓手机的相机进行拍照或者访问相册进行图片选择。第二步,调用模型,进行结果显示。现在记录第一步的代码实现。
我的界面有三个,第一个是MainActivity,第二个是Camera拍照的显示,第三个是Albums的显示。
结构介绍
1.activity_main.xml和MainActivity.java介绍
1.1.activity_main.xml代码
首先是activity_main.xml,主要有3个控件,但是第三个ImageView控件这里没有使用,界面图下图所示
详细代码如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity">
<Button
android:id="@+id/take_photo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="拍照"
android:textSize="20dp" />
<Button
android:id="@+id/choose_from_album"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="相册"
android:layout_below="@+id/take_photo"
android:textSize="20dp"
/>
<ImageView
android:id="@+id/picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_below="@+id/choose_from_album"
android:layout_marginTop="20dp" />
</RelativeLayout>
1.2.MainActivity.java代码及介绍
MainActivity.java代码如下所示:我的主界面主要功能比较简单,就是在拍照和相册按钮中添加响应,然后跳转到相应的显示界面
package com.example.mycamera;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
public static final int TAKE_PHOTO = 1;
public static final int CHOOSE_PHOTO = 2;
private ImageView picture;
private Intent intent1,intent2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button chooseFromAlbum = findViewById(R.id.choose_from_album);
chooseFromAlbum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, CHOOSE_PHOTO);
} else {
openAlbum();//打开album的界面
}
}
});
Button takePhoto = findViewById(R.id.take_photo);
picture = findViewById(R.id.picture);
takePhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 动态申请权限
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, TAKE_PHOTO);
} else {
// 启动相机程序
startCamera();
}
}
});
intent1=new Intent(this,Albums.class);//创建跳转到Albums显示的窗口的Intent
intent2=new Intent(this,Camera.class);//创建跳转到Camera显示的窗口的Intent
}
private void openAlbum() {
startActivity(intent1);//进入album的窗口界面
}
private void startCamera() {
startActivity(intent2);//进入camera的窗口界面
//Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
// 指定图片的输出地址为imageUri
//mPhotoPath = getSDPath()+"/"+ getPhotoFileName();//设置图片文件路径,getSDPath()和getPhotoFileName()具体实现在下面
//intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
//startActivityForResult(intent, TAKE_PHOTO);
}
}
2.albums.xml和Albums.java介绍以及添加方法介绍
albums界面的功能就是在MainActivity点击相册按钮时,查找本地的相册,然后显示选择的picture到ImageView控件,图片检测功能未添加,因为还没有载入模型,图片保存就是将ImageView控件中的图片保存到本地中。
2.1.albums.xml代码介绍和添加方法
添加方法如下图所示
albums.xml代码如下:主要有三个控件,图片检测和保存图像按钮,以及一个图片显示的ImageView