栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

人脸特征提取

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

人脸特征提取

package com.cdkj.framework.task;

import com.arcsoft.face.FaceEngine;
import com.arcsoft.face.FaceFeature;
import com.arcsoft.face.FaceInfo;
import com.arcsoft.face.enums.ErrorInfo;
import com.arcsoft.face.toolkit.ImageInfo;
import com.chuangdun.arcface.autoconfigure.FaceEnginePool;
import com.google.common.base.Preconditions;
import com.google.common.base.Verify;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;

import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;


public class BytesFeatureCollectingTask implements Callable {

    public static final Logger logger = LoggerFactory.getLogger(BytesFeatureCollectingTask.class);

    private final byte[] imageData;
    private final FaceEnginePool faceEnginePool;

    public BytesFeatureCollectingTask(byte[] imageBytes, FaceEnginePool faceEnginePool){
        Preconditions.checkNotNull(imageBytes, "图像数据不能为空.");
        Preconditions.checkArgument(imageBytes.length > 0, "图像数据长度不能为0.");
        Preconditions.checkNotNull(faceEnginePool, "FaceEnginePool不能为空.");
        this.imageData = imageBytes;
        this.faceEnginePool = faceEnginePool;
    }

    @Override
    public byte[] call() throws Exception {
        FaceEngine engine = null;
        try {
            long readRgbDataStart = System.currentTimeMillis();
            ImageInfo imageInfo = getRGBData(imageData);
            long readRgbDataStop = System.currentTimeMillis();
            logger.info("线程:{} 读取图片RGB数据耗时:{}毫秒", Thread.currentThread().getName(),
                    (readRgbDataStop - readRgbDataStart));
            engine = faceEnginePool.borrowObject();
            List faceInfoList = new ArrayList<>(5);
            int errorCode = ErrorInfo.MERR_UNKNOWN.getValue();
            for (int counter = 0; counter < 3; counter ++){
                long detectTimeStart = System.currentTimeMillis();
                faceInfoList.clear();
                errorCode = engine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(),
                        imageInfo.getImageFormat(), faceInfoList);
                long detectTimeStop = System.currentTimeMillis();
                logger.info("线程:{} 第:{}次尝试人脸检测, 耗时:{}毫秒, 结果码:{}", Thread.currentThread().getName(), counter + 1,
                        (detectTimeStop - detectTimeStart), errorCode);
                if(errorCode == ErrorInfo.MOK.getValue()){
                    break;
                }
            }
            Verify.verify(errorCode == ErrorInfo.MOK.getValue(), "人脸检测失败,错误码: %s", errorCode);
           Verify.verify(faceInfoList.size() <= 1, "检测到%s张人脸.", faceInfoList.size());
            Verify.verify(faceInfoList.size() != 0, "照片中没有人脸信息,请重试");
            FaceFeature faceFeature = new FaceFeature();
            for (int counter = 0; counter < 3; counter ++){
                long extractTimeStart = System.currentTimeMillis();
                errorCode = engine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(),
                        imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
                long extractTimeStop = System.currentTimeMillis();
                logger.info("线程:{} 第:{}次尝试提取人脸特征, 耗时:{}毫秒, 结果码:{}", Thread.currentThread().getName(), counter + 1,
                        (extractTimeStop - extractTimeStart), errorCode);
                if(errorCode == ErrorInfo.MOK.getValue()){
                    break;
                }
            }
            Verify.verify(errorCode == ErrorInfo.MOK.getValue(), "人脸特征提取失败,错误码:%s", errorCode);
            return faceFeature.getFeatureData();
        } finally {
            faceEnginePool.returnObject(engine);
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号