The face-search recommended in this issue is the Face Search of Aliyun visual intelligence open platform, the models used in the project are open source models, the project supports milvus and proxima vector repositories, and has high customization capabilities.
Face search M:N
- The project is developed in pure Java, eliminating the service instability that comes with using Python.
- 1: N is to find the image consistent with the current user’s face data from the massive portrait data base after collecting someone’s portrait, and find out “who are you” through the database comparison, common face attendance access control of office buildings, community access control, site attendance, countersign and other scenes.
- M: N is the process of facial recognition of all people in the scene through the computer and comparison with the portrait database. M:N as a dynamic face comparison, its usage rate is very high, can be fully applied to a variety of scenarios, such as public security, welcome, robot applications.
Project Introduction
Overall structure image
- Project use components
1. spring boot
2, onnx
3, milvus
4, proxima
- Deep Learning model
1, insightface
2, PCN
Face data management
1. Create a face data
Interface address :/visual/face/create
Request mode : POST
consumes:[“application/json”]
produces:[“*/*”]
Request example :
{
"namespace": "",
"collectionName": "",
"sampleId": "",
"imageBase64": "",
"faceScoreThreshold": 0,
"minConfidenceThresholdWithThisSample": 0,
"maxConfidenceThresholdWithOtherSample": 0,
"faceData": [
{
"key": "",
"value": {}
}
]
}
Parameter name |
Parameter Description |
in |
Must |
data type |
schema |
face |
face |
body |
true |
FaceDataReqVo |
FaceDataReqVo |
Response Example :
{
"code": 0,
"message": "",
"data": {
"namespace": "",
"collectionName": "",
"sampleId": "",
"faceId": "",
"faceScore": 0,
"faceData": [
{
"key": "",
"value": {}
}
]
}
}
Parameter name |
Parameter Description |
Type |
schema |
code |
Return code |
integer(int32) |
integer(int32) |
message |
Return information |
string |
|
data |
data information |
FaceDataRepVo |
FaceDataRepVo |
Search client
- Java dependency, not published to central repository, need to compile and publish to private repository
<dependency>
<groupId>com.visual.face.search</groupId>
<artifactId>face-search-client</artifactId>
<version>1.0.0</version>
</dependency>
Project deployment
- docker deployment, script directory: face-search/scripts
1. Use milvus as a vector search engine
docker-compose -f docker-compose-milvus.yml --compatibility up -d
2、Use proxima as the vector search engine
docker-compose -f docker-compose-proxima.yml --compatibility up -d
- Project compilation
1. Clone the project
git clone https://gitee.com/open-visual/face-search.git
2. Project packaging
cd face-search & & sh scripts/docker_build.sh
Performance optimization
- In order to improve the face detection rate, primary and secondary face detection models are used in the project. At present, two face detection models, insightface and PCN, are implemented. In docker’s service, the default primary service is PCN and the standby service is insightface. insightface is efficient, but the detection rate for faces rotated at a large Angle is not high, while pcn can recognize pictures rotated at a large Angle, but the efficiency is lower. If both images are positive images, you are advised to use insightface as the primary model and pcn as the secondary model. For details about how to switch between the two models, see deployment parameters.
- In the course of testing against milvus and proxima, it was found that proxima was slightly faster than milvus, but the stability was not as good as milvus, and milvus was still recommended as a vector search engine for online service use.