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