zhangmeng
2019-12-13 2d25b62b60da018412ed164b6fd29470498cea17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package sdk
 
import (
    "analysis/logo"
    "analysis/work"
 
    "basic.com/pubsub/protomsg.git"
    "basic.com/valib/gosdk.git"
    "github.com/gogo/protobuf/proto"
)
 
func vehicle(img *gosdk.SDKImage, rc *gosdk.CRECT, mW, mH int, rMsg *work.MsgRS, out chan<- work.MsgRS) {
    result := gosdk.VehicleITSDetect(*img, rc)
    count := len(result)
 
    var id, name string
    if rMsg.Msg.Tasklab != nil {
        id, name = rMsg.Msg.Tasklab.Taskid, rMsg.Msg.Tasklab.Taskname
    }
    logo.Infoln("CAMERAID: ", rMsg.Msg.Cid, " TASKID: ", id, " TASKNAME: ", name, " DETECT VEHICLE PLATE ID COUNT: ", count)
 
    if count <= 0 {
        ejectResult(nil, *rMsg, out)
        return
    }
 
    plateids := convert2ProtoPlateIDResultVehicle(result)
 
    plateresult := protomsg.PlateIDResult{Result: plateids}
    data, err := proto.Marshal(&plateresult)
    if err != nil {
        logo.Errorln("PLATE ID DETECTOR MARSHAL PROTO PLATE IDS ERROR", err)
        data = nil
    }
    ejectResult(data, *rMsg, out)
}
 
func convert2ProtoPlateIDResultVehicle(obj []gosdk.CVehicleITSResult) []*protomsg.PlateIDVehicle {
    ret := []*protomsg.PlateIDVehicle{}
 
    for _, v := range obj {
 
        rcPlateID := &protomsg.Rect{
            Left:   v.RcLocation.Left,
            Right:  v.RcLocation.Right,
            Top:    v.RcLocation.Top,
            Bottom: v.RcLocation.Bottom,
        }
        rcCar := &protomsg.Rect{
            Left:   v.RcCarLocation.Left,
            Right:  v.RcCarLocation.Right,
            Top:    v.RcCarLocation.Top,
            Bottom: v.RcCarLocation.Bottom,
        }
 
        lic := string(v.License[:])
        end := len(lic)
        for i := len(lic) - 1; i >= 0; i-- {
            if lic[i] != '\000' {
                end = i + 1
                break
            }
        }
        if end > 0 {
            lic = lic[:end]
        }
 
        obj := &protomsg.PlateIDVehicle{
            NPlateFlag:       v.NPlateFlag,
            NColor:           v.NColor,
            NType:            v.NType,
            License:          lic,
            NConfidence:      v.NConfidence,
            NCharNum:         v.NCharNum,
            NCharConfidence:  v.NCharConfidence[:],
            RcLocation:       rcPlateID,
            RcCarLocation:    rcCar,
            VehicleType:      string(v.VehicleType[:]),
            VehicleBrand:     string(v.VehicleBrand[:]),
            VehicleSub:       string(v.VehicleSub[:]),
            VehicleType1:     string(v.VehicleType1[:]),
            FvdConf:          v.FVDConf,
            FConfdence:       v.FConfdence,
            NVehicleSubModel: v.NVehicleSubModel,
            NVehicleBright:   v.NVehicleBright,
            NVehicleColor1:   v.NVehicleColor1,
            NVehicleColor2:   v.NVehicleColor2,
        }
 
        ret = append(ret, obj)
    }
    return ret
}