目录
效果图
引言
效果图是在模拟器上运行的,调用相机的时候是调用的电脑上的相机,所以我选择的是实时截取屏幕,随便选了一个图片,然后就是关于这个智能识别,毕竟是调用的百度的API,所以…注意保密性…百度后台应该是能看到拍的图片的。结果返回的是一个Json字符串我就没有去处理它了,然后朋友帮我处理了一下…
处理后的效果
步骤
- 首先是调用相机
- 然后将得到的图片显示在Activity上
- 再然后就是调用百度智能云的API处理图片,当然第三步和第二步是同时处理的
- 最后就是想结果显示到Activity上
调用相机
- 先在AndroidManifest.xml里面添加一些配置信息
添加权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在< application></ application>标签里面添加相机内容提供者
<!-- 为调用相机拍照设置内容提供者 -->
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.mydemo.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
tools:ignore="WrongManifestParent">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
并在< activity></ activity>里面添加
- 然后就是通过按钮点击调用相机,并且将图片传到相应Activity显示
public class capture extends AppCompatActivity {
public static final int TAKE_PHOTO = 1;//声明一个请求码,用于识别返回的结果
private Uri imageUri;
private final String filePath = getExternalFilesDir(null) + File.separator + "output_image.jpg";//根目录下
//Environment.getExternalStorageDirectory();这个方法已经废弃,上一行代码的替换没测试过是否成功
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_capture);
//点击事件进行拍照
Button takephoto = findViewById(R.id.take_photo);
textView = findViewById(R.id.textView);
takephoto.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//动态请求相机权限
requestPermission(); //在其中若用户给予权限则请求相机拍照
}
});
//设置默认图片
setDefualtImage();
}
//动态请求权限
private void requestPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
//请求权限
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, 1);
} else {
//调用
requestCamera();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode