package com.basic.security.fragment.helper; import com.basic.security.base.BaseApplication; import com.basic.security.manager.DetectResultManager; import com.basic.security.manager.FacePositionManager; import com.basic.security.utils.DetectedResult; import com.basic.security.utils.FacePosition; import com.basic.security.utils.socket.CameraYuvSocketServer; import org.androidannotations.annotations.EFragment; import java.util.LinkedList; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @EFragment public class CfCompareFeature extends CfDetectFace { static Lock detectedResultLock = new ReentrantLock(); static Condition detectedResultCondition = detectedResultLock.newCondition(); static ExecutorService singleThreadExecutorService = Executors.newSingleThreadExecutor(); static CfCompareFeatureThread CfCompareFeatureThread = new CfCompareFeatureThread(); static DetectedResult detectedResult = null; public final LinkedList detectedResultQueue = new LinkedList(); public void addDetectedResult(DetectedResult detectedResult) { if (!CfCompareFeatureThread.isRunning) { CfCompareFeature.detectedResult = detectedResult; singleThreadExecutorService.execute(CfCompareFeatureThread); } // detectedResultLock.lock(); // detectedResultLock.unlock(); // synchronized (detectedResultQueue) { // if (detectedResult == null || detectedResult.facePositions.size() == 0 ) { // return; // } // while (detectedResultQueue.size() >= 1) { // detectedResultQueue.poll(); // } // detectedResultQueue.add(detectedResult); // } } // @Background static class CfCompareFeatureThread implements Runnable { public boolean isRunning = false; @Override public void run() { try { // synchronized (detectedResultQueue) { // if (detectedResultQueue.size() > 0) { // detectedResult = detectedResultQueue.pollLast(); // } // } // System.out.println("CfCompareFeature.compareFeature " + detectedResult); if (detectedResult == null) { return; } if (detectedResult.shouldExtractFeature) { for (FacePosition facePosition : detectedResult.facePositions) { facePosition.readFaceFeature(); FacePositionManager.processFaceFeature(facePosition); } DetectResultManager.setDetectResult(detectedResult); detectedResult.setStranger(); CameraYuvSocketServer.setDetectedResult(detectedResult); } else if (drawFaceRectFinished) { BaseApplication.getApplication().activity.fragment_camera.drawFaceRect(detectedResult); } } catch (Exception e) { e.printStackTrace(); } isRunning = false; } } }