| | |
| | | |
| | | //将上传的图片交人脸检测和人脸提取,获得特征 |
| | | 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) |
| | | //根据人脸坐标扣出人脸小图 |
| | | 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,"未提取到人脸") |
| | | } |
| | |
| | | }*/ |
| | | |
| | | func uploadFileReturnAddr(file multipart.File, filename string, tableId string) (string, map[string]interface{}, error) { |
| | | |
| | | defer file.Close() |
| | | field := "" |
| | | // weedfs 上传 |
| | |
| | | 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 |
| | | } |
| | | } |
| | | //根据人脸坐标扣出人脸小图 |
| | | 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 // 特征值base64 码 |
| | | |
| | | 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 // 特征值base64 码 |
| | | |
| | | 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 |
| | | } |
| | | } |
| | | |