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; } if (detectedResultQueue.size() >= 2) { detectedResultQueue.poll(); } detectedResultQueue.add(detectedResult); } } @Background public void compareFeature() { while (true) { try { Thread.sleep(100); DetectedResult detectedResult = null; synchronized (detectedResultQueue) { if (detectedResultQueue.size() > 0) { detectedResult = detectedResultQueue.pollLast(); } } if (detectedResult == null) { continue; } for (FacePosition facePosition : detectedResult.facePositions) { facePosition.readFaceFeature(); FacePositionManager.processFaceFeature(facePosition); } DetectResultManager.setDetectResult(detectedResult); drawFaceRect(detectedResult); } catch (Exception e) { e.printStackTrace(); } } } }