/Picf

Picf 是一款智能相册,具有人脸识别分类、人脸搜索、相似图片筛查等功能。 Picf is a smart photo album, which can classify images by face, search images with same face as well as find similar images.

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

Picf

首页

简介

Picf 是一款智能相册,由北航2020级电子信息工程学院的学生为完成计算机软件基础大作业而构建。

Picf 主要具有三大功能,均为老师所要求的功能:

  • 人脸识别分类:把相册中的图片按人分类。
  • 人脸搜索:把同一个人的图片全部筛选出来。
  • 重复筛查:把相同的图片筛选出来,剔除重复的文件。

除了这些功能以外,Picf 具有一些额外特性:

  • 支持手动修改分类结果

    因图片质量、模型性能等原因,难免会出现将图片分错的情况,Picf 支持用户手动修改图片的分类结果,并将分类结果存储起来。
  • 支持稳定的渐进式识别

    在对图片进行识别分类的过程中,Picf 可以根据已分类的结果,将文件夹内新添加的图片合并到已有的人物下面。
  • 支持相似图片筛查

    借助 PHashHamming Distance 的方法,Picf 可以将相似的图片筛选出来,并由用户决定删除哪些图片。
  • 美观的图形化界面

    借助于开源项目,Picf 拥有相对美观、现代的GUI界面,使得分类、搜索、筛查的结果呈现更加直观。

安装步骤:

为便于体验本项目,提供 Windows-x64 环境下使用 pyinstaller 打包的实验性版本,请前往 Release 下载 Picf-v1.6-windows-x64.zip 并解压,运行 main.exe 。 若在运行该实验版本时遇到错误或完全无法运行,请参考下面的步骤进行环境配置并运行。

  • 安装 Anaconda(如果已有,跳过本步)

  • 下载最新的 Release

  • 运行setup.bat

    setup.bat 主要用于自动创建 conda 环境、安装依赖包、完成imagededup包的编译。

使用方法:

conda activate Picf
python main.py

界面展示

识别分类结果 人脸搜索结果 相似筛查结果

原理

一、 人脸识别分类

输入一组图片,对于其中的每张图片进行以下步骤:

  • 人脸检测:找到图片中的人脸位置,以返回人脸的矩形坐标。
  • 人脸对齐:将矩形内部的人脸进行水平、竖直对齐。
  • 特征值提取:将对齐的人脸输入 facenet 网络,得到该人脸的128维特征向量。

所有图片处理完毕后,对提取到的多张人脸的特征值,使用聚类算法 Chinese Whispers 进行聚类,得到分类好的人脸组,并将提取到的特征值和分类结果保存。

二、 人脸搜索

输入一张图片,依次进行以下步骤:

  • 按照人脸识别分类的方法对图片中的人脸提取特征值。
  • 将特征值与已有图片组的特征值一起使用 Chinese Whispers 算法聚类。
  • 根据已保存的分类结果,将输入图片中人物的所有图片输出。

三、 相似图片筛查

输入一组图片,依次进行以下步骤:

  • 获取每张图片的 PHash 值。
  • 计算图片间的 Hamming distance
  • 使用 BKTreeHamming distance 的大小对照片进行分组,输出分组结果。

致谢

在构建Picf的过程中,我们参考并使用了以下开源仓库的代码: