记一次环球影城游览相遇游客的人脸识别及时序分析

前言

前段时间趁实验室同学来京参赛,一起约着去了一趟环球影城(北京环球度假区,UniversalBeijingResort)。虽是淡季的工作日,但不得不说环球人气真的火爆。尽管如此,玩完之后还是觉得很值的。

环球标志性大地球

估计很多人来此的重要动机之一就是看哈利波特展区,这个展区确实是整个园区最精致的部分。霍格沃茨魔法学校附近绝对是出片的好地方,有不少商拍摄影师在此跟拍,演出也非常还原(尽管我并没看过哈利波特)。

霍格沃茨附近

城堡比欢乐谷的精致许多。

城堡外部

进入城堡内部,准备体验禁忌之旅。

城堡内部

功夫熊猫主题的室内展馆也十分精致,有着非常不错的置景和灯光。

花灯园

作为过山车爱好者,霸天虎惊险程度 > 刺激程度,二刷了。

霸天虎

环球的夜景被许多人低估了,来拍人像的话真的很出片。

夜景

仿佛看到了 GTA 里面的梦中游乐园。

夜景

正宗美式效果。

夜景

晚上赶上了城堡的灯光秀。

夜景

再见啦👋。

夜景

想法

一天下来走了许多冤枉路,步数达到了2.4万。正好运动相机录制了许多素材,能否分析一下有没有与我们重复相遇的人呢,相遇时间间隔是多少?

有了这个点子后,打算写个小工具来实现。

技术选型

之前就了解过InsightFace,对亚洲人识别效果很好。Faiss是个向量数据库,在LLM领域的RAG中常用到,当然也可以用来对比人脸 Embedding 向量的相似度吧。

  1. InsightFace:开源的高精度人脸识别框架
  2. Faiss:Facebook AI开发的相似性搜索库,专为大规模向量检索优化
  3. FFmpeg:用于高效视频处理的命令行工具,可以提取视频帧

实现思路

工作流程如下:

  1. 视频分割:将运动相机录制的视频按每秒提取一帧,并以时间戳命名
  2. 人脸检测与特征提取:识别每一帧中的人脸,并提取人脸特征
  3. 人脸匹配与数据库构建:比较人脸特征相似度,构建人脸出现记录
  4. 时序分析:分析人脸出现的时间模式,计算相遇显著性

代码实现

具体代码放在了 Github:BaiHLiu/AreWeMeetBefore

结果分析

使用 pandas 做了一些简单的分析。我希望找到的是相遇间隔最长的人脸,且图片为每秒截取一张,短时间内可能存在多张相同人脸出现。定义 $S_i$ 为人脸 $i$ 的得分,$\varDelta T_i$ 为最后与最早相遇时间之差,$C_i$ 为人脸 $i$ 出现的次数。直观的想法为 $S_i$ 与 $\varDelta T_i$ 成正比,与 $C_i$ 成反比。

进行归一化,定义归一化的时间跨度 $\hat{T}_i$ 和归一化的出现次数 $\hat{C}_i$ :

$$\hat{T}i = \frac{\Delta T_i - \min{j}(\Delta T_j)}{\max_{j}(\Delta T_j) - \min_{j}(\Delta T_j)}$$

$$\hat{C}i = \frac{C_i - \min{j}(C_j)}{\max_{j}(C_j) - \min_{j}(C_j)}$$

人脸得分 $S_i$:

$$S_i = \frac{\hat{T}_i}{\hat{C}_i}$$

去除同伴等误报后,发现最长间隔才 5 分多,差评。

记一次环球影城游览相遇游客的人脸识别及时序分析

https://www.catop.top/2025/03/16/are-we-meet-before/

作者

Catop

发布于

2025-03-16

更新于

2025-03-16

许可协议

评论