1
1
package face
2
2
3
- // #cgo !windows pkg-config: opencv4
4
- // #cgo CXXFLAGS: --std=c++11
5
- // #cgo windows CPPFLAGS: -IC:/opencv/build/install/include
6
- // #cgo windows LDFLAGS: -LC:/opencv/build/install/x64/mingw/lib -lopencv_core420 -lopencv_face420 -lopencv_videoio420 -lopencv_imgproc420 -lopencv_highgui420 -lopencv_imgcodecs420 -lopencv_objdetect420 -lopencv_features2d420 -lopencv_video420 -lopencv_dnn420 -lopencv_xfeatures2d420 -lopencv_plot420 -lopencv_tracking420 -lopencv_img_hash420 -lopencv_calib3d420
7
3
// #cgo pkg-config: dlib-1
8
4
// #cgo CXXFLAGS: -std=c++1z -Wall -O3 -DNDEBUG -march=native
9
5
// #cgo LDFLAGS: -ljpeg
@@ -18,8 +14,6 @@ import (
18
14
"math"
19
15
"os"
20
16
"unsafe"
21
-
22
- "gocv.io/x/gocv"
23
17
)
24
18
25
19
const (
@@ -35,6 +29,10 @@ const (
35
29
Male
36
30
)
37
31
32
+ func (g Gender ) String () string {
33
+ return [... ]string {"Female" , "Male" }[g ]
34
+ }
35
+
38
36
// A Recognizer creates face descriptors for provided images and
39
37
// classifies them into categories.
40
38
type Recognizer struct {
@@ -191,43 +189,6 @@ func (rec *Recognizer) detectBuffer(type_ int, imgData []byte) (faces []Face, er
191
189
return
192
190
}
193
191
194
- func (rec * Recognizer ) detectMat (type_ int , mat gocv.Mat ) (faces []Face , err error ) {
195
- cType := C .int (type_ )
196
- var ptr C.image_pointer
197
-
198
- ret := C .facerec_detect_mat (rec .ptr , (* C .image_pointer )(unsafe .Pointer (& ptr )), unsafe .Pointer (mat .Ptr ()), cType )
199
- defer C .free (unsafe .Pointer (ret ))
200
-
201
- if ret .err_str != nil {
202
- defer C .free (unsafe .Pointer (ret .err_str ))
203
- err = makeError (C .GoString (ret .err_str ), int (ret .err_code ))
204
- return
205
- }
206
-
207
- numFaces := int (ret .num_faces )
208
- if numFaces == 0 {
209
- return
210
- }
211
-
212
- // Copy faces data to Go structure.
213
- defer C .free (unsafe .Pointer (ret .rectangles ))
214
-
215
- rDataLen := numFaces * rectLen
216
- rDataPtr := unsafe .Pointer (ret .rectangles )
217
- rData := (* [1 << 30 ]C.long )(rDataPtr )[:rDataLen :rDataLen ]
218
-
219
- for i := 0 ; i < numFaces ; i ++ {
220
- face := Face {imagePointer : & ptr }
221
- x0 := int (rData [i * rectLen ])
222
- y0 := int (rData [i * rectLen + 1 ])
223
- x1 := int (rData [i * rectLen + 2 ])
224
- y1 := int (rData [i * rectLen + 3 ])
225
- face .Rectangle = image .Rect (x0 , y0 , x1 , y1 )
226
- faces = append (faces , face )
227
- }
228
- return
229
- }
230
-
231
192
func (rec * Recognizer ) detectFile (type_ int , file string ) (faces []Face , err error ) {
232
193
if ! fileExists (file ) {
233
194
err = ImageLoadError (fmt .Sprintf ("File '%s' not found!" , file ))
@@ -271,14 +232,6 @@ func (rec *Recognizer) detectFile(type_ int, file string) (faces []Face, err err
271
232
return
272
233
}
273
234
274
- func (rec * Recognizer ) DetectMat (mat gocv.Mat ) (faces []Face , err error ) {
275
- return rec .detectMat (0 , mat )
276
- }
277
-
278
- func (rec * Recognizer ) DetectMatCNN (mat gocv.Mat ) (faces []Face , err error ) {
279
- return rec .detectMat (1 , mat )
280
- }
281
-
282
235
// Detect returns all faces found on the provided image, sorted from
283
236
// left to right. Empty list is returned if there are no faces, error is
284
237
// returned if there was some error while decoding/processing image.
0 commit comments