用RocketMq+CountDownLatch优化人脸识别在工程运用时的速度

前言:先说明这个不是优化人脸识别的算法,这个是解决人脸识别算法在工程运用中遇到的速度慢的问题。项目中有个需要人脸识别的功能,比较慢,学弟是这样做的,因为我目前还不懂熟悉人脸识别的算法,据学弟口述流程是这样的,用户上传的照片传到后台后,学弟调用旷视接口判断照片的可用性,如果可以的话,就再调用xx接口提取体征值,提取完体征值后保存到数据库,最后返回给用户识别的结果,目前这样有点慢。

目录

第一章 原代码(学弟写的)

1.1 controller层

1.2 service层

第二章 优化思路

第三章 优化后的代码

3.1 service层

3.2 FaceJudgeThread

3.3 消费者


第一章 原代码(学弟写的)

1.1 controller层

接收用户上传的左、正、右脸的照片并提交给service层处理

@RequestMapping(value="/addFace",method = RequestMethod.POST)
    public @ResponseBody Map<Integer,String> addFace(HttpSession session,
                                               @RequestParam(value = "leftFace" ,required = false) MultipartFile leftFace,
                                               @RequestParam(value = "midFace",required = false) MultipartFile midFace,
                                               @RequestParam(value = "rightFace",required = false)MultipartFile rightFace){
        String studentId = session.getAttribute("FAMILY_STUDENTID").toString();
        int schoolId = Integer.parseInt(session.getAttribute("FAMILY_SCHOOLID").toString());
        return faceService.uploadFace(studentId,leftFace,midFace,rightFace,schoolId);
    }

1.2 service层

学弟在这里使用了FutureTask,将调用旷视接口的返回值放到了HashMap中,并在FutureTask任务结束后调用提取特征值的faceDetect,FutureTask会被提交到线程池中,最后将储存了检测结果的result返回。

    private ExecutorService executor = Executors.newCachedThreadPool();
@Override
    public Map<Integer,String> uploadFace(String studentId,MultipartFile left, MultipartFile mid,MultipartFile right, int schoolId){
        Map<Integer,String> result = new HashMap<Integer,String>();
        FutureTask ft1 = null;
        FutureTask ft2 = null;
        FutureTask ft3 = null;
        long lefts = System.currentTimeMillis();
        long mids = System.currentTimeMillis();
        long rights = System.currentTimeMillis();
        byte[] leftbytes;
        byte[] midbytes;
        byte[] rightbytes;
        if(left!=null){
            try {
                leftbytes = left.getBytes();
                String src = left.getOriginalFilename();
                String prefix=src.substring(src.lastIndexOf(".")+1).toLowerCase();
                //在此task中判断图片是否符合要求,把结果存到result中
                FaceplusplusTask f1 = new FaceplusplusTask(leftbytes,1,result,prefix);
                ft1 = n
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值