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.
 
 
 
 

129 lines
3.3 KiB

# 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:
```shell script
createuser -D -P -S faceserver
createdb -E UTF8 -O faceserver faceserver
```
Create API server tables:
```shell script
psql -U faceserver -h localhost faceserver <../init.sql
```
## Instalation
### Docker image
Build docker image - preferred method:
```shell script
docker build -t apiserver:latest .
```
### Local compilation
Golang 1.12 is required. Run:
```shell script
go build main.go
```
## HTTP API
### Learn
```shell script
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:
```json
{
"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
```shell script
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:
```json
{
"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](../LICENSE).