当前位置:   article > 正文

android 讯飞人脸检测功能_from iflytek import *

from iflytek import *

所需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

检测功能

  1. // package 包名;
  2. import android.app.ProgressDialog;
  3. import android.content.Intent;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Canvas;
  6. import android.graphics.PixelFormat;
  7. import android.graphics.Point;
  8. import android.graphics.PorterDuff;
  9. import android.hardware.Camera.CameraInfo;
  10. import android.os.AsyncTask;
  11. import android.os.Bundle;
  12. import android.os.Environment;
  13. import android.os.Handler;
  14. import android.os.Message;
  15. import android.support.v4.app.Fragment;
  16. import android.util.DisplayMetrics;
  17. import android.view.LayoutInflater;
  18. import android.view.SurfaceView;
  19. import android.view.View;
  20. import android.view.ViewGroup;
  21. import android.widget.RelativeLayout;
  22. import android.widget.RelativeLayout.LayoutParams;
  23. import android.widget.TextView;
  24. import com.android.volley.VolleyError;
  25. import com.iflytek.cloud.FaceDetector;
  26. import com.iflytek.cloud.util.Accelerometer;
  27. import com.rihui.ecar_travel_driver.R;
  28. // import 包名.BaseVolleyListenerInterface;
  29. // import 包名.MultipartRequestUpload;
  30. // import 包名.VolleyRequestUtil;
  31. // import 包名.LocationApplication;
  32. import org.json.JSONException;
  33. import org.json.JSONObject;
  34. import java.io.File;
  35. import java.util.ArrayList;
  36. import java.util.HashMap;
  37. import java.util.List;
  38. import java.util.Map;
  39. import java.util.Timer;
  40. import java.util.TimerTask;
  41. import Decoder.BASE64Encoder;
  42. /**
  43. * 讯飞人脸识别
  44. */
  45. public class FaceFragment extends Fragment implements HttpUtils.HttpListener {
  46. /**
  47. * Camera nv21格式预览帧的尺寸,默认设置640*480
  48. */
  49. private int previewWidth = 640;
  50. private int previewHeight = 480;
  51. /**
  52. * 预览帧数据存储数组和缓存数组
  53. */
  54. private byte[] nv21;
  55. private byte[] buffer;
  56. /**
  57. * FaceDetector对象,集成了离线人脸识别:人脸检测、视频流检测功能
  58. */
  59. private FaceDetector mFaceDetector;
  60. /**
  61. * Canvas 画布类
  62. */
  63. private Canvas mCanvas;
  64. /**
  65. * 手机加速度感应器,用于获取手机的朝向
  66. */
  67. private Accelerometer mAcceler;
  68. /**
  69. * 是否停止检测 true停止检测 false开启监测
  70. */
  71. private boolean mStopTrack;
  72. /**
  73. * 是否显示聚焦点 0不显示 1显示
  74. */
  75. private int isAlign = 1;
  76. /**
  77. * 拍照id
  78. */
  79. protected int mCameraId = CameraInfo.CAMERA_FACING_FRONT;
  80. /**
  81. * 是否张嘴 false否 true是
  82. */
  83. private boolean isOpenMouth = false;
  84. /**
  85. * 是否摇头 false否 true是
  86. */
  87. private boolean isShakeHead = false;
  88. /**
  89. * 文字 请张嘴并左右晃动头部
  90. */
  91. private TextView tvNotice;
  92. /**
  93. * 人脸检测 圆形拍照框
  94. */
  95. private CameraSurfaceView mPreviewSurface = null;
  96. /**
  97. * 拍照框
  98. */
  99. private SurfaceView mFaceSurface;
  100. /**
  101. * 是否进行活体检测 默认false否 true是
  102. */
  103. private boolean isFace = false;
  104. /**
  105. * 进行人脸检测及活体检测的子线程
  106. */
  107. private Thread mThread;
  108. /**
  109. * 定时器
  110. */
  111. private static Timer mTimer;
  112. private int count;
  113. /**
  114. * 停止监测
  115. */
  116. private boolean isPause;
  117. private boolean isTimerNull;
  118. /**
  119. * 定时任务
  120. */
  121. private TimerTask mTimerTask = null;
  122. /**
  123. * fragment_face布局对应的View
  124. */
  125. View mFaceView;
  126. /**
  127. * 图片Bitmap
  128. */
  129. private Bitmap pictureMap;
  130. /**
  131. * 加载框
  132. */
  133. private ProgressDialog mWaitDialog;
  134. /**
  135. * 摇头拍照
  136. */
  137. int iFlag = 0;
  138. /**
  139. * 张嘴拍照
  140. */
  141. int oFlag = 0;
  142. /**
  143. * 向左向右摇头计数
  144. */
  145. int countHead = 0;
  146. /**
  147. * Base64加密
  148. */
  149. BASE64Encoder base64Encoder;
  150. /**
  151. * 刷新数据Handler
  152. */
  153. private ThisHandler mHandler;
  154. @Override
  155. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  156. Bundle savedInstanceState) {
  157. // 讯飞人脸检测功能
  158. mFaceView = inflater.inflate(R.layout.fragment_face, container, false);
  159. mPreviewSurface = (CameraSurfaceView) mFaceView.findViewById(R.id.surface_fragment_face_preview);
  160. mFaceSurface = (SurfaceView) mFaceView.findViewById(R.id.surface_fragment_face_face);
  161. // mFaceSurface置于窗口的最顶层
  162. mFaceSurface.setZOrderOnTop(true);
  163. mFaceSurface.getHolder().setFormat(PixelFormat.TRANSLUCENT);
  164. // 设置预览界面的尺寸
  165. setSurfaceSize();
  166. // 文字 请张嘴并左右晃动头部
  167. tvNotice = (TextView) mFaceView.findViewById(R.id.tv_fragment_face_notice);
  168. // 停止监测
  169. isPause = false;
  170. return mFaceView;
  171. }
  172. /**
  173. * 拍照框大小
  174. */
  175. private void setSurfaceSize() {
  176. DisplayMetrics metrics = new DisplayMetrics();
  177. getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
  178. // 获取屏幕宽度
  179. int width = metrics.widthPixels;
  180. // 获取屏幕高度
  181. int height = (int) (width * previewWidth / (float) previewHeight);
  182. LayoutParams params = new LayoutParams(width, height);
  183. params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
  184. // 设置拍照框宽度、高度
  185. mPreviewSurface.setLayoutParams(params);
  186. mFaceSurface.setLayoutParams(params);
  187. }
  188. @Override
  189. public void onCreate(Bundle savedInstanceState) {
  190. // 初始化手机加速度感应器,用于获取手机的朝向
  191. mAcceler = new Accelerometer(getActivity());
  192. try {
  193. // 初始化人脸检测
  194. mFaceDetector = FaceDetector.createDetector(getActivity(), null);
  195. } catch (Exception e) {
  196. LogUtils.e("Face onCreate===" + e.getLocalizedMessage());
  197. }
  198. // 初始化Base64加密
  199. base64Encoder = new BASE64Encoder();
  200. super.onCreate(savedInstanceState);
  201. // 初始化Handler,发送消息
  202. mHandler = new ThisHandler(this);
  203. }
  204. @Override
  205. public void onResume() {
  206. super.onResume();
  207. // 打开手机加速度感应器,用于获取手机的朝向
  208. if (null != mAcceler) {
  209. mAcceler.start();
  210. }
  211. // 开启检测
  212. mStopTrack = false;
  213. // 人脸检测,算法
  214. setFaceDetection();
  215. // 监听拍照事件
  216. CameraInterface.getInstance().setOnTakePictureListener(
  217. new CameraInterface.TakePictureListener() {
  218. @Override
  219. public void onTakePictuerResult(Bitmap mBitmap) {
  220. String bitMapStr = getImage(mBitmap);
  221. Message msg = new Message();
  222. // 人像信息采集拍,照完成,分析比对
  223. msg.what = StaticArguments.FACE_HAS_TAKE_PICTURE;
  224. msg.obj = mBitmap;
  225. // Handler发送拍照消息
  226. mHandler.sendMessage(msg);
  227. }
  228. });
  229. }
  230. @Override
  231. public void onPause() {
  232. super.onPause();
  233. CameraInterface.getInstance().doDestroyCamera();
  234. // 关闭手机加速度感应器
  235. if (null != mAcceler) {
  236. mAcceler.stop();
  237. }
  238. try {
  239. // 关闭加载框
  240. dismissWaitingDialog();
  241. } catch (Exception e) {
  242. e.printStackTrace();
  243. }
  244. // 开启人脸检测
  245. isPause = true;
  246. // 停止计时
  247. stopTimer();
  248. // 停止检测
  249. mStopTrack = true;
  250. }
  251. @Override
  252. public void onDestroy() {
  253. super.onDestroy();
  254. CameraInterface.getInstance().doDestroyCamera();
  255. // 停止检测
  256. mStopTrack = true;
  257. // 销毁对象
  258. try {
  259. // 销毁人脸检测对象
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/225351
推荐阅读
相关标签
  

闽ICP备14008679号