# pic-share **Repository Path**: luderson/pic-share ## Basic Information - **Project Name**: pic-share - **Description**: 图片检索与分发系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-11-27 - **Last Updated**: 2024-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 光速检索图片分发系统 这是一个基于BS架构的图片分发系统,支持在浏览器端光速检索(基于SQL.js)。 ## 开源项目如何创造经济效益 没有经济效益的项目就不可能持续,我们团队会提供收费的部署服务,无论是私有部署还是公有云部署。 我们的部署工程师都是在校学生,他们会收取较为廉价的服务费,感谢大家对学生勤工俭学的支持。 但是我们也会提供详尽的部署文档。 ## 部署步骤 为了简化配置,这里直接引入的php7的绿色版,而且配置了imagick和xdebug扩展。运行: ``` ./backend/php7/php.exe -S localhost:9999 -t ./backend ``` 这是直接用php做服务端,如果用Nginx或apache等,请配置站点根目录到/backend内,php扩展装上imagick和xdebug。 启动后 /make.php 这是创建缩略图和图片记录。 make.php的运行过程: // 创建数据库 // 为了方便前端调试,复制一份数据库到前端工程目录下,生产环境还是用后端生成的 TODO LIST: - 前端 - [x] 登录页面 - [x] 页面框架 - [x] 画册功能页 - [x] 自定义大图预览效果 - [ ] 目录式分层浏览(支持切换分层浏览模式、混合模式、左目录右缩略图模式) - [ ] 光速搜索 - [x] 不考虑分页 - [x] 无限下拉 - [ ] 高亮关键词 - [x] 下载大图和原图 - [ ] 适配移动端 - [ ] 支持图片简单编辑(跳转到另一个纯前端应用,又要考虑另一个项目) - [ ] 增加个人图片菜单,只能查看人脸识别中有自己的图片。 - 后端 - [x] 生成数据库 - [x] 生成不同规格的缩略图 - [x] 只生成新的图片的缩略图,不重复生成 - [x] 去掉失效的缩略图 - [x] 优化大图质量 - [x] 账号密码登录 - [ ] 人脸登入并检索图片 - [ ] 登录的原理是拿摄像头的人脸匹配人脸库(相当于新来一张图片匹配),得到subject,再通过subject检索即可。 - [ ] 微信扫码登录(基于工资查询的openid) - [ ] 在生产模式下关闭x-debug输出 - AI - [ ] **人脸识别标记图片** - [ ] 初步选定开源项目CompreFace作为人脸识别的核心,集成进来。 - [x] 完成CompreFace的接口和功能测试,效果非常好,识别速度快,稳定 - [x] 人脸入库:每执行一次就清空人脸样本,并提交特定文件夹下的图片进入人脸库,以文件名作为subject,支持带数字以支持一人多样本。 - [x] 图像人脸识别守护程序:一个定期php脚本,在人脸库增加时不断检测未识别的图像并进行识别。在新增图片时优先识别新增的图片。要单独在一个数据表中保存这些信息。 - [x] 由于该系统比对两张人脸相似度非常高,基本要达到0.993以上的相似度才有价值。因此对于每张目标相片,识别出来的人只有相似度在0.993以上才能正式标记。 - [ ] 验证:是否样本越多,识别准度越高?应该是同一人样本丰富度越高,识别准度越高。 - [x] 在新增了人脸库后,就应该在空闲时间重新全库匹配图片到人脸,不断优化识别效果。 - [ ] 基于微信或O2OA人脸识别登录,根据识别的人脸匹配权限内照片 - [ ] 重复、模糊、过暗、过曝图片筛选 - [ ] 增强样本采样方法,支持在浏览图片时识别人脸区域并标记人名。通过compreFace的detect服务或纯js(优先)进行。 人脸识别: 首先根据证件照标注的名字去采样,再根据得到的人脸数据去匹配照片。 ## 程序、数据结构与算法 从这里可以大概了解本系统的算法: pic表结构(核心数据) - id 自增id - path 统一路径 - deep 路径深度 - size 原始图片文件大小 - mtime 修改时间 - ctime 创建时间 - fcount face count人脸数,-1未识别(默认) >=0为检测到的脸数量(与识别情况无关)。谨慎设置为0,因为标记为0的图片后期将不再重新识别,目前只有在完全检测(是检测不是识别)不到人脸时才标记为0。`特别注意`系统在新增人脸库时会重置这里非0的记录为-1,从而驱动识别守护程序重新识别该图中的人脸。 - subjects 识别出的suject序列,逗号分隔且逗号开始。管理员搜索时可以按全字段like匹配,个人搜索时要按逗号区分到个人。由于compreFace识别亚洲人脸的差异性比较小,subjects只记录识别可信度在0.993的人脸匹配结果。 ## 记事 ### 师生都收益 可以以学生的照片作为采样,去匹配所有的相片。 ### 人脸识别框架 - ``人员图片及特征值`` 指的是已经标记的人脸图片,尽量支持多张。 样张在系统中除了以原图存在,还应以能支持快速匹配的数据存在,如人脸特征值。 - ``图集及各图片中的人脸特征值`` 图集就是相册图片,每张图片都应计算出里面的各个人的人脸位置,人脸特征值。 每次新增图集,都应该提取特征值并入库,然后根据特征库逐一匹配人员。 每次新增人员图片,也重新根据特征库匹配。 记录人脸数:识别图片后要标记该图片中的人脸数,可以用来做统计和筛选。 - 集成开源工具exadel-inc/CompreFace https://github.com/exadel-inc/CompreFace/blob/master/docs/Rest-API-description.md#list-subjects 要注意的是先有subject才有subject sample,否则后端没有考虑到这种出错情况无输出。 ## 参考资料 人脸识别: https://developers.weixin.qq.com/miniprogram/dev/api/ai/face/wx.faceDetect.html ### 大图预览神器 v-viewer https://github.com/mirari/v-viewer 它是基于viewerjs的,所以加按钮和更多配置可见:https://github.com/fengyuanchen/viewerjs v-viewer实现自定义按钮参考https://github.com/fengyuanchen/viewerjs/blob/main/docs/examples/custom-toolbar.html