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<DetectedResult> 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;
|
}
|
}
|
|
}
|