liuxiaolong
2020-06-02 f10fcffbd257177b71af9d1e76e7ba2651885e29
rm gocv, use godraw
5个文件已修改
161 ■■■■ 已修改文件
controllers/fileController.go 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/CamraUpdatesnashot.go 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/FaceSdkService.go 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/fileController.go
@@ -5,6 +5,7 @@
    "basic.com/fileServer/WeedFSClient.git"
    esApi "basic.com/pubsub/esutil.git"
    "basic.com/pubsub/protomsg.git"
    "basic.com/valib/godraw.git"
    "basic.com/valib/logger.git"
    "bytes"
    "encoding/base64"
@@ -12,7 +13,6 @@
    "errors"
    "fmt"
    "github.com/gin-gonic/gin"
    "gocv.io/x/gocv"
    "image"
    "image/color"
    "image/jpeg"
@@ -148,7 +148,11 @@
        urlArr := make([]string,0)
        for _,r := range faceArr {
            rcFace := r.Pos.RcFace
            cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
            cutFaceImgData,cutErr := util.SubCutImg(pI, rcFace, 20)
            if cutErr != nil {
                logger.Debug("util.SubCutImg err:", cutErr)
                continue
            }
            weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "FaceUrl", cutFaceImgData)
            if e == nil{
                faceExtractedMap[weedFilePath] = FaceExtract{
@@ -171,19 +175,24 @@
}
func drawPolygonOnImg(i *protomsg.Image,faceArr *[]*protomsg.ResultFaceDetect) (*[]byte,error) {
    rook, _ := gocv.NewMatFromBytes(int(i.Height), int(i.Width), gocv.MatTypeCV8UC3, i.Data)
    defer rook.Close()
    //yellow := color.RGBA{255, 255, 0, 0}
    img,err := godraw.ToImage(i.Data, int(i.Width), int(i.Height))
    if err != nil {
        return nil,err
    }
    red := color.RGBA{255, 0, 0, 0}
    for _,faceResult := range *faceArr {
        left := int(faceResult.Pos.RcFace.Left)
        top := int(faceResult.Pos.RcFace.Top)
        right := int(faceResult.Pos.RcFace.Right)
        bottom := int(faceResult.Pos.RcFace.Bottom)
        gocv.Rectangle(&rook, image.Rect(left,top,right,bottom), red, 1)
        rect := image.Rect(int(faceResult.Pos.RcFace.Left),
            int(faceResult.Pos.RcFace.Top),
            int(faceResult.Pos.RcFace.Right),
            int(faceResult.Pos.RcFace.Bottom))
        err = godraw.DrawRectangle(img, rect, red, 1)
        if err != nil {
            logger.Debug("godraw.DrawRectangle err:", err)
        }
    }
    fData,err := gocv.IMEncode(".jpg", rook)
    return &fData,err
    jpgData, err := godraw.ImageToJpeg(img, nil)
    return &jpgData,err
}
type CompareResult struct {
@@ -413,7 +422,7 @@
    faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*60)
    if err ==nil && len(faceArr) ==1 {
        rcFace := faceArr[0].Pos.RcFace
        cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
        cutFaceImgData,_ := util.SubCutImg(pI, rcFace, 20)
        weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "FaceUrl", cutFaceImgData)
        if e == nil{
            faceExtractedMap[weedFilePath] = FaceExtract{
@@ -764,7 +773,7 @@
            break
        }
        //根据人脸坐标扣出人脸小图
        cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
        cutFaceImgData,_ := util.SubCutImg(pI, rcFace, 20)
        weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "testCutFace", cutFaceImgData)
        if e !=nil{
            util.ResponseFormat(c,code.ComError,"文件上传失败")
@@ -817,7 +826,11 @@
    var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
    //根据人脸坐标扣出人脸小图
    t1 := time.Now()
    cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
    cutFaceImgData,cutErr := util.SubCutImg(pI, rcFace, 20)
    if cutErr != nil {
        logger.Debug("util.SubCutImg err:", cutErr)
        return "", nil, cutErr,"",""
    }
    logger.Debug("SubImg用时:", time.Since(t1))
    t1 = time.Now()
    weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, filename, cutFaceImgData)
go.mod
@@ -40,7 +40,6 @@
    github.com/tmthrgd/go-sem v0.0.0-20160607101025-0214dbf53877 // indirect
    github.com/tmthrgd/go-shm v0.0.0-20170117044846-90afcfcd5ee9 // indirect
    github.com/tmthrgd/shm-go v0.0.0-20170130075737-7207ca97b290 // indirect
    gocv.io/x/gocv v0.20.0
    golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect
    google.golang.org/grpc v1.23.0
    nanomsg.org/go-mangos v1.4.0
go.sum
@@ -285,8 +285,6 @@
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
gocv.io/x/gocv v0.20.0 h1:2q75zQ8Zel2tB69G6qrmf/E7EdvaCs90qvkHzdSBOAg=
gocv.io/x/gocv v0.20.0/go.mod h1:vZETJRwLnl11muQ6iL3q4ju+0oJRrdmYdv5xJTH7WYA=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
service/CamraUpdatesnashot.go
@@ -10,77 +10,6 @@
    "webserver/cache"
)
/*以下属于旧版本地摄像机获取截图(国标摄像机底图无法刷新)
func PostFormBufferData(uri string, filepath string, fileName string) (maps map[string]interface{}, err0 error) {
    // 要指定转byte的格式
    picMat := gocv.IMRead(filepath, gocv.IMReadColor)
    defer picMat.Close()
    if picMat.Empty() {
        return nil, errors.New("file not exist")
    }
    pheight := picMat.Rows()
    pwidth := picMat.Cols()
    pdata := picMat.ToBytes()
    imgs := gocv.NewMat()
    imgs, _ = gocv.NewMatFromBytes(pheight, pwidth, gocv.MatTypeCV8UC3, pdata)
    fdata, _ := gocv.IMEncode(".jpg", imgs)
    body := &bytes.Buffer{}
    writer := multipart.NewWriter(body)
    _, err := writer.CreateFormFile("file", fileName)
    if err != nil {
        return nil, err
    }
    boundary := writer.Boundary()
    //close_string := fmt.Sprintf("\r\n--%s--\r\n", boundary)
    close_buf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary))
    file := bytes.NewBuffer(fdata)
    request_reader := io.MultiReader(body, file, close_buf)
    //_, err = io.Copy(part, file)
    //writer.WriteField(key, val)
    request, err := http.NewRequest("POST", uri, request_reader)
    request.Header.Add("Content-Type", writer.FormDataContentType())
    timeout := time.Duration(5 * time.Second) //超时时间50ms
    client := &http.Client{Timeout: timeout}
    resp, err := client.Do(request)
    if err != nil {
        log.Fatal(err)
        return nil, err
    }
    defer func() {
        if r := recover(); r != nil {
            fmt.Printf("panic的内容%v\n", r)
            msg := "上传图片服务器异常"
            if _, ok := r.(error); ok {
                msg = r.(error).Error()
                fmt.Println("panic--recover()得到的是error类型")
            }
            if _, ok := r.(string); ok {
                msg = r.(string)
                fmt.Println("panic--recover()得到的是string类型")
            }
            err0 = errors.New(msg)
        }
    }()
    defer resp.Body.Close()
    {
        body := &bytes.Buffer{}
        _, err := body.ReadFrom(resp.Body)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(resp.StatusCode)
        //fmt.Println(resp.Header)
        fmt.Println(body)
        //decoder := json.NewDecoder(strings.NewReader(body.String()))
        decoder := make(map[string]interface{})
        if err := json.Unmarshal([]byte(body.String()), &decoder); err != nil {
            return nil, err
        }
        return decoder, nil
    }
}
func processphoto(cid string) (local string, err error) {
    var camApi dbapi.CameraApi
    caminfo, err := camApi.GetCameraById(cid)
service/FaceSdkService.go
@@ -2,10 +2,11 @@
import (
    "basic.com/pubsub/protomsg.git"
    "basic.com/valib/godraw.git"
    "basic.com/valib/logger.git"
    "bytes"
    "github.com/gogo/protobuf/proto"
    "github.com/pkg/errors"
    "gocv.io/x/gocv"
    "image"
    "time"
)
@@ -53,44 +54,21 @@
}
func (s *FaceSdkService) readFromUploadImg() (*protomsg.Image,error){
    picMat, err := gocv.IMDecode(s.File, gocv.IMReadColor)
    if err !=nil {
        logger.Debug("gocv.IMDecode err:",err)
        return nil,err
    bt := bytes.NewBuffer(s.File)
    img, _, err := image.Decode(bt)
    if err != nil {
        return nil, err
    }
    logger.Debug("picMat.Data.len:", len(picMat.ToBytes()))
    bgr := godraw.Image2BGR(img)
    //图片缩小分辨率
    //newMat := gocv.NewMat()
    //size := 1024
    //if picMat.Rows() > size || picMat.Cols() > size {
    //    fx := float64(size)/float64(picMat.Rows())
    //    fy := float64(size)/float64(picMat.Cols())
    //    ff := fx
    //    if fx > fy{
    //        ff = fy
    //    }
    //    gocv.Resize(picMat,&newMat, image.Pt(0,0), ff, ff, gocv.InterpolationDefault)
    //    picMat = newMat
    //}
    defer picMat.Close()
    if picMat.Empty() {
        logger.Debug("file not exist")
        return nil,errors.New("picMat is empty")
    }
    height := int32(picMat.Rows())
    width := int32(picMat.Cols())
    data := picMat.ToBytes()
    timeUnix := time.Now().Unix()
    formatTimeStr := time.Unix(timeUnix, 0).Format("2006-01-02 15:04:05")
    return &protomsg.Image{
        Width: width,
        Height: height,
        Width: int32(img.Bounds().Dx()),
        Height: int32(img.Bounds().Dy()),
        Timestamp: formatTimeStr,
        Data: data,
        Data: bgr,
        Id: s.Id,
        Cid: faceExtractWebCID,
    },nil