Giter Club home page Giter Club logo

picf's Introduction

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的过程中,我们参考并使用了以下开源仓库的代码:

picf's People

Contributors

furymartin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

picf's Issues

滚动条需要改善UI

滚动条需要改善UI

现象描述

右侧滚动条的 UI 太丑了,需要改善以实现 UI 风格的统一。

image

首次识别分类后图片无法加载

首次选择文件夹并识别分类后,图片无法加载

现象描述

  • 首次选择文件夹并进行识别分类后,图片无法加载

image

可能原因

  • 首次选择文件夹后,self.settings未更新,导致读取不到图片路径

人脸搜索页面底部栏加载出错

人脸搜索页面底部栏加载出错

现象描述

当从人脸搜索页面切出去再切回来,底部信息显示错误。

解决方法

优化底部信息显示逻辑。

当图片加载被打断时,图片会产生无法更改的重叠

当图片加载被打断时,图片会产生无法更改的重叠

问题描述

对人物 A 进行命名,命名结束后,程序会加载合并之后的结果。
当图片仍正在加载时,点击人物 B 的分类结果,则人物 A 的分类结果会置于页面底部,无法通过点击左侧导航栏刷新页面。

人脸搜索功能每次使用都要加载一遍模型,过于耗时

人脸搜索功能每次使用都要加载一遍模型

现象描述

人脸搜索功能每次使用都要加载一遍模型,每次都要花4-5秒等待模型加载,不方便。

解决方法

第一次搜索时加载模型,并保存在变量中,以后搜索时直接进行调用。

为人脸搜索和相似筛查添加计时功能

为人脸搜索和相似筛查添加计时功能

问题描述

现在人脸搜索和相似筛查时,没有计时显示,用户不清楚程序是否正常运行,希望添加计时显示。

软件启动时预加载模型,减少识别时等待时间

软件启动时预加载模型,减少识别时等待时间

问题描述

现阶段,模型会在点击“开始识别后”加载,且加载耗时很长,不方便。

改进方案

将单独开一个QThread用来预加载模型,加载完之后再开始识别

将分类结果排序显示

将分类结果排序显示

问题描述:

现在的分类结果是随机顺序,查找起来不方便。此外,建议将 未命名 分组始终置于最后。

image

加载模型出错呢

Traceback (most recent call last):
File "F:\work\win\wf\py\Picf\gui\uis\windows\main_window\setup_main_window.py", line 460, in run
sorter_main(self.path)
File "F:\work\win\wf\py\Picf\utils\face_functions.py", line 17, in sorter_main
if embedder(image_paths):
File "F:\work\win\wf\py\Picf\utils\embedder.py", line 182, in embedder
pool.map(partial_embeddings, split_data)
File "C:\Users\licl.conda\envs\Picf\lib\multiprocessing\pool.py", line 364, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "C:\Users\licl.conda\envs\Picf\lib\multiprocessing\pool.py", line 771, in get
raise self._value
OSError: No file or directory found at Models/facenet.h5

关于预训练模型的问题

大佬你好,我想学习一下你的代码,但是发现在模型加载的时候缺少两个,一个是facenet.h5 一个是RFB.h5模型,前者我已经找到,但是后者我找了很久都没有找到,想求助一下你,能不能上传一份RFB.h5的模型?

选取文件夹后运行出错 请问是图片的原因吗 我用的是ORL数据集中pgm图片转为的jpg

您好,我下载运行后出现了以下错误,搜索之后并没有找到解决方法
能麻烦您看一下吗
Microsoft Windows [版本 10.0.22621.1413]
(c) Microsoft Corporation。保留所有权利。

E:\Picf_v1.6>conda activate Picf
(Picf) E:\Picf_v1.6>python main.py

Started 3 processes..
multiprocessing.pool.RemoteTraceback:
"""
Traceback (most recent call last):
File "D:\Code\Anaconda3\envs\Picf\lib\multiprocessing\pool.py", line 121, in worker
result = (True, func(*args, **kwds))
File "D:\Code\Anaconda3\envs\Picf\lib\multiprocessing\pool.py", line 44, in mapstar
return list(map(*args))
File "E:\Picf_v1.6\utils\embedder.py", line 71, in save_embeddings
model = load_model("Models/facenet.h5",compile=False)
File "D:\Code\Anaconda3\envs\Picf\lib\site-packages\keras\utils\traceback_utils.py", line 67, in error_handler
raise e.with_traceback(filtered_tb) from None
File "D:\Code\Anaconda3\envs\Picf\lib\site-packages\keras\utils\generic_utils.py", line 792, in func_load
code = marshal.loads(raw_code)
ValueError: bad marshal data (unknown type code)
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "E:\Picf_v1.6\gui\uis\windows\main_window\setup_main_window.py", line 460, in run
sorter_main(self.path)
File "E:\Picf_v1.6\utils\face_functions.py", line 17, in sorter_main
if embedder(image_paths):
File "E:\Picf_v1.6\utils\embedder.py", line 182, in embedder
pool.map(partial_embeddings, split_data)
File "D:\Code\Anaconda3\envs\Picf\lib\multiprocessing\pool.py", line 268, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "D:\Code\Anaconda3\envs\Picf\lib\multiprocessing\pool.py", line 657, in get
raise self._value
ValueError: bad marshal data (unknown type code)

无法运行如何解决呢?

按照说明的步骤操作,最后出现下面的错误,不知道需要如何解决。谢谢!
(Picf) C:\Users\PC_202\APP\Picf_v1.6>python main.py
Traceback (most recent call last):
File "main.py", line 20, in
from gui.uis.windows.main_window.functions_main_window import *
File "C:\Users\PC_202\APP\Picf_v1.6\gui\uis\windows\main_window_init_.py", line 19, in
from . ui_main import UI_MainWindow
File "C:\Users\PC_202\APP\Picf_v1.6\gui\uis\windows\main_window\ui_main.py", line 23, in
from gui.core.qt_core import *
File "C:\Users\PC_202\APP\Picf_v1.6\gui\core\qt_core.py", line 25, in
from PySide6.QtCore import *
ModuleNotFoundError: No module named 'PySide6'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.