From 29dfebcebf17690e4f5c72192f2bb4547ef51eea Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期六, 06 七月 2019 14:03:22 +0800
Subject: [PATCH] test cut face
---
controllers/fileController.go | 118 ++++++++++++++++++++-------------------
extend/util/util.go | 46 +++++++++++++++
2 files changed, 106 insertions(+), 58 deletions(-)
diff --git a/controllers/fileController.go b/controllers/fileController.go
index c21b53f..868bd7a 100644
--- a/controllers/fileController.go
+++ b/controllers/fileController.go
@@ -103,14 +103,31 @@
//灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
fileBytes, _ := ioutil.ReadAll(file)
- faceExtArr, err := getFaceFeaFromSdk(fileBytes)
+ faceExtArr, err, pI := getFaceFeaFromSdk(fileBytes)
if err ==nil && len(faceExtArr) >0 {
var faceBase64= ""
+ var field = ""
+ var rcFace *protomsg.Rect
for _,r := range faceExtArr {
+ rcFace = r.Pos.Pos.RcFace
faceBase64 = base64.StdEncoding.EncodeToString(r.Feats)//鑾峰彇鎻愬彇鍒扮殑绗竴寮犱汉鑴哥壒寰�
break
}
- util.ResponseFormat(c,code.Success,faceBase64)
+ //鏍规嵁浜鸿劯鍧愭爣鎵e嚭浜鸿劯灏忓浘
+ cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+ fileInfo, e := esutil.PostFormData(weedfsUri, "娴嬭瘯浜鸿劯鍒囧浘", "file", cutFaceImgData)
+ if e != nil {
+ fmt.Println(e.Error())
+
+ } else {
+ field = fileInfo[picUrlField].(string) // 鏂囦欢璺緞
+ }
+ if strings.Contains(field,"/"){
+ idx := strings.Index(field, "/")
+ field = field[idx+1:]
+ }
+ fmt.Println("field:",field)
+ util.ResponseFormat(c,code.Success,field + ";" + faceBase64)
} else {
util.ResponseFormat(c,code.ComError,"鏈彁鍙栧埌浜鸿劯")
}
@@ -123,7 +140,6 @@
}*/
func uploadFileReturnAddr(file multipart.File, filename string, tableId string) (string, map[string]interface{}, error) {
-
defer file.Close()
field := ""
// weedfs 涓婁紶
@@ -131,83 +147,69 @@
if err !=nil {
return "",nil,err
}
- fileInfo, e := esutil.PostFormData(weedfsUri, filename, "file", fileBytes)
+
+ //灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
+ var faceBase64=""
+ faceExtArr, err,pI := getFaceFeaFromSdk(fileBytes)
+ if faceExtArr ==nil {
+ return "",nil,errors.New("NotFeatureFindError")
+ }
+ var rcFace *protomsg.Rect
+ if err ==nil && len(faceExtArr) >0 {
+ for _,r := range faceExtArr {
+ //鎷垮埌浜鸿劯鐨勫潗鏍�
+ rcFace = r.Pos.Pos.RcFace
+
+ faceBase64 = base64.StdEncoding.EncodeToString(r.Feats)//鑾峰彇鎻愬彇鍒扮殑绗竴寮犱汉鑴哥壒寰�
+ break
+ }
+ }
+ //鏍规嵁浜鸿劯鍧愭爣鎵e嚭浜鸿劯灏忓浘
+ cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+ fileInfo, e := esutil.PostFormData(weedfsUri, filename, "file", cutFaceImgData)
if e != nil {
fmt.Println(e.Error())
return "", nil, e
} else {
field = fileInfo[picUrlField].(string) // 鏂囦欢璺緞
}
-
- if field != "" {
- // 杩斿洖鐗瑰緛鍊� fileInfo["point"] = v.RcFace fileInfo["feature"] = feat
-
- /*features := gorun.GetSimpleFaceDetect(picIp+field) // 鐗瑰緛鍊� // linux
- if len(features) == 0 { // linux
- return field,nil,errors.New("NotFeatureFindError") // linux
- }else if len(features) > 1 { // linux
- return field,nil,errors.New("TooManyFeatureFindError") // linux
- } // linux
- feat := features[0]["feature"].([]byte) // linux
- if len(feat) != 2560 { // linux
- return field,nil,errors.New("NotFeatureFindError")
-
- } */ // linux
- if strings.Contains(field,"/"){
- idx := strings.Index(field, "/")
- field = field[idx+1:]
- }
- fmt.Println("field:",field)
- //imgB, _ := ioutil.ReadAll(file)
- //fmt.Println("img.length:",len(imgB))
-
- //灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
- var faceBase64=""
- faceExtArr, err := getFaceFeaFromSdk(fileBytes)
- if faceExtArr ==nil {
- return "",nil,errors.New("NotFeatureFindError")
- }
- if err ==nil && len(faceExtArr) >0 {
- for _,r := range faceExtArr {
- faceBase64 = base64.StdEncoding.EncodeToString(r.Feats)//鑾峰彇鎻愬彇鍒扮殑绗竴寮犱汉鑴哥壒寰�
- break
- }
- }
-
-
- dbperson := new(models.Dbtablepersons)
- dbperson.PersonPicUrl = field // 鍥剧墖璺粡
- dbperson.TableId = tableId //
- dbperson.PersonName = filename // 鍥剧墖鍚�
- // 婕旂ずbase64缂栫爜
-
- dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮�
-
- result := addDbPerson(dbperson)
- return field, result, nil
- } else {
- return field, nil, nil
+ if strings.Contains(field,"/"){
+ idx := strings.Index(field, "/")
+ field = field[idx+1:]
}
+ fmt.Println("field:",field)
+
+ dbperson := new(models.Dbtablepersons)
+ dbperson.PersonPicUrl = field // 鍥剧墖璺粡
+ dbperson.TableId = tableId //
+ dbperson.PersonName = filename // 鍥剧墖鍚�
+ // 婕旂ずbase64缂栫爜
+
+ dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮�
+
+ result := addDbPerson(dbperson)
+ return field, result, nil
+
}
-func getFaceFeaFromSdk(fileBytes []byte) ([]*protomsg.ResultFaceExtCom,error){
+func getFaceFeaFromSdk(fileBytes []byte) ([]*protomsg.ResultFaceExtCom,error,*protomsg.Image){
s := service.NewFaceSdkService(fileBytes)
i, err := s.ReadFromUploadImg()
if err !=nil{
fmt.Println("readFromUploadImg err:",err)
- return nil,err
+ return nil,err,i
}
bc, err := service.ImgCompress(i)
if err !=nil {
fmt.Println("ImgCompress err:",err)
- return nil,err
+ return nil,err,i
}
s.PushImgMsg(bc)
s.GetFaceFea()
if s.Result == nil{
- return nil,errors.New("no fea")
+ return nil,errors.New("no fea"),i
} else {
- return s.Result,nil
+ return s.Result,nil,i
}
}
diff --git a/extend/util/util.go b/extend/util/util.go
index b9af7da..77cd755 100644
--- a/extend/util/util.go
+++ b/extend/util/util.go
@@ -1,9 +1,12 @@
package util
import (
+ "basic.com/pubsub/protomsg.git"
"encoding/json"
"github.com/gin-gonic/gin"
"github.com/golang/glog"
+ "gocv.io/x/gocv"
+ "image"
"webserver/extend/code"
"crypto/rand"
@@ -66,4 +69,47 @@
// data[t.Field(i).Name] = v.Field(i).Interface()
//}
//return data
+}
+
+// 鎸夊昂瀵稿幓鍒囧浘
+func SubImg(i protomsg.Image, x0, y0, x1, y1 int, ) []byte {
+ img, _ := gocv.NewMatFromBytes(int(i.Height), int(i.Width), gocv.MatTypeCV8UC3, i.Data)
+ rect := image.Rect(EnlargeSize(x0, y0, x1, y1, i))
+ region := img.Region(rect)
+ bytes, _ := gocv.IMEncode(".jpg", region)
+ return bytes
+}
+
+// 闀垮鍙樹负涓�姣斾竴锛屾瘡杈瑰悇鎵╃櫨鍒嗕箣20
+func EnlargeSize(x0, y0, x1, y1 int, i protomsg.Image) (x0_new, y0_new, x1_new, y1_new int) {
+ // 鍏堟妸闀垮鍙樹负涓�姣斾竴
+ chazhi := (y1 - y0) - (x1 - x0)
+ x0 = x0 - chazhi/2
+ if x0 < 0 {
+ x0 = 0
+ }
+ x1 = x1 + chazhi/2
+ if x1 > int(i.Width) {
+ x1 = int(i.Width)
+ }
+
+ // 鍐嶆妸姣忚竟鍚勬墿澶х櫨鍒嗕箣20
+ enlarge := float32(0.2)
+ x0_new = int((1+enlarge)*float32(x0) - enlarge*float32(x1))
+ if x0_new < 0 {
+ x0_new = 0
+ }
+ x1_new = int((1+enlarge)*float32(x1) - enlarge*float32(x0))
+ if x1_new > int(i.Width) {
+ x1_new = int(i.Width)
+ }
+ y0_new = int((1+enlarge)*float32(y0) - enlarge*float32(y1))
+ if y0_new < 0 {
+ y0_new = 0
+ }
+ y1_new = int((1+enlarge)*float32(y1) - enlarge*float32(y0))
+ if y1_new > int(i.Height) {
+ y1_new = int(i.Height)
+ }
+ return
}
\ No newline at end of file
--
Gitblit v1.8.0