package com.basic.security.fragment.helper; import com.basic.security.manager.DetectResultManager; import com.basic.security.manager.FacePositionManager; import com.basic.security.manager.RecognizeManager; import com.basic.security.utils.DetectedResult; import com.basic.security.utils.FacePosition; import com.basic.security.utils.ThreadUtil; import org.androidannotations.annotations.Background; import org.androidannotations.annotations.EFragment; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @EFragment public class CfCompareFeature extends CfDetectFace { public final LinkedList detectedResultQueue = new LinkedList(); public void addDetectedResult(DetectedResult detectedResult) { synchronized (detectedResultQueue) { if (detectedResult == null || detectedResult.facePositions.size() == 0 ) { return; } while (detectedResultQueue.size() >= 1) { detectedResultQueue.poll(); } detectedResultQueue.add(detectedResult); } } @Background public void compareFeature() { while (true) { try { DetectedResult detectedResult = null; synchronized (detectedResultQueue) { if (detectedResultQueue.size() > 0) { detectedResult = detectedResultQueue.pollLast(); } } if (detectedResult == null) { Thread.sleep(100); continue; } if (detectedResult.shouldExtractFeature) { for (FacePosition facePosition : detectedResult.facePositions) { facePosition.readFaceFeature(); FacePositionManager.processFaceFeature(facePosition); } DetectResultManager.setDetectResult(detectedResult); } else if (drawFaceRectFinished) { drawFaceRect(detectedResult); } } catch (Exception e) { e.printStackTrace(); } } } }