From 14d33d997cfc1949fe93664197097c7cbc6e92e3 Mon Sep 17 00:00:00 2001
From: chenke <chenke@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期三, 19 七月 2017 17:56:34 +0800
Subject: [PATCH]
---
VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java | 260 ++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 242 insertions(+), 18 deletions(-)
diff --git a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java
index 2f84b6d..40d4ed5 100644
--- a/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java
+++ b/VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java
@@ -1,32 +1,37 @@
package cn.com.basic.face.base;
+import android.Manifest;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.Intent;
import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
+import android.graphics.ImageFormat;
import android.graphics.Paint;
-import android.graphics.drawable.ColorDrawable;
+import android.graphics.PorterDuff;
+import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.os.Handler;
import android.support.design.widget.TabLayout;
+import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
+import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
+import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
-import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageView;
@@ -34,13 +39,16 @@
import android.widget.TextView;
import android.widget.Toast;
+import com.awsle.aibatis.client.SqlMapClientBuilder;
import com.bsk.zhangbo.demoforbsk.R;
import com.luxand.FSDK;
import cn.com.basic.face.discern.common.CommonVariables;
import cn.com.basic.face.discern.query.item.SurveillanceQueryItem;
+import cn.com.basic.face.fragment.AttenderRegisterFragment;
import cn.com.basic.face.fragment.SurveillanceFragment;
import cn.com.basic.face.service.SurveillanceMng;
+import cn.com.basic.face.service.sqlite.TestDao;
import cn.com.basic.face.util.FileUtil;
import cn.com.basic.face.util.NativeImg;
import cn.com.basic.face.util.TabNameUtil;
@@ -48,13 +56,14 @@
import cn.com.basic.face.fragment.CheckInFragment;
import cn.com.basic.face.fragment.DeviceFragment;
import cn.com.basic.face.fragment.PhoneCallFragment;
-import cn.com.basic.face.fragment.RegisterFragment;
+import cn.com.basic.face.fragment.VisitorRegisterFragment;
import cn.com.basic.face.fragment.VisitFragment;
import java.io.File;
+import java.io.FileNotFoundException;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.InputStream;
-import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -66,7 +75,7 @@
private static MainActivity instance;
private static TabLayout mTabLayout;
- private static ViewPager mViewPager;
+ public static ViewPager mViewPager;
public static void selectPage(int pageNum) {
mTabLayout.getTabAt(pageNum).select();
@@ -85,13 +94,17 @@
instance = this;
}
+ public MyFragmentPagerAdapter myFragmentPagerAdapter;
+
@Override
public void initData() {
List<String> tabNamesList = Arrays.asList(TabNameUtil.tabNames);
int[] tabIcons = TabNameUtil.tabIcons;
- MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),MainActivity.this);
+ myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),MainActivity.this);
myFragmentPagerAdapter.addFragment(SurveillanceFragment.getInstance(), tabNamesList.get(0),tabIcons[0]);
- myFragmentPagerAdapter.addFragment(RegisterFragment.getInstance(), tabNamesList.get(1),tabIcons[1]);
+ myFragmentPagerAdapter.addFragment(VisitorRegisterFragment.getInstance(), tabNamesList.get(1),tabIcons[1]);
+// myFragmentPagerAdapter.addFragment(AttenderRegisterFragment.getInstance(), tabNamesList.get(1),tabIcons[1]);
+// myFragmentPagerAdapter.addFragment(RegisterFragment.getInstance(), tabNamesList.get(1),tabIcons[1]);
myFragmentPagerAdapter.addFragment(CheckInFragment.getInstance(), tabNamesList.get(2),tabIcons[2]);
myFragmentPagerAdapter.addFragment(PhoneCallFragment.getInstance(), tabNamesList.get(3),tabIcons[3]);
myFragmentPagerAdapter.addFragment(VisitFragment.getInstance(), tabNamesList.get(4),tabIcons[4]);
@@ -109,9 +122,12 @@
tab.getCustomView().setSelected(true);
}
}
- myThread = new MyThread();
- myThread.start();
-
+ if (CommonVariables.ID_CARD) {
+ myThread = new MyThread();
+ myThread.start();
+ }
+ initDb();
+ initSqlMap();
}
public static MainActivity getInstance() {
@@ -133,6 +149,12 @@
mFragments.add(fragment);
mFragmentTitles.add(title);
mFragmentIcons.add(drawable);
+ }
+
+ public void setFragment(int index, Fragment fragment) {
+ mFragments.remove(index);
+ mFragments.add(index, fragment);
+ notifyDataSetChanged();
}
@Override
@@ -250,7 +272,58 @@
}
return true;
}
+/////////////////////////////
+ /**
+ * 鍒濆鍖杝qlMap
+ */
+ private void initSqlMap() {
+ Config.sqlMap = SqlMapClientBuilder.buildSqlMapClient(this.getClass().getResourceAsStream("/assets/config/SqlMapConfig.xml")).init(this);
+ }
+ /**
+ * 鍒濆鍖栨暟鎹�
+ */
+ private void initDb() {
+ InputStream dbIn = getClass().getResourceAsStream(Config.DB);
+ FileOutputStream out = null;
+ File z = null;
+ try {
+ byte[] bytes = new byte[1024];
+ z = new File(Config.APPDBPATH);
+ if(!z.exists()){
+ z.mkdirs();
+ }
+ //鍒ゆ柇鏁版嵁搴撴槸鍚﹀瓨鍦�
+ z = new File(Config.APPDB);
+ if (!z.exists()) {
+ out = new FileOutputStream(z);
+ int len = 0;
+ while((len = dbIn.read(bytes))!= -1){
+ out.write(bytes,0,len);
+ }
+ }
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (out != null)
+ out.close();
+ if (dbIn != null)
+ dbIn.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ try {
+ //瀵规暟鎹簱鏂囦欢鏉冮檺
+ Runtime.getRuntime().exec("chmod 7755 " + z.toString());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ //Log.d(Config.APPTAG, "鍒濆鍖栨暟鎹畬鎴愶紒");
+ }
////////////////////////////////////////////////////////
private boolean mIsFailed = false;
@@ -274,6 +347,7 @@
} else {
FSDK.Initialize();
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
mDraw = new ProcessImageAndDrawResults(this);
mPreview = new Preview(this, mDraw);
mDraw.mTracker = new FSDK.HTracker();
@@ -285,6 +359,16 @@
}
}
resetTrackerParameters();
+
+ //setContentView(mPreview); //creates MainActivity contents
+ //addContentView(mDraw, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
+
+ // Menu
+// LayoutInflater inflater = (LayoutInflater)this.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
+// View buttons = inflater.inflate(R.layout.bottom_menu, null );
+// buttons.findViewById(R.id.helpButton).setOnClickListener(this);
+// buttons.findViewById(R.id.clearButton).setOnClickListener(this);
+// addContentView(buttons, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
}
}
@@ -381,6 +465,7 @@
mDraw.mStopped = 0;
mDraw.mStopping = 0;
}
+
}
@@ -467,8 +552,7 @@
first_frame_saved = false;
}
- @Override
- protected void onDraw(Canvas canvas) {
+ public void onDraw(Canvas canvas) {
if (mStopping == 1) {
mStopped = 1;
super.onDraw(canvas);
@@ -499,12 +583,29 @@
} else {
FSDK.CopyImage(Image, RotatedImage);
}
+
+// FSDK.TFacePosition fp11 = new FSDK.TFacePosition();
+// FSDK.DetectFace(RotatedImage, fp11);
+ FSDK.FSDK_FaceTemplate face = new FSDK.FSDK_FaceTemplate();
+ int result = FSDK.GetFaceTemplate(RotatedImage, face);
+ if (result == FSDK.FSDKE_OK) {
+
+ }
+
+ String surveillancePhotoName11 = "/storage/sdcard1/"+System.currentTimeMillis()+".jpg";
+ FSDK.SaveImageToFile(Image, surveillancePhotoName11);
+
+
FSDK.FreeImage(Image);
long IDs[] = new long[MAX_FACES];
long face_count[] = new long[1];
+
+
FSDK.FeedFrame(mTracker, 0, RotatedImage, face_count, IDs);
+
+ System.out.println("face_count="+face_count[0]+", mImageWidth="+mImageWidth+", mImageHeight="+mImageHeight);
faceLock.lock();
@@ -682,6 +783,119 @@
}
}
}
+
+ public void startFaceDetection() {
+ if (mStopping == 1) {
+ mStopped = 1;
+ return;
+ }
+
+ if (mYUVData == null || mTouchedIndex != -1) {
+ return;
+ }
+
+
+ decodeYUV420SP(mRGBData, mYUVData, mImageWidth, mImageHeight);
+
+ FSDK.HImage Image = new FSDK.HImage();
+ FSDK.FSDK_IMAGEMODE imagemode = new FSDK.FSDK_IMAGEMODE();
+ imagemode.mode = FSDK.FSDK_IMAGEMODE.FSDK_IMAGE_COLOR_24BIT;
+ FSDK.LoadImageFromBuffer(Image, mRGBData, mImageWidth, mImageHeight, mImageWidth*3, imagemode);
+ FSDK.MirrorImage(Image, false);
+ FSDK.HImage RotatedImage = new FSDK.HImage();
+ FSDK.CreateEmptyImage(RotatedImage);
+
+ int ImageWidth = mImageWidth;
+ if (rotated) {
+ ImageWidth = mImageHeight;
+ FSDK.RotateImage90(Image, -1, RotatedImage);
+ } else {
+ FSDK.CopyImage(Image, RotatedImage);
+ }
+
+ //String surveillancePhotoName11 = "/storage/sdcard1/"+System.currentTimeMillis()+".jpg";
+ //FSDK.SaveImageToFile(Image, surveillancePhotoName11);
+
+
+ FSDK.FreeImage(Image);
+
+ long IDs[] = new long[MAX_FACES];
+ long face_count[] = new long[1];
+
+
+
+ FSDK.FeedFrame(mTracker, 0, RotatedImage, face_count, IDs);
+
+ System.out.println("face_count="+face_count[0]+", mImageWidth="+mImageWidth+", mImageHeight="+mImageHeight);
+
+ faceLock.lock();
+
+ for (int i=0; i<MAX_FACES; ++i) {
+ mFacePositions[i] = new FaceRectangle();
+ mFacePositions[i].x1 = 0;
+ mFacePositions[i].y1 = 0;
+ mFacePositions[i].x2 = 0;
+ mFacePositions[i].y2 = 0;
+ mIDs[i] = IDs[i];
+ }
+
+
+ for (int i = 0; i < (int)face_count[0]; ++i) {
+ FSDK.FSDK_Features Eyes = new FSDK.FSDK_Features();
+ FSDK.GetTrackerEyes(mTracker, 0, mIDs[i], Eyes);
+
+ GetFaceFrame(Eyes, mFacePositions[i]);
+ }
+ if ((int)face_count[0] > 0) {
+
+ FSDK.HImage img2 = new FSDK.HImage();
+ FSDK.CreateEmptyImage(img2);
+ FSDK.TFacePosition fp = new FSDK.TFacePosition();
+ FSDK.DetectFace(RotatedImage, fp);
+
+ int x1 = (int)(fp.xc - 1.2*fp.w/2);
+ int y1 = (int)(fp.yc - 1.4*fp.w/2);
+ int x2 = (int)(fp.xc + 1.2*fp.w/2);
+ int y2 = (int)(fp.yc + 1.4*fp.w/2);
+
+ FSDK.CopyRect(RotatedImage, x1, y1, x2, y2, img2);
+
+
+ System.out.println("face_count="+face_count[0]);
+ String surveillancePhotoName = MainActivity.getInstance().getFilesDir().getAbsolutePath()+System.currentTimeMillis()+".jpg";
+ FSDK.SaveImageToFile(img2, surveillancePhotoName);
+
+ List bitmapList = new ArrayList();
+ for (int i = 0; i < 1; i++) {
+ NativeImg nativeImg = new NativeImg();
+ nativeImg.image = FileUtil.readFile(new File(surveillancePhotoName));
+ nativeImg.size = nativeImg.image.length;
+ SurveillanceQueryItem surveillanceQueryItem = new SurveillanceQueryItem();
+ surveillanceQueryItem.setNativeImg(nativeImg);
+ nativeImg.st_track_id = 1;
+ surveillanceQueryItem.setStTrackId(nativeImg.st_track_id);
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inMutable = true;
+ Bitmap bmp = BitmapFactory.decodeByteArray(nativeImg.image, 0, nativeImg.image.length, options);
+ Canvas canvas1 = new Canvas(bmp);
+
+ surveillanceQueryItem.setBitmap(bmp);
+ surveillanceQueryItem.setWidth("100");
+ surveillanceQueryItem.setHeight("100");
+ bitmapList.add(surveillanceQueryItem);
+
+
+ SurveillanceMng.getInstance().addBitmap(bitmapList, nativeImg.image, 0, CommonVariables.Camera.IN+"", nativeImg.image);
+ }
+
+
+
+
+ }
+ FSDK.FreeImage(RotatedImage);
+ faceLock.unlock();
+
+ }
}
class Preview extends SurfaceView implements SurfaceHolder.Callback {
@@ -699,8 +913,11 @@
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+
+ //new MyThread1().start();
}
+ int count = 0;
public void surfaceCreated(SurfaceHolder holder) {
mFinished = false;
@@ -714,21 +931,26 @@
frontCameraFound = true;
}
}
-
+ //If authorisation not granted for camera
+ if (ContextCompat.checkSelfPermission(MainActivity.getInstance(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
+ //ask for authorisation
+ ActivityCompat.requestPermissions(MainActivity.getInstance(), new String[]{Manifest.permission.CAMERA}, 50);
if (frontCameraFound) {
mCamera = Camera.open(cameraId);
} else {
mCamera = Camera.open();
}
-
try {
mCamera.setPreviewDisplay(holder);
- mCamera.setPreviewCallback(new Camera.PreviewCallback() {
- public void onPreviewFrame(byte[] data, Camera camera) {
+ mCamera.addCallbackBuffer(new byte[((640 * 480) * ImageFormat.getBitsPerPixel(ImageFormat.NV21)) / 8]);
+
+ //mCamera.setPreviewCallback
+ mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
+ public void onPreviewFrame(final byte[] data, final Camera camera) {
+ mCamera.addCallbackBuffer(data);
if ( (mDraw == null) || mFinished )
return;
-
if (mDraw.mYUVData == null) {
Camera.Parameters params = camera.getParameters();
mDraw.mImageWidth = params.getPreviewSize().width;
@@ -785,6 +1007,7 @@
List<Camera.Size> supportedSizes = parameters.getSupportedPreviewSizes();
int width = 0;
int height = 0;
+ System.out.println("surfaceChanged");
for (Camera.Size s: supportedSizes) {
if ((width - 640)*(width - 640) + (height - 480)*(height - 480) >
(s.width - 640)*(s.width - 640) + (s.height - 480)*(s.height - 480)) {
@@ -820,5 +1043,6 @@
this.invalidate();
}
}
+
}
--
Gitblit v1.8.0