1
0
Fork 0
Face identification and recognition scalable server with multiple face directories. https://github.com/ehp/faceserver
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Petr Masopust 99c6b0945c Faceserver docker files 6 years ago
..
apiserver Faceserver docker files 6 years ago
Dockerfile Faceserver docker files 6 years ago
README.md Faceserver docker files 6 years ago
apiserver.yaml Faceserver docker files 6 years ago
go.mod Faceserver apiserver initial import 6 years ago
main.go Faceserver docker files 6 years ago

README.md

API server

Frontend server written in golang. Technology demo - do not use in production !

Main purpose:

  • serve stored images
  • send images to vectorizer
  • store vectors in database
  • compare vectors and return ids

No local state, can be scaled.

Configuration

Edit apiserver.yaml file:

Key Value Description
port 8080 Port to listen
vectorizer http://vectorizer:8080/vectorize Vectorizer url
dbuser faceserver DB user
dbpassword secret DB password
dbname faceserver DB name
dbhost db DB host

Do not change configuration if you want run prepared docker-compose.

DB configuration

Only postgresql is supported now. Create new role and user:

createuser -D -P -S faceserver
createdb -E UTF8 -O faceserver faceserver

Create API server tables:

psql -U faceserver -h localhost faceserver <../init.sql

Instalation

Docker image

Build docker image - preferred method:

docker build -t apiserver:latest .

Local compilation

Golang 1.12 is required. Run:

go build main.go

HTTP API

Learn

curl -X POST -F 'person=PID' -F 'directory=DIR' -F 'file=@portrait.jpg' http://localhost:8080/learn

Replace PID with person's id (e.g. database id or name) and DIR with your directory name (e.g. company name). People are recognized only within same directory. png or jpeg images are supported. Only images with one face are allowed for learning !

Result:

{
"status":"OK",
"url":"/files/01e66d8f-536e-4e5ab3b1-521672739d15.jpg",
"filename":"photo.jpg",
"directory":"mydir",
"persons":[
{"id":"PID","box":[0,15,65,88],"score":0.9909800887107849}
]}
Field Description
status Status message - either OK or error text
url Relative url to original image
filename Original image filename
directory Directory name
persons Recognized people array
id Person's id
box Box around face
score Face detection score (i.e. probability)

Recognize

curl -X POST -F 'directory=DIR' -F 'file=@photo.jpg' http://localhost:8080/recognize

Replace DIR with your directory name (e.g. company name). People are recognized only within same directory. For each detected face the most probable person's id is returned. png or jpeg images are supported.

Result:

{
"status":"OK",
"url":"/files/00636b47-e6a5-4fab-8a02-9e44d052c193.jpg",
"filename":"photo.jpg",
"directory":"mydir",
"persons":[
{"id":"PID1","box":[2797,1164,2918,1285],"score":0.999998927116394,"probability":0.8342},
{"id":"PID2","box":[2398,1854,2590,2046],"score":0.9999780654907227,"probability":0.32546},
{"id":"PID3","box":[1753,1148,1905,1300],"score":0.9999217987060547,"probability":0.65785}
]}
Field Description
status Status message - either OK or error text
url Relative url to original image
filename Original image filename
directory Directory name
persons Recognized people array
id Person's id
box Box around face
score Face detection score (i.e. probability)
probability Person recognition probability

Files

/files/... path contains all learned or recognized images.

Licensing

Code in this repository is licensed under the Apache 2.0. See LICENSE.