1 Star 0 Fork 30

清雨傲客 / compreface

forked from Gitee 极速下载 / compreface 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

CompreFace - open-source face recognition system from Exadel

angular-logo
CompreFace is a free face recognition service that can be easily integrated into
any system without prior machine learning skills.

Official website

Contributing · Submit an Issue · Blog · Community chat

GitHub license   GitHub contributors  


CompreFace

CompreFace

Overview

CompreFace is docker-based application for facial recognition that can be integrated as a standalone server or deployed on the cloud and can be set up and used without machine learning expertise. Our method is based on deep neural networks, which is one of the most popular facial recognition methods and provides a convenient REST API for Face Collection training and face recognition. We also provide a roles system with which you can easily control who has access to the Face Collection. Every user can create their own models and train them on different subsets of input data.

Feedback survey

We are constantly improving our product. But for better understanding which features we should add or improve we need your help! Feedback form is totally anonymous, it will take just 2 minutes of your time to answer the questions: https://forms.gle/ybAEPc3XmzEcpv4M8

Features

The system can accurately identify people even when it is only given one example of their face. CompreFace:

  • Uses open-source code and operates fully on-premises for data security
  • Can be set up and used without machine learning expertise
  • Uses one of the most popular face recognition methods for highest accuracy
  • Includes a UI panel with roles for access control
  • Starts quickly with one docker command

Getting started

To get started (Linux, MacOS):

  1. Install Docker and Docker-Compose
  2. Download the archive from our latest release: https://github.com/exadel-inc/CompreFace/releases
  3. Unzip the archive
  4. Run command: docker-compose up -d
  5. Open in your browser: http://localhost:8000/login

Getting started for Contributors:

  1. Install Docker and Docker-Compose
  2. Clone repository
  3. Open dev folder
  4. Run command: docker-compose up --build
  5. Open in your browser: http://localhost:8000/login

To get started (Windows):

  1. Install Docker
  2. Download the archive from our latest release: https://github.com/exadel-inc/CompreFace/releases
  3. Unzip the archive
  4. Run Docker
  5. Windows search bar-> cmd->in the Command prompt-> cd ->paste the path to the extracted zip folder
  6. Run command: docker-compose up -d
  7. Open http://localhost:8000/login

** Tips for Windows** (use Git Bash terminal)

  1. Turn of the git autocrlf with command: git config --global core.autocrlf false
  2. Make sure all your containers are down: $ docker ps
  3. In case some containers are working, they should be stopped: $ docker-compose down
  4. Clean all local datebases and images: docker system prune --volumes
  5. Last line in /dev/start.sh file change to docker-compose -f docker-compose.yml up --remove-orphans --build
  6. Go to Dev folder cd dev
  7. Run sh start.sh and make sure http://localhost:8000/ starts
  8. Stopped all containers: $ docker-compose down
  9. Run sh start--dev.sh and make sure http://localhost:4200/ starts

Simple tutorial of usage

Step 1. You need to sign up to the system (First user in CompareFace admin has Owner role, but it is possible to change the role) and then LogIn with created account or just use the existing one. After that system redirects you to the main page.

Step 2. Create an application (left section) with "Create" link at the bottom of the page. An application is where you can create and manage your face collections.

Step 3. Enter you application with double click on the name of the application. Here you will have two possibilities. The first one is to add new users to your application and manage permissions ( Global Owner and Administrator roles already have access to any application without invite, user role doesn't.) The second one is to create face collections.

Step 4. After creating new collection, it appears at the Face Collections List created within the application with an appropriate name and API key. The user has the possibility to add new Face or to test the existing one (three dots on right side and click "test" link). This option will lead the user to Test Face Collection page, where is the drag&drop to upload image with face to recognize. We recommend an image size no higher than 5MB, as it could slow down the request process. Supported image formats are JPEG/PNG/JPG/ICO/BMP/GIF/TIF/TIFF format.

Step 5. Upload your photo and let Face Recognition system compare faces. When you have face contour detection enabled (green borders around the face). These points represent the shape of the feature. API requests within the solution use RESTful API, and backend data collection. Read more about API With Face Recognition system APIs you can add Face Recognition capabilities using simple API Calls.

The following result Json illustrates how these points map to a face, where

  1. subject -person identificator
  2. similarity - gives the confidence that this is the found subject
  3. probability - gives the confidence that this is a face
  4. x_min, x_max, y_min, y_max are coordinates of the face in the image

"result": [
{
  "box": {
    "probability": 0.99583,
    "x_max": 551,
    "y_max": 364,
    "x_min": 319,
    "y_min": 55
  },
  "faces": [
  {
    "similarity": 0.99593,
    "face_name": "lisan"
  }
  ]
}
]

The following JavaScript code example allows to add new face to Face Collection.


 async function saveNewImageToFaceCollection() {
  let name = encodeURIComponent('John');
  let formData = new FormData();
  let photo = document.getElementById("fileDropRef").files[0];

    formData.append("photo", photo);

    try {
       let r = await fetch('http://localhost:8000/api/v1/faces/?subject=`${name}`', {method: "POST", body: formData});
     } catch(e) {
       console.log('Houston, we have a problem...:', e);
    }

 }

This function sends image to our server and shows result in text area:


function recognizeFace(input) {

  async function getData() {
    let response = await fetch('http://localhost:8000/api/v1/recognize')
    let data = await response.json()
    return data
  };

  let result = Promise.resolve(response)
    result.then(data => {
    document.getElementById("result-textarea-request").innerHTML = JSON.stringify(data);
  });
}

How it works

Finding a face

Detecting one or more faces in an image. Multi-task Cascaded Convolutional Neural Networks (MTCNN) was used for face recognition.

Posing and projecting faces

Normalization of all found faces with rotate, scale and shear.

Calculate embedding from faces

Calculating embedding and classifying the face based on extracted features. We took CNN for face recognition and the last 3 fully connected layers were removed. As a result, - NN calculates embedding.

Use embedding for recognize/verify faces using embedding

Recognizing the person in the photo. We calculate Euclidean distance using Nd4j to determine the level of matching faces.

ML technologies

Used ML Papers and Algorithms

  • FaceNet: A Unified Embedding for Face Recognition and Clustering Florian Schroff, Dmitry Kalenichenko, James Philbin (Submitted on 17 Jun 2015)

  • Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks Kaipeng Zhang, Zhanpeng Zhang, Zhifeng Li, Yu Qiao (Submitted on 11 Apr 2016)

  • Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning Christian Szegedy, Sergey Ioffe, Vincent Vanhoucke, Alex Alemi (Submitted on 23 Aug 2016)

Technologies

Architecture diagram

architecture

Database

  • PostgreSQL

Admin server

  • Java 11
  • Spring Boot

API server

  • Java 11
  • Spring Boot
  • Nd4j

Embedding server

Rest API description

By using the created API key, the user can add an image as an example of the face, retrieve a list of saved images, recognize a face from the uploaded image the Face Collection, and delete all examples of the face by the name.

Add an example of the face

Creates an example of the face by saving images. To train the system, you can add as many images as you want.

curl  -X POST "http://localhost:8000/api/v1/faces?subject=<subject>&det_prob_threshold=<det_prob_threshold>" \
-H "Content-Type: multipart/form-data" \
-H "x-api-key: <faces_collection_api_key>" \
-F file=@<local_file> 
Element Description Type Required Notes
Content-Type header string required multipart/form-data
x-api-key header string required api key of the Face Collection, created by the user
subject param string required is the name you assign to the image you save
det_prob_ threshold param string optional minimum required confidence that a recognized face is actually a face. Value is between 0.0 and 1.0.
file body image required allowed image formats: jpeg, jpg, ico, png, bmp, gif, tif, tiff, webp. Max size is 5Mb

Response body on success:

{
  "image_id": "<UUID>",
  "subject": "<subject>"
}
Element Type Description
image_id UUID UUID of uploaded image
subject string of saved image

Recognize faces from given image

Recognizes faces from the uploaded image.

curl  -X POST "http://localhost:8000/api/v1/faces/recognize?limit=<limit>&prediction_count=<prediction_count>&det_prob_threshold=<det_prob_threshold>" \
-H "Content-Type: multipart/form-data" \
-H "x-api-key: <faces_collection_api_key>" \
-F file=<local_file>
Element Description Type Required Notes
Content-Type header string required multipart/form-data
x-api-key header string required api key of the Face Collection, created by the user
file body image required allowed image formats: jpeg, jpg, ico, png, bmp, gif, tif, tiff, webp. Max size is 5Mb
limit param integer optional maximum number of faces with best similarity in result. Value of 0 represents no limit. Default value: 0
det_prob_ threshold param string optional minimum required confidence that a recognized face is actually a face. Value is between 0.0 and 1.0.
prediction_count param integer optional maximum number of predictions per faces. Default value: 1

Response body on success:

{
  "result": [
    {
      "box": {
        "probability": <probability>,
        "x_max": <integer>,
        "y_max": <integer>,
        "x_min": <integer>,
        "y_min": <integer>
      },
      "faces": [
        {
          "similarity": <similarity1>,
          "subject": <subject1>	
        },
        ...
      ]
    }
  ]
}
Element Type Description
box object list of parameters of the bounding box for this face
probability float probability that a found face is actually a face
x_max, y_max, x_min, y_min integer coordinates of the frame containing the face
faces list list of similar faces with size of <prediction_count> order by similarity
similarity float similarity that on that image predicted person
subject string name of the subject in Face Collection

List of all saved faces

Retrieves a list of images saved in a Face Collection

curl  -X GET "http://localhost:8000/api/v1/faces" \
-H "x-api-key: <faces_collection_api_key>" \
Element Description Type Required Notes
x-api-key header string required api key of the Face Collection, created by the user

Response body on success:

{
  "faces": [
    {
      "image_id": <image_id>,
      "subject": <subject>
    },
    ...
  ]
}
Element Type Description
image_id UUID UUID of the face
subject string of the person, whose picture was saved for this api key

Delete all examples of the face by name

Deletes all image examples of the .

curl  -X DELETE "http://localhost:8000/api/v1/faces?subject=<subject>" \
-H "x-api-key: <faces_collection_api_key>"
Element Description Type Required Notes
x-api-key header string required api key of the Face Collection, created by the user
subject param string optional is the name you assign to the image you save. Caution! If this parameter is absent, all faces in Face Collection will be removed

Response body on success:

[
  {
    "image_id": <image_id>,
    "subject": <subject>
  },
  ...
]
Element Type Description
image_id UUID UUID of the removed face
subject string of the person, whose picture was saved for this api key

Delete an example of the face by ID

Deletes an image by ID.

curl  -X DELETE "http://localhost:8000/api/v1/faces/<image_id>" \
-H "x-api-key: <faces_collection_api_key>"
Element Description Type Required Notes
x-api-key header string required api key of the Face Collection, created by the user
image_id variable UUID required UUID of the removing face

Response body on success:

{
  "image_id": <image_id>,
  "subject": <subject>
}
Element Type Description
image_id UUID UUID of the removed face
subject string of the person, whose picture was saved for this api key

Verify faces from given image

Compares faces from the uploaded image with face in saved image id.

curl  -X POST "http://localhost:8000/api/v1/faces/<image_id>/verify?limit=<limit>&det_prob_threshold=<det_prob_threshold>" \
-H "Content-Type: multipart/form-data" \
-H "x-api-key: <faces_collection_api_key>" \
-F file=<local_file>
Element Description Type Required Notes
Content-Type header string required multipart/form-data
x-api-key header string required api key of the Face Collection, created by the user
image_id variable UUID required UUID of the verifying face
file body image required allowed image formats: jpeg, jpg, ico, png, bmp, gif, tif, tiff, webp. Max size is 5Mb
limit param integer optional maximum number of faces with best similarity in result. Value of 0 represents no limit. Default value: 0
det_prob_ threshold param string optional minimum required confidence that a recognized face is actually a face. Value is between 0.0 and 1.0.

Response body on success:

{
  "result": [
    {
      "box": {
        "probability": <probability>,
        "x_max": <integer>,
        "y_max": <integer>,
        "x_min": <integer>,
        "y_min": <integer>
      },
      "similarity": <similarity1>
    },
    ...
  ]
}
Element Type Description
box object list of parameters of the bounding box for this face
probability float probability that a found face is actually a face
x_max, y_max, x_min, y_min integer coordinates of the frame containing the face
similarity float similarity that on that image predicted person
subject string name of the subject in Face Collection

Contributing

Contributions are welcome and greatly appreciated. After creating your first contributing Pull Request you will receive a request to sign our Contributor License Agreement by commenting your PR with a special message.

Formatting standards

For java just import dev/team_codestyle.xml file in your IntelliJ IDEA

Report Bugs

Report bugs at https://github.com/exadel-inc/CompreFace/issues.

If you are reporting a bug, please include:

  • Your operating system name and version.
  • Any details about your local setup that might be helpful in troubleshooting.
  • Detailed steps to reproduce the bug.

Submit Feedback

The best way to send feedback is to file an issue at https://github.com/exadel-inc/CompreFace/issues.

If you are proposing a feature, please:

  • Explain in detail how it should work.
  • Keep the scope as narrow as possible, to make it easier to implement.

License info

CompreFace is Open Source software released under the Apache 2.0 license.

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

CompreFace 是一个基于 Docker 的开源人脸识别应用,由 Exadel 公司开源 展开 收起
Java
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/522497065/compreface.git
git@gitee.com:522497065/compreface.git
522497065
compreface
compreface
master

搜索帮助