diff --git a/interview/resume.md b/interview/resume.md index ba6bc525..a6010050 100644 --- a/interview/resume.md +++ b/interview/resume.md @@ -7,6 +7,9 @@ - [技术关键](#技术关键) - [大数据框架](#大数据框架) - [存储实现](#存储实现) + - [索引步骤](#索引步骤) + - [身份鉴别](#身份鉴别) + - [结果推送](#结果推送) - [计算逻辑](#计算逻辑) - [索引方法](#索引方法) - [CPU索引](#cpu索引) @@ -70,6 +73,27 @@ count: 记录当天插入索引的hash的个数,hash为当天的哈希索引 hash: 当天抓取的人的hash值 +### 索引步骤 + +首先用 FFmpeg 库来抓取视频流,然后进行人脸检测、特征提取,得到512维特征,利用PCA降维到256维。 + +将实值特征利用hash函数转换到汉明空间,得到hash特征,查询HashTable,获取当前hash特征关联的所有记录,判断是否已经插入到当天的索引中(查询IndexTable),如果是,则直接查询候选集,否则,得到候选集之后,还要将新的哈希值插入到索引中以供后续查询;(更新IndexTable) + +哈希值的查找策略:历史15天内,每天的索引库中的哈希值和待查询哈希值之间的汉明距离最小,小于D范围内的前K个哈希值作为候选集 + +更具哈希候选集查询HashTable,获取与候选集中哈希值相关联的所有记录(实值特征,url,人脸ID),分别添加至特征列表和id列表中(**两个列表长度一样,并且id和特征一一对应**) + +### 身份鉴别 + +身份鉴别模块的功能是拿到特征列表和ID列表之后,进行精细选择的一个过程,最终得到最相似的那个人的ID。 + +如果ID是空的话,说明这个人以前没有出现过,因此生成一个新的ID,把这个人的ID加入到TimesTable 中, +否则通过ID,还有时间定位到TimesTable 中的某一行,对应的Times+1 + +### 结果推送 + +通过 Redis + socket.io + Node.js 将计算结果送到web页面上去。 + ### 计算逻辑 每天抓到的人脸都会存储到IndexTable中,用于初始化索引。对于抓取到的人脸去以前的特征库里面检索特征(中间需要用到HashTable来对人脸进行精细计算),然后统计次数,存入到TimesTable中。