liuxiaolong
2019-07-06 29dfebcebf17690e4f5c72192f2bb4547ef51eea
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)
      //根据人脸坐标扣出人脸小图
      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
      }
   }
   //根据人脸坐标扣出人脸小图
   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
   }
}