go-recognizer
                                
                                 go-recognizer copied to clipboard
                                
                                    go-recognizer copied to clipboard
                            
                            
                            
                        Face detection and recognition using golang
Face detection and recognition using golang
Requirements
go-recognizer require go-face to compile. go-face need to have dlib (>= 19.10) and libjpeg development packages installed.
Ubuntu 18.10+, Debian sid
Latest versions of Ubuntu and Debian provide suitable dlib package so just run:
# Ubuntu
sudo apt-get install libdlib-dev libblas-dev libatlas-base-dev liblapack-dev libjpeg-turbo8-dev
# Debian
sudo apt-get install libdlib-dev libblas-dev libatlas-base-dev liblapack-dev libjpeg62-turbo-dev
macOS
Make sure you have Homebrew installed.
brew install dlib
Windows
Make sure you have MSYS2 installed.
- Run MSYS2 MSYSshell from Start menu
- Run pacman -Syuand if it asks you to close the shell do that
- Run pacman -Syuagain
- Run pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-dlib
- 
- If you already have Go and Git installed and available in PATH uncomment
set MSYS2_PATH_TYPE=inheritline inmsys2_shell.cmdlocated in MSYS2 installation folder
- Otherwise run pacman -S mingw-w64-x86_64-go git
 
- If you already have Go and Git installed and available in PATH uncomment
- Run MSYS2 MinGW 64-bitshell from Start menu to compile and use go-face
Other systems
Try to install dlib/libjpeg with package manager of your distribution or compile from sources. Note that go-face won't work with old packages of dlib such as libdlib18. Alternatively create issue with the name of your system and someone might help you with the installation process.
Usage
To use go-recognizer in your Go code:
import "github.com/leandroveronezi/go-recognizer"
To install go-recognizer in your $GOPATH:
go get github.com/leandroveronezi/go-recognizer
Models
Currently shape_predictor_5_face_landmarks.dat, mmod_human_face_detector.dat and
dlib_face_recognition_resnet_model_v1.dat are required. You may download them
from dlib-models repo:
mkdir models && cd models
wget https://github.com/davisking/dlib-models/raw/master/shape_predictor_5_face_landmarks.dat.bz2
bunzip2 shape_predictor_5_face_landmarks.dat.bz2
wget https://github.com/davisking/dlib-models/raw/master/dlib_face_recognition_resnet_model_v1.dat.bz2
bunzip2 dlib_face_recognition_resnet_model_v1.dat.bz2
wget https://github.com/davisking/dlib-models/raw/master/mmod_human_face_detector.dat.bz2
bunzip2 mmod_human_face_detector.dat.bz2
Examples
Face detection
package main
import (
	"fmt"
	"github.com/leandroveronezi/go-recognizer"
	"path/filepath"
)
const fotosDir = "fotos"
const dataDir = "models"
func main() {
	rec := recognizer.Recognizer{}
	err := rec.Init(dataDir)
	if err != nil {
		fmt.Println(err)
		return
	}
	rec.Tolerance = 0.4
	rec.UseGray = true
	rec.UseCNN = false
	defer rec.Close()
	faces, err := rec.RecognizeMultiples(filepath.Join(fotosDir, "elenco3.jpg"))
	if err != nil {
		fmt.Println(err)
		return
	}
	img, err := rec.DrawFaces2(filepath.Join(fotosDir, "elenco3.jpg"), faces)
    	if err != nil {
		fmt.Println(err)
		return
	}
	
	rec.SaveImage("faces2.jpeg", img)
}

Face recognition
package main
import (
	"fmt"
	"github.com/leandroveronezi/go-recognizer"
	"path/filepath"
)
const fotosDir = "fotos"
const dataDir = "models"
func addFile(rec *recognizer.Recognizer, Path, Id string) {
	err := rec.AddImageToDataset(Path, Id)
	if err != nil {
		fmt.Println(err)
		return
	}
}
func main() {
	rec := recognizer.Recognizer{}
	err := rec.Init(dataDir)
	if err != nil {
		fmt.Println(err)
		return
	}
	rec.Tolerance = 0.4
	rec.UseGray = true
	rec.UseCNN = false
	defer rec.Close()
	addFile(&rec, filepath.Join(fotosDir, "amy.jpg"), "Amy")
	addFile(&rec, filepath.Join(fotosDir, "bernadette.jpg"), "Bernadette")
	addFile(&rec, filepath.Join(fotosDir, "howard.jpg"), "Howard")
	addFile(&rec, filepath.Join(fotosDir, "penny.jpg"), "Penny")
	addFile(&rec, filepath.Join(fotosDir, "raj.jpg"), "Raj")
	addFile(&rec, filepath.Join(fotosDir, "sheldon.jpg"), "Sheldon")
	addFile(&rec, filepath.Join(fotosDir, "leonard.jpg"), "Leonard")
	rec.SetSamples()
	faces, err := rec.ClassifyMultiples(filepath.Join(fotosDir, "elenco3.jpg"))
	if err != nil {
		fmt.Println(err)
		return
	}
	img, err := rec.DrawFaces(filepath.Join(fotosDir, "elenco3.jpg"), faces)
    	if err != nil {
		fmt.Println(err)
		return
	}
	
	rec.SaveImage("faces.jpg", img)
}

