• 我如何将亿次的计算降为实时


    前言

    前期我们做了一个小程序,实现集体照片的自动分发。简单来说就是用户上传一张集体照,凡是出现在集体照中的人都能自动关联到此张照片,有点类似 QQ 和 FB 之前的标记用户,但是整个过程是自动的,无需人为分发,问题就出现在自动上。

    一、第一版算法

    首先如果自动的话就涉及到照片比对技术,如果自己技术实力雄厚(比如你是吴恩达)可以从底层神经网络开始写起,或者使用开源的人脸识别框架,我使用了百度腾讯的人脸识别接口,用着还可以,基本是免费的(需求不高的时候)。

    每位用户首先上传一张自己的大头照,主要是为了去匹配集体照,某位用户上传一张照片,就将此集体照与所有的用户大头照逐一比对,凡是能匹配成功的关联之。

    看似非常简单的功能,其实里面存在一个巨大的坑,如果用户量上千万或者上亿的时候,用户每上传一张集体照就要进行亿次的比对,这根本不可能实时,所以我们刚开始的时候考虑每天定时去比对一次,比如在晚上 12 点,所有当天上传的集体照去逐一比对,问题看似能够解决,但是没有了实时性,非常影响用户体验。我苦思冥想了几天后终于找到了一个实时的解决方案。

    二、实时比对

    对问题进行分析,解决方案就来了,只要我能够优化比对程序,将亿次的比对实现实时操作,问题即可解决。然而我不是吴恩达,换作吴恩达可能也没办法,我们真的做不到亿次比对实时操作。

    似乎陷入了僵局,然而我们来换一个角度思考此问题,我们为何不将亿次的比对减少到可以实时的量级?

    那么,如何降低比对次数呢?解决方案如下:

    1. 用户上传大头照的时候对此用户在我们的数据库中进行标记,即每个用户都有一个唯一的 faceid,并将此 faceid 和大头照存到百度或者腾讯的人脸库中;

    2. 上传集体照的时候,将集体照按照人脸进行切割,逐一的去百度或者腾讯的人脸库进行比对,如果能够匹配上,则能取到此人的 faceid,用此 faceid 即能查到所关联的用户,于是即可实现照片的自动分发。

    三、结论

    简单的两步即解决了实时比对的问题,有的时候换一个角度去思考问题,问题便迎刃而解!

  • 相关阅读:
    Spring Boot使用@Scheduled定时器任务
    [TaskList] 省选前板子补完计划
    [模板] 计算几何1(基础): 点/向量/线/圆/多边形/其他运算
    网络流刷题日记
    [模板] 网络流相关/最大流ISAP/费用流zkw
    11/5/2018模拟 Problem C
    11/1/2018模拟 Max
    [模板] 笛卡尔树 && RMQ
    bzoj1010-[HNOI2008]玩具装箱toy
    [模板] 斜率优化
  • 原文地址:https://www.cnblogs.com/shoufengwei/p/9182083.html
Copyright © 2020-2023  润新知