| | |
| | | } |
| | | 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() |
| | | fileInfo, e := esutil.PostFormData(weedfsUri, filename, "file", cutFaceImgData) |
| | | logger.Debug("上传到weedfs用时:", time.Since(t1)) |
| | | t1 = time.Now() |
| | | if e != nil { |
| | | fmt.Println(e.Error()) |
| | | return "", nil, e |
| | |
| | | dbperson.FaceFeature = faceBase64 // 特征值base64 码 |
| | | |
| | | result := addDbPerson(dbperson) |
| | | logger.Debug("addDbPerson用时:", time.Since(t1)) |
| | | return fileNameOnly, result, nil |
| | | |
| | | } |
| | |
| | | ) |
| | | |
| | | func GetFaceFeaFromSdk(fileBytes []byte,deadTime time.Duration) ([]*protomsg.ResultFaceDetect,error,*protomsg.Image){ |
| | | tStart :=time.Now() |
| | | s := NewFaceSdkService(fileBytes, deadTime) |
| | | i, err := s.ReadFromUploadImg() |
| | | logger.Debug("ReadFromUploadImg用时:", time.Since(tStart)) |
| | | if err !=nil{ |
| | | logger.Debug("readFromUploadImg err:",err) |
| | | return nil,err,i |
| | | } |
| | | tStart = time.Now() |
| | | bc, err := ImgCompress(i) |
| | | logger.Debug("ImgCompress用时:", time.Since(tStart)) |
| | | if err !=nil { |
| | | logger.Debug("ImgCompress err:",err) |
| | | return nil,err,i |
| | | } |
| | | s.PushImgMsg(bc) |
| | | t1 := time.Now() |
| | | s.GetFaceFea() |
| | | logger.Debug("GetFaceFea用时:", time.Since(t1)) |
| | | if s.Result == nil{ |
| | | return nil,errors.New("no fea"),i |
| | | } else { |
| | |
| | | } |
| | | |
| | | func (s *FaceSdkService) ReadFromUploadImg() (*protomsg.Image,error){ |
| | | //defer (*(s.File)).Close() |
| | | //imgB, err := ioutil.ReadAll(*(s.File)) |
| | | //if err !=nil{ |
| | | // logger.Debug("File.Read err:",err) |
| | | // return nil,err |
| | | //} |
| | | |
| | | picMat, err := gocv.IMDecode(s.File, gocv.IMReadColor) |
| | | if err !=nil { |
| | | logger.Debug("gocv.IMDecode err:",err) |
| | |
| | | } |
| | | |
| | | defer picMat.Close() |
| | | defer newMat.Close() |
| | | |
| | | if picMat.Empty() { |
| | | logger.Debug("file not exist") |
| | | return nil,errors.New("picMat is empty") |
| | |
| | | } |
| | | |
| | | func ImgCompress(i *protomsg.Image) ([]byte,error){ |
| | | t1 := time.Now() |
| | | if b, err := proto.Marshal(i); err != nil { |
| | | logger.Debug("protoImage marshal err") |
| | | return nil,err |
| | | } else { |
| | | logger.Debug("proto.Marshal用时:", time.Since(t1)) |
| | | t1 = time.Now() |
| | | bc := make([]byte, len(b)) |
| | | ht := make([]int, 64<<10) |
| | | n, err := lz4.CompressBlock(b, bc, ht) |
| | | logger.Debug("lz4.CompressBlock用时:", time.Since(t1)) |
| | | t1 = time.Now() |
| | | if err != nil { |
| | | logger.Debug(err) |
| | | return nil,err |
| | |
| | | return nil,errors.New("compressed len is 0") |
| | | } |
| | | bc = bc[:n] |
| | | logger.Debug("bc用时:", time.Since(t1)) |
| | | return bc,nil |
| | | } |
| | | } |