赞
踩
所需jar包下载 Msc.jar、Sunflower.jar和qcloud_fr_android_sdk.jar sun.misc.BASE64Decoder.jar
和用到的工具类、常量类
https://pan.baidu.com/s/14Dq7rLvLLE08jTwHCur2iw
圆形人脸检测框效果和功能实现 ,参照我的另一篇博客
https://blog.csdn.net/baidu_35824246/article/details/83420579
检测功能
- // package 包名;
-
- import android.app.ProgressDialog;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.PixelFormat;
- import android.graphics.Point;
- import android.graphics.PorterDuff;
- import android.hardware.Camera.CameraInfo;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.os.Environment;
- import android.os.Handler;
- import android.os.Message;
- import android.support.v4.app.Fragment;
- import android.util.DisplayMetrics;
- import android.view.LayoutInflater;
- import android.view.SurfaceView;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.RelativeLayout;
- import android.widget.RelativeLayout.LayoutParams;
- import android.widget.TextView;
-
- import com.android.volley.VolleyError;
- import com.iflytek.cloud.FaceDetector;
- import com.iflytek.cloud.util.Accelerometer;
- import com.rihui.ecar_travel_driver.R;
-
- // import 包名.BaseVolleyListenerInterface;
- // import 包名.MultipartRequestUpload;
- // import 包名.VolleyRequestUtil;
- // import 包名.LocationApplication;
-
- import org.json.JSONException;
- import org.json.JSONObject;
-
- import java.io.File;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Timer;
- import java.util.TimerTask;
-
- import Decoder.BASE64Encoder;
-
- /**
- * 讯飞人脸识别
- */
- public class FaceFragment extends Fragment implements HttpUtils.HttpListener {
- /**
- * Camera nv21格式预览帧的尺寸,默认设置640*480
- */
- private int previewWidth = 640;
- private int previewHeight = 480;
- /**
- * 预览帧数据存储数组和缓存数组
- */
- private byte[] nv21;
- private byte[] buffer;
- /**
- * FaceDetector对象,集成了离线人脸识别:人脸检测、视频流检测功能
- */
- private FaceDetector mFaceDetector;
- /**
- * Canvas 画布类
- */
- private Canvas mCanvas;
- /**
- * 手机加速度感应器,用于获取手机的朝向
- */
- private Accelerometer mAcceler;
- /**
- * 是否停止检测 true停止检测 false开启监测
- */
- private boolean mStopTrack;
- /**
- * 是否显示聚焦点 0不显示 1显示
- */
- private int isAlign = 1;
- /**
- * 拍照id
- */
- protected int mCameraId = CameraInfo.CAMERA_FACING_FRONT;
- /**
- * 是否张嘴 false否 true是
- */
- private boolean isOpenMouth = false;
- /**
- * 是否摇头 false否 true是
- */
- private boolean isShakeHead = false;
- /**
- * 文字 请张嘴并左右晃动头部
- */
- private TextView tvNotice;
- /**
- * 人脸检测 圆形拍照框
- */
- private CameraSurfaceView mPreviewSurface = null;
- /**
- * 拍照框
- */
- private SurfaceView mFaceSurface;
- /**
- * 是否进行活体检测 默认false否 true是
- */
- private boolean isFace = false;
- /**
- * 进行人脸检测及活体检测的子线程
- */
- private Thread mThread;
- /**
- * 定时器
- */
- private static Timer mTimer;
- private int count;
- /**
- * 停止监测
- */
- private boolean isPause;
- private boolean isTimerNull;
- /**
- * 定时任务
- */
- private TimerTask mTimerTask = null;
- /**
- * fragment_face布局对应的View
- */
- View mFaceView;
- /**
- * 图片Bitmap
- */
- private Bitmap pictureMap;
- /**
- * 加载框
- */
- private ProgressDialog mWaitDialog;
- /**
- * 摇头拍照
- */
- int iFlag = 0;
- /**
- * 张嘴拍照
- */
- int oFlag = 0;
- /**
- * 向左向右摇头计数
- */
- int countHead = 0;
- /**
- * Base64加密
- */
- BASE64Encoder base64Encoder;
- /**
- * 刷新数据Handler
- */
- private ThisHandler mHandler;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // 讯飞人脸检测功能
- mFaceView = inflater.inflate(R.layout.fragment_face, container, false);
- mPreviewSurface = (CameraSurfaceView) mFaceView.findViewById(R.id.surface_fragment_face_preview);
- mFaceSurface = (SurfaceView) mFaceView.findViewById(R.id.surface_fragment_face_face);
- // mFaceSurface置于窗口的最顶层
- mFaceSurface.setZOrderOnTop(true);
- mFaceSurface.getHolder().setFormat(PixelFormat.TRANSLUCENT);
- // 设置预览界面的尺寸
- setSurfaceSize();
- // 文字 请张嘴并左右晃动头部
- tvNotice = (TextView) mFaceView.findViewById(R.id.tv_fragment_face_notice);
- // 停止监测
- isPause = false;
- return mFaceView;
- }
-
- /**
- * 拍照框大小
- */
- private void setSurfaceSize() {
- DisplayMetrics metrics = new DisplayMetrics();
- getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
- // 获取屏幕宽度
- int width = metrics.widthPixels;
- // 获取屏幕高度
- int height = (int) (width * previewWidth / (float) previewHeight);
- LayoutParams params = new LayoutParams(width, height);
- params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
- // 设置拍照框宽度、高度
- mPreviewSurface.setLayoutParams(params);
- mFaceSurface.setLayoutParams(params);
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- // 初始化手机加速度感应器,用于获取手机的朝向
- mAcceler = new Accelerometer(getActivity());
- try {
- // 初始化人脸检测
- mFaceDetector = FaceDetector.createDetector(getActivity(), null);
- } catch (Exception e) {
- LogUtils.e("Face onCreate===" + e.getLocalizedMessage());
- }
- // 初始化Base64加密
- base64Encoder = new BASE64Encoder();
- super.onCreate(savedInstanceState);
- // 初始化Handler,发送消息
- mHandler = new ThisHandler(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- // 打开手机加速度感应器,用于获取手机的朝向
- if (null != mAcceler) {
- mAcceler.start();
- }
- // 开启检测
- mStopTrack = false;
- // 人脸检测,算法
- setFaceDetection();
- // 监听拍照事件
- CameraInterface.getInstance().setOnTakePictureListener(
- new CameraInterface.TakePictureListener() {
- @Override
- public void onTakePictuerResult(Bitmap mBitmap) {
- String bitMapStr = getImage(mBitmap);
- Message msg = new Message();
- // 人像信息采集拍,照完成,分析比对
- msg.what = StaticArguments.FACE_HAS_TAKE_PICTURE;
- msg.obj = mBitmap;
- // Handler发送拍照消息
- mHandler.sendMessage(msg);
- }
- });
- }
-
- @Override
- public void onPause() {
- super.onPause();
- CameraInterface.getInstance().doDestroyCamera();
- // 关闭手机加速度感应器
- if (null != mAcceler) {
- mAcceler.stop();
- }
- try {
- // 关闭加载框
- dismissWaitingDialog();
- } catch (Exception e) {
- e.printStackTrace();
- }
- // 开启人脸检测
- isPause = true;
- // 停止计时
- stopTimer();
- // 停止检测
- mStopTrack = true;
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- CameraInterface.getInstance().doDestroyCamera();
- // 停止检测
- mStopTrack = true;
- // 销毁对象
- try {
- // 销毁人脸检测对象

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。