| | |
| | | |
| | | import ( |
| | | "basic.com/dbapi.git" |
| | | "basic.com/fileServer/WeedFSClient.git" |
| | | "basic.com/pubsub/protomsg.git" |
| | | "encoding/base64" |
| | | "encoding/json" |
| | | "io/ioutil" |
| | | "strconv" |
| | | "time" |
| | | "webserver/extend/logger" |
| | | "webserver/service" |
| | | |
| | | "github.com/gin-gonic/gin" |
| | | "github.com/satori/go.uuid" |
| | |
| | | } |
| | | } |
| | | |
| | | // @Summary 更新底库人脸照片 |
| | | // @Description 更新底库人脸照片 |
| | | // @Accept json |
| | | // @Produce json |
| | | // @Tags 底库人员 |
| | | // @Param id formData string true "人员id" |
| | | // @Param file formData file true "人脸图片" |
| | | // @Success 200 {string} json "{"code":200, msg:"", success:true}" |
| | | // @Failure 500 {string} json "{"code":500, msg:"", success:false}" |
| | | // @Router /data/api-v/dbperson/updateFace [POST] |
| | | func (dbc DbPersonController) UpdateFace(c *gin.Context) { |
| | | file, header, err := c.Request.FormFile("file") |
| | | id := c.Request.FormValue("id") |
| | | if err != nil || id == "" { |
| | | util.ResponseFormat(c,code.RequestParamError,"参数有误") |
| | | return |
| | | } |
| | | //文件的名称 |
| | | filename := header.Filename |
| | | defer file.Close() |
| | | // weedfs 上传 |
| | | fileBytes, err := ioutil.ReadAll(file) |
| | | if err !=nil { |
| | | util.ResponseFormat(c,code.ComError,"图片读取失败") |
| | | return |
| | | } |
| | | |
| | | //将上传的图片交人脸检测和人脸提取,获得特征 |
| | | var faceBase64="" |
| | | faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*5) |
| | | if faceArr ==nil { |
| | | util.ResponseFormat(c,code.ComError,"未到提取人脸") |
| | | return |
| | | } |
| | | var rcFace *protomsg.Rect |
| | | if err ==nil && len(faceArr) >0 { |
| | | if len(faceArr) >1 { |
| | | util.ResponseFormat(c,code.ComError,"人脸大于一张,请换一张人脸图片") |
| | | return |
| | | } |
| | | for _,r := range faceArr { |
| | | //拿到人脸的坐标 |
| | | rcFace = r.Pos.RcFace |
| | | |
| | | faceBase64 = base64.StdEncoding.EncodeToString(r.Feats)//获取提取到的第一张人脸特征 |
| | | break |
| | | } |
| | | } |
| | | var weedfsUri = "http://"+config.WeedFs.Ip+":"+strconv.Itoa(config.WeedFs.UploadPort)+"/submit" |
| | | //根据人脸坐标扣出人脸小图 |
| | | t1 := time.Now() |
| | | cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom)) |
| | | logger.Debug("SubImg用时:", time.Since(t1)) |
| | | t1 = time.Now() |
| | | weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, filename, cutFaceImgData) |
| | | logger.Debug("上传到weedfs用时:", time.Since(t1)) |
| | | t1 = time.Now() |
| | | if e != nil { |
| | | util.ResponseFormat(c,code.ComError,"人脸上传失败") |
| | | return |
| | | } |
| | | var dbpApi dbapi.DbPersonApi |
| | | b,d := dbpApi.UpdateFace(id,faceBase64,weedFilePath) |
| | | if b { |
| | | util.ResponseFormat(c,code.UpdateSuccess,d) |
| | | } else { |
| | | util.ResponseFormat(c,code.UpdateFail,"更新人脸失败") |
| | | } |
| | | } |
| | | |
| | | func UpdateDbPersonsOfDbTable(id string) (message string) { |
| | | url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport + |
| | | "/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/_update_by_query?refresh" |