-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
77 lines (55 loc) · 1.62 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package main
import (
"image"
"image/color"
"log"
"gocv.io/x/gocv"
)
/*
INSTALATION:
1)go install gocv.io/x/gocv
2)export CGO_CPPFLAGS="-I/usr/local/include"
3)export CGO_LDFLAGS="-L/usr/local/lib -lopencv_core -lopencv_face -lopencv_videoio -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_objdetect -lopencv_features2d -lopencv_video -lopencv_dnn -lopencv_xfeatures2d"
4)sudo pacman -S opencv python-opencv
*/
func applyGrayScale(img *gocv.Mat) *gocv.Mat{
log.Println("Applyng gray scale...")
grayImg := gocv.NewMat()
gocv.CvtColor(*img, &grayImg, gocv.ColorBGRToGray)
return &grayImg
}
func faceRecognition(img *gocv.Mat){
log.Println("Performing face detection...")
trainedXMLfile := "./trained_model/frontal.xml"
classifier := gocv.NewCascadeClassifier()
defer classifier.Close()
if !classifier.Load(trainedXMLfile){
log.Fatalln("Error to load classifier")
}
rects := classifier.DetectMultiScale(*img)
drawRectanglesAroundDetectedFaces(rects, img)
}
func drawRectanglesAroundDetectedFaces(rect []image.Rectangle, img *gocv.Mat){
for _, r := range rect{
gocv.Rectangle(img, r, color.RGBA{255, 0, 0, 0}, 2)
}
}
func showImageDetected(img *gocv.Mat){
window := gocv.NewWindow("Face detection")
defer window.Close()
window.IMShow(*img)
// wait for a press key
window.WaitKey(0)
}
func main(){
log.Println("starting recognition...")
img := gocv.IMRead("./face.jpg", gocv.IMReadColor)
if img.Empty() {
log.Fatalln("error to open image")
}
defer img.Close()
log.Println("Image has been found!")
defer applyGrayScale(&img).Close()
faceRecognition(&img)
showImageDetected(&img)
}