zoukankan      html  css  js  c++  java
  • 我如何将亿次的计算降为实时

    前言

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

    一、第一版算法

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

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

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

    二、实时比对

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

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

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

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

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

    三、结论

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

  • 相关阅读:
    企业级-Shell案例6——查看网卡的实时流量
    匿名内部类--毕向东java基础教程学习笔记
    简单的Windows登陆界面设计
    初学多线程练习1--电子时钟
    内部类--毕向东Java基础教程学习笔记
    异常处理——毕向东Java基础教程学习笔记
    Linux:常用shell命令
    CVE-2019-0708漏洞利用复现
    MS17-010漏洞利用复现
    RIP路由协议:基础设置/通信练习/兼容问题
  • 原文地址:https://www.cnblogs.com/shoufengwei/p/9182083.html
Copyright © 2011-2022 走看看