From 3a5f09c61a87adb8dba2cc4a5366893886ba1c1d Mon Sep 17 00:00:00 2001
From: dupengyue <dupengyue@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 20 七月 2017 17:31:40 +0800
Subject: [PATCH] 接口初步完成

---
 VisitFace/DemoForBsk/app/src/main/java/cn/com/basic/face/base/MainActivity.java |  218 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 205 insertions(+), 13 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 6bfe263..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
@@ -11,7 +11,10 @@
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.Color;
+import android.graphics.ImageFormat;
 import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.SurfaceTexture;
 import android.hardware.Camera;
 import android.os.Handler;
 import android.support.design.widget.TabLayout;
@@ -26,6 +29,7 @@
 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.WindowManager;
@@ -35,6 +39,7 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.awsle.aibatis.client.SqlMapClientBuilder;
 import com.bsk.zhangbo.demoforbsk.R;
 import com.luxand.FSDK;
 
@@ -43,6 +48,7 @@
 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;
@@ -54,7 +60,9 @@
 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.util.ArrayList;
 import java.util.Arrays;
@@ -67,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();
@@ -86,14 +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(VisitorRegisterFragment.getInstance(), tabNamesList.get(1),tabIcons[1]);
-        myFragmentPagerAdapter.addFragment(AttenderRegisterFragment.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]);
@@ -115,6 +126,8 @@
             myThread = new MyThread();
             myThread.start();
         }
+        initDb();
+        initSqlMap();
     }
 
     public static MainActivity getInstance() {
@@ -136,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
@@ -253,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;
@@ -395,6 +465,7 @@
         mDraw.mStopped = 0;
         mDraw.mStopping = 0;
     }
+
 }
 
 
@@ -481,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);
@@ -516,6 +586,11 @@
 
 //        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);
@@ -530,7 +605,7 @@
 
         FSDK.FeedFrame(mTracker, 0, RotatedImage, face_count, IDs);
 
-        System.out.println("face_count="+face_count[0]);
+        System.out.println("face_count="+face_count[0]+", mImageWidth="+mImageWidth+", mImageHeight="+mImageHeight);
 
         faceLock.lock();
 
@@ -708,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 {
@@ -725,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;
 
@@ -744,22 +935,22 @@
         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;
@@ -852,5 +1043,6 @@
             this.invalidate();
         }
     }
+
 }
 

--
Gitblit v1.8.0