From ff3a882198b17860d0ab1602c489f68ccb957f95 Mon Sep 17 00:00:00 2001 From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674> Date: 星期三, 19 七月 2017 17:26:28 +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