本项目是阿里云视觉智能开放平台的人脸1:N的开源替代,项目中使用的模型均为开源模型,项目支持milvus和proxima向量存储库,并具有较高的自定义能力。
项目使用纯Java开发,免去使用Python带来的服务不稳定性。
1:N是通过采集某人的人像后,从海量的人像数据底库中找到与当前使用者人脸数据相符合的图像,通过数据库的比对找出"你是谁",常见的办公楼宇的人脸考勤门禁、社区门禁、工地考勤、会签等等场景。
M:N 是通过计算机对场景内所有人进行面部识别并与人像数据库进行比对的过程。M:N作为一种动态人脸比对,其使用率非常高,能充分应用于多种场景,例如公共安防,迎宾,机器人应用等。
欢迎大家贡献代码,如果你觉得项目还不错,请给个star。
1、spring boot
2、onnx
3、milvus
4、proxima
2、PCN
在线文档:文档-1.0.0
swagger文档:启动项目且开启swagger,访问:host:port/doc.html, 如 http://127.0.0.1:8080/doc.html
<dependency>
<groupId>com.visual.face.search</groupId>
<artifactId>face-search-client</artifactId>
<version>1.0.0</version>
</dependency>
使用restful接口:文档-1.0.0
1、使用milvus作为向量搜索引擎
docker-compose -f docker-compose-milvus.yml --compatibility up -d
2、使用proxima作为向量搜索引擎
docker-compose -f docker-compose-proxima.yml --compatibility up -d
1、克隆项目
git clone https://gitee.com/open-visual/face-search.git
2、项目打包
cd face-search && sh scripts/docker_build.sh
参数 | 描述 | 默认值 | 可选值 |
---|---|---|---|
VISUAL_SWAGGER_ENABLE | 是否开启swagger | true | |
SPRING_DATASOURCE_URL | 数据库地址 | ||
SPRING_DATASOURCE_USERNAME | 数据库用户名 | ||
SPRING_DATASOURCE_PASSWORD | 数据库密码 | ||
VISUAL_ENGINE_SELECTED | 向量存储引擎 | proxima | proxima,milvus |
VISUAL_ENGINE_PROXIMA_HOST | PROXIMA地址 | VISUAL_ENGINE_SELECTED=proxima时生效 | |
VISUAL_ENGINE_PROXIMA_PORT | PROXIMA端口 | 16000 | VISUAL_ENGINE_SELECTED=proxima时生效 |
VISUAL_ENGINE_MILVUS_HOST | MILVUS地址 | VISUAL_ENGINE_SELECTED=milvus时生效 | |
VISUAL_ENGINE_MILVUS_PORT | MILVUS端口 | 19530 | VISUAL_ENGINE_SELECTED=milvus时生效 |
VISUAL_MODEL_FACEDETECTION_NAME | 人脸检测模型名称 | PcnNetworkFaceDetection | PcnNetworkFaceDetection,InsightScrfdFaceDetection |
VISUAL_MODEL_FACEDETECTION_BACKUP_NAME | 备用人脸检测模型名称 | InsightScrfdFaceDetection | PcnNetworkFaceDetection,InsightScrfdFaceDetection |
VISUAL_MODEL_FACEKEYPOINT_NAME | 人脸关键点模型名称 | InsightCoordFaceKeyPoint | InsightCoordFaceKeyPoint |
VISUAL_MODEL_FACEALIGNMENT_NAME | 人脸对齐模型名称 | Simple106pFaceAlignment | Simple106pFaceAlignment,Simple005pFaceAlignment |
VISUAL_MODEL_FACERECOGNITION_NAME | 人脸特征提取模型名称 | InsightArcFaceRecognition | InsightArcFaceRecognition |
项目中为了提高人脸的检出率,使用了主要和次要的人脸检测模型,目前实现了两种人脸检测模型insightface和PCN,在docker的服务中,默认主服务为PCN,备用服务为insightface。insightface的效率高,但针对于旋转了大角度的人脸检出率不高,而pcn则可以识别大角度旋转的图片,但效率低一些。若图像均为正脸的图像,建议使用insightface为主模型,pcn为备用模型,如何切换,请查看部署参数。
在测试过程中,针对milvus和proxima,发现proxima的速度比milvus稍快,但稳定性没有milvus好,线上服务使用时,还是建议使用milvus作为向量检索引擎。
测试用例:face-search-test测试用例-FaceSearchExample
Face-Resources Following is a growing list of some of the materials I found on the web for research on face recognition algorithm. Papers DeepFace.A work from Facebook. FaceNet.A work from Google. One
# encoding:utf-8 # !/usr/local/bin/python3 # 百度云:人脸搜索服务 # 应用名称:人脸开锁 import urllib3 from urllib.parse import urlencode import urllib import urllib.request import sys import ssl import base64 import
安装face_recognition库 首先安装cmake库:pip install cmake 安装boost库:pip install boost 安装dlib库:Pip install dlib 这个方法大多数人是不行的,所以直接用Anaconda安装 在命令行输入:anaconda search -t conda dlib 用来搜索dlib可使用的版本 再输入:conda insta
原文章地址:https://www.pyimagesearch.com/2018/06/18/face-recognition-with-opencv-python-and-deep-learning/ (含代码) 注:只解析图片识别,视频识别暂不解析 we are not actually training a network here — the network has already bee
1、face_recognition 人脸识别学习 检测人脸:face_locations = face_recognition.face_locations(frame) 返回值 (top,bottom,right,left) 人脸检测,可用opencv替换: 优势:pc端速度提高了一倍,树莓派上提高了接近九倍(520ms - 67ms) #opencv的人脸检测 def det
网址:deepinsight/insightface 环境准备: (1)GPU,由于要用到GPU,所以GPU的环境比较重要。先要安装GPU的驱动,相应的教程,我在前几篇博客里写到,这里不再说明。 需要说明的是,如果你换过内核版本了,有些内核源码没有,CUDA10,9之间的区别,你需要重新安装内核DEV版本,这样在安装GPU驱动的时候,就会源码可以被驱动使用,这样才可以成功安装GPU的驱动。 (2
论文阅读 [TPAMI-2022] Towards Age-Invariant Face Recognition 论文搜索(studyai.com) 搜索论文: Towards Age-Invariant Face Recognition 搜索论文: http://www.studyai.com/search/whole-site/?q=Towards+Age-Invariant+Face+Rec
介绍 用于搜索场景的输入框组件。 引入 import { createApp } from 'vue'; import { Search } from 'vant'; const app = createApp(); app.use(Search); 代码演示 基础用法 v-model 用于控制搜索框中的文字,background 可以自定义搜索框外部背景色。 <van-search v-mo
Search 搜索 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 通过placeholder参数设置占位内容 通过v-model双向绑定一个变量值,设置初始化时搜索框的值,如果初始内容为空,那么请绑定一个值为空字符的变量。 说明: 因为是双向绑定的,所以当组件内容输入框内容变化时,也会实时的反映到绑定的keyword
import { Search } from 'feui'; components: { [Search.name]: Search } 代码演示 浮动到顶端用法 <fe-search @result-click="resultClick" @on-change="getResult" :results="results" v-model="value"
定义 搜索框。 图片展示 代码演示 import Search from 'pile/dist/components/search' <Search onChangeHandle={function(text){console.log("text:" + text)}} onClearHandle={function(){console.log("clearHandle")}} on
search这部分是利用小程序input组件实现,在下面的示例中主要使用了focus和bindinput两个属性,由于mpvue从底层支持 Vue.js 语法和构建工具体系,因此可以用vue的v-model进行双向数据绑定,示例如下: <template> <div class="page"> <div class="page__hd"> <div class="page_
描述 (Description) 框架7允许使用searchbar类搜索元素。 搜索栏参数 S.No 参数和描述 类型 默认 1 searchList 它搜索列表的CSS选择器或HTML元素。 字符串或HTML元素 - 2 searchIn 您可以搜索CSS选择器的列表视图元素,也可以通过传递.item-title , .item-text类来搜索元素。 string '.item-title'