diff --git a/src/CameraAlbumTest.zip b/src/CameraAlbumTest.zip
new file mode 100644
index 0000000..cb599e2
Binary files /dev/null and b/src/CameraAlbumTest.zip differ
diff --git a/src/CameraAlbumTest/.idea/gradle.xml b/src/CameraAlbumTest/.idea/gradle.xml
index 40d01a4..5cd135a 100644
--- a/src/CameraAlbumTest/.idea/gradle.xml
+++ b/src/CameraAlbumTest/.idea/gradle.xml
@@ -11,7 +11,6 @@
-
diff --git a/src/CameraAlbumTest/.idea/vcs.xml b/src/CameraAlbumTest/.idea/vcs.xml
new file mode 100644
index 0000000..b2bdec2
--- /dev/null
+++ b/src/CameraAlbumTest/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/CameraAlbumTest/app/build.gradle b/src/CameraAlbumTest/app/build.gradle
index 70680ea..92d8f98 100644
--- a/src/CameraAlbumTest/app/build.gradle
+++ b/src/CameraAlbumTest/app/build.gradle
@@ -34,6 +34,7 @@ dependencies {
implementation 'com.google.android.material:material:1.2.1'
implementation 'com.google.code.gson:gson:2.8.8'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
+
// implementation project(path: ':opencv')
// implementation files('libs\\aip-java-sdk-4.16.16.jar')
// implementation files('libs\\json-20160810.jar')
@@ -42,7 +43,6 @@ dependencies {
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
-
-
+ implementation group: 'com.baidu.aip', name: 'java-sdk', version: '4.10.0'
}
\ No newline at end of file
diff --git a/src/CameraAlbumTest/app/src/main/AndroidManifest.xml b/src/CameraAlbumTest/app/src/main/AndroidManifest.xml
index 01a9cb4..a271ee2 100644
--- a/src/CameraAlbumTest/app/src/main/AndroidManifest.xml
+++ b/src/CameraAlbumTest/app/src/main/AndroidManifest.xml
@@ -3,6 +3,8 @@
package="com.example.cameraalbumtest">
+
+
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/AuthService.java b/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/AuthService.java
index 60b832c..73008d3 100644
--- a/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/AuthService.java
+++ b/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/AuthService.java
@@ -1,4 +1,6 @@
package com.example.cameraalbumtest;
+import android.util.Log;
+
import org.json.JSONObject;
import java.io.BufferedReader;
@@ -38,6 +40,7 @@ public class AuthService {
*/
public static String getAuth(String ak, String sk) {
// 获取token地址
+ Log.d("flag","11");
String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
String getAccessTokenUrl = authHost
// 1. grant_type为固定参数
@@ -47,17 +50,24 @@ public class AuthService {
// 3. 官网获取的 Secret Key
+ "&client_secret=" + sk;
try {
+ Log.d("flag","22");
URL realUrl = new URL(getAccessTokenUrl);
+ Log.d("flag","33");
// 打开和URL之间的连接
HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
+ Log.d("flag","44");
connection.setRequestMethod("GET");
+ Log.d("flag","55");
connection.connect();
+ Log.d("flag","66");
// 获取所有响应头字段
Map> map = connection.getHeaderFields();
+ Log.d("flag","77");
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.err.println(key + "--->" + map.get(key));
}
+ Log.d("flag","88");
// 定义 BufferedReader输入流来读取URL的响应
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String result = "";
@@ -71,6 +81,7 @@ public class AuthService {
System.err.println("result:" + result);
JSONObject jsonObject = new JSONObject(result);
String access_token = jsonObject.getString("access_token");
+
return access_token;
} catch (Exception e) {
System.err.printf("获取token失败!");
diff --git a/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/CameraActivity.java b/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/CameraActivity.java
index 82df42f..90b0e50 100644
--- a/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/CameraActivity.java
+++ b/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/CameraActivity.java
@@ -1,8 +1,11 @@
package com.example.cameraalbumtest;
+import android.Manifest;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Build;
@@ -15,18 +18,29 @@ import android.view.View;
import android.widget.Button;
import android.widget.Toast;
+import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
public class CameraActivity extends AppCompatActivity implements SurfaceHolder.Callback {
private Camera mCamera;
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
- private Uri imageUri;
+// private Uri imageUri;
+ private File storageDir;
+ private static final int REQUEST_CAMERA_PERMISSION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -36,11 +50,27 @@ public class CameraActivity extends AppCompatActivity implements SurfaceHolder.C
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
- Button takePhoto = (Button) findViewById(R.id.take_photo);
- takePhoto.setOnClickListener(new View.OnClickListener() {
+ requestCameraPermission();
+
+ //创建子目录
+// storageDir = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "FaceLab");
+// if (!storageDir.exists()) {
+// storageDir.mkdirs();
+// }
+
+ Button face_rec = (Button) findViewById(R.id.take_photo);
+ Button face_reg = (Button) findViewById(R.id.face_register);
+ face_rec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- takePhoto();
+ takePhoto(1);
+ }
+ });
+
+ face_reg.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ takePhoto(2);
}
});
}
@@ -65,8 +95,9 @@ public class CameraActivity extends AppCompatActivity implements SurfaceHolder.C
}
private void openCamera() {
+ releaseCamera();
try {
- mCamera = Camera.open();
+ mCamera = Camera.open(0);
} catch (Exception e) {
e.printStackTrace();
}
@@ -78,6 +109,7 @@ public class CameraActivity extends AppCompatActivity implements SurfaceHolder.C
Camera.Parameters parameters = mCamera.getParameters();
// 设置相机参数,例如对焦模式、预览大小等
// ...
+ mCamera.setDisplayOrientation(90);
mCamera.setParameters(parameters);
} catch (Exception e) {
e.printStackTrace();
@@ -103,72 +135,95 @@ public class CameraActivity extends AppCompatActivity implements SurfaceHolder.C
mCamera = null;
}
}
- private void takePhoto() {
+
+ private void takePhoto(int ACT_FLAG) {
if (mCamera != null) {
- mCamera.takePicture(null, null, new Camera.PictureCallback() {
- @Override
- public void onPictureTaken(byte[] data, Camera camera) {
- // 在这里处理拍照后的照片
-
- //人脸识别得到结果
- String ret = FaceRecognition.FaceRecognition(data);
- Log.d("ret",ret);
-
- //保存人脸库方法
- File storageDir = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "YourDirectoryName");
- if (!storageDir.exists()) {
- storageDir.mkdirs();
+ if(ACT_FLAG == 1) {
+ mCamera.takePicture(null, null, new Camera.PictureCallback() {
+ @Override
+ public void onPictureTaken(byte[] data, Camera camera) {
+ // 在这里处理拍照后的照片
+ // 拍照完成后,展示照片
+// Bitmap capturedBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
+// Canvas canvas = mSurfaceHolder.lockCanvas();
+// canvas.drawBitmap(capturedBitmap, 0, 0, null);
+// mSurfaceHolder.unlockCanvasAndPost(canvas);
+
+ //人脸识别得到结果
+ FaceRecognitionTask.FaceRecognition(data,CameraActivity.this);
+// //识别成功则
+ }
+ });
+ } else {
+ mCamera.takePicture(null, null, new Camera.PictureCallback() {
+ @Override
+ public void onPictureTaken(byte[] data, Camera camera) {
+ // 在这里处理拍照后的照片
+ // 拍照完成后,展示照片
+// Bitmap capturedBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
+// Canvas canvas = mSurfaceHolder.lockCanvas();
+// canvas.drawBitmap(capturedBitmap, 0, 0, null);
+// mSurfaceHolder.unlockCanvasAndPost(canvas);
+
+ //人脸注册得到结果
+ FaceRegisterTask.FaceRegister(data,CameraActivity.this);
+// //识别成功则
+
+ startPreview();
}
+ });
+ }
+ }
+ }
-// Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
-// faceRecognition.detectFaces(bitmap, new FaceDetectionListener() {
-// @Override
-// public void onFaceDetected(boolean hasFace) {
-// // 处理人脸检测结果
-// if (hasFace) {
-// // 有人脸
-// } else {
-// // 无人脸
-// Toast.makeText(CameraActivity.this, "未检测到人脸,请重新拍照", Toast.LENGTH_SHORT).show();
-// }
-// }
-// });
-
- savePhoto(data);
- startPreview(); // 拍照完成后重新启动预览
- }
- });
+// private void savePhoto(byte[] data) {
+// FileOutputStream outputStream = null;
+// try {
+// // 以时间戳为文件名
+// String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
+// String imageFileName = "IMG_" + timeStamp + ".jpg";
+//
+// // 创建文件路径
+// File imageFile = new File(storageDir, imageFileName);
+// Log.d("path",storageDir.toString());
+// outputStream= new FileOutputStream(imageFile);
+// outputStream.write(data);
+// outputStream.flush();
+//
+// Toast.makeText(this, "照片保存成功", Toast.LENGTH_SHORT).show();
+// } catch (IOException e) {
+// e.printStackTrace();
+// // 保存失败,可以进行相应的提示或其他处理
+// Toast.makeText(this, "照片保存失败", Toast.LENGTH_SHORT).show();
+// } finally {
+// // 关闭输出流
+// if (outputStream != null) {
+// try {
+// outputStream.close();
+// } catch (IOException e) {
+// e.printStackTrace();
+// }
+// }
+// }
+// }
+
+ private void requestCameraPermission() {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
+ != PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(this,
+ new String[]{Manifest.permission.CAMERA},
+ REQUEST_CAMERA_PERMISSION);
}
}
- private void savePhoto(byte[] data) {
- OutputStream outputStream = null;
- try {
- File cacheDir = getCacheDir(); // 获取应用的缓存目录
- File imagePath = new File(cacheDir, "output_image.jpg"); // 在缓存目录下创建文件
- imageUri = Uri.fromFile(imagePath); // 将文件路径转换为Uri
-
- Log.d("path",imageUri.toString());
- // 创建一个文件输出流,指定保存路径
- outputStream = new FileOutputStream(imageUri.getPath());
- // 将字节数组写入文件输出流
- outputStream.write(data);
- // 刷新输出流
- outputStream.flush();
- // 保存成功,可以进行相应的提示或其他处理
- Toast.makeText(this, "照片保存成功", Toast.LENGTH_SHORT).show();
- } catch (IOException e) {
- e.printStackTrace();
- // 保存失败,可以进行相应的提示或其他处理
- Toast.makeText(this, "照片保存失败", Toast.LENGTH_SHORT).show();
- } finally {
- // 关闭输出流
- if (outputStream != null) {
- try {
- outputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ if (requestCode == REQUEST_CAMERA_PERMISSION) {
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ // 用户授予了相机权限
+ } else {
+ // 用户拒绝了相机权限
+ Toast.makeText(this, "相机权限被拒绝", Toast.LENGTH_SHORT).show();
}
}
}
diff --git a/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/FaceRecognition.java b/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/FaceRecognition.java
index fe3c91c..8f87904 100644
--- a/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/FaceRecognition.java
+++ b/src/CameraAlbumTest/app/src/main/java/com/example/cameraalbumtest/FaceRecognition.java
@@ -1,60 +1,109 @@
-package com.example.cameraalbumtest;
-
-import com.example.cameraalbumtest.HttpUtil;
-import com.example.cameraalbumtest.GsonUtils;
-import com.example.cameraalbumtest.FileUtil;
-
-import java.util.*;
-
-/**
- * 人脸对比
- */
-public class FaceRecognition {
-
- /**
- * 重要提示代码中所需工具类
- * FileUtil,Base64Util,HttpUtil,GsonUtils请从
- * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
- * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
- * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
- * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
- * 下载
- */
- public static String FaceRecognition(byte[] data) {
- // 请求url
- String url = "https://aip.baidubce.com/rest/2.0/face/v3/match";
- try {
- List