提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
这段时间公司的项目进行到了人脸检测的内容,因为刚实习还不精通,老板之说让我调出摄像头并且能够拍照就可以了,他的思路:每隔几秒钟客户端就自动拍照传递给后端,由后端判定人脸识别的信息。
一、获取权限
涉及到客户端的东西免不了需要向设备申请权限,因为项目需要做到拍照保存,所以我在AndroidManifest.xml中加入了申请权限的代码
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.any" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
但是在实验过程中却显示未授予权限的信息,于是在网上又找到了在代码中直接获取权限的方式:
private void checkPermission() {
// 直接获取应用的拍照和存储权限
ActivityCompat.requestPermissions(
getActivity(), new String[]{
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO
}, 123456789
//这个code我也不知道是什么东西,当初找资料的时候一并抄过来了
);
}
二、使用CameraX
1.导入依赖
代码如下:
def camerax_version = "1.2.0-rc01"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-view:${camerax_version}"
2.布局
代码如下(示例):
<androidx.camera.view.PreviewView
android:id="@+id/viewFinder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="10dp"
android:layout_marginHorizontal="40dp"
android:layout_marginVertical="60dp"
app:layout_constraintBottom_toBottomOf="@+id/login_hor_back"
app:layout_constraintEnd_toEndOf="@+id/login_hor_back"
app:layout_constraintStart_toStartOf="@+id/login_hor_back"
app:layout_constraintTop_toTopOf="@+id/login_hor_back" />
在写布局的时候遇到了一个问题,软件调用摄像头时页面会出现一条横线,后来经过指点发现是布局和设备不匹配的问题,原来的宽高是自定义宽高0dp根据其他控件位置来调整大小,改成全屏之后就没有那个问题了
3.具体代码
private