panlei
2019-06-20 c2ef56536ce95b2623b5e649c3df88bca14f28c0
解压缩图片
2个文件已修改
31 ■■■■■ 已修改文件
main.go 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/ruleToformula.go 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go
@@ -4,7 +4,7 @@
    "fmt"
    "ruleprocess/ruleserver"
    "sync"
    "analysis/work"
    "basic.com/pubsub/protomsg.git"
    "basic.com/valib/deliver.git"
    "github.com/golang/protobuf/proto"
@@ -39,7 +39,8 @@
            } else {
                arg := ruleserver.ArgsFromSdk{}
                m := paramFormat(msg,&arg)
                arg.MainJudge()
                fmt.Println("解析出来的数据:",arg)
                ruleserver.MainJudge(&arg)
                // 把arg里的打的标签拿出来给m再封装一层
                resultMag := ruleserver.ResultMsg{SdkMessage: m, RuleResult: arg.RuleResult}
                fmt.Println("打完标签后的结果:",resultMag)
@@ -50,18 +51,26 @@
// 将外部传进来的sdk数据包解成 ArgsFromSdk
func paramFormat(msg []byte,arg *ruleserver.ArgsFromSdk) protomsg.SdkMessage {
    defer func() {
        if err := recover();err != nil{
            fmt.Println("解包过程的错误",err.(string))
        }
    }()
    // 反序列化数据得到sdk入参
    m := protomsg.SdkMessage{}
    err := proto.Unmarshal(msg, &m)
    if err != nil {
        fmt.Println("解析msg时出现错误", err)
        return m
        panic("解析msg时出现错误")
    }
    arg.CameraId = m.Cid
    arg.TaskId = m.Tasklab.Taskid
    bdata,err := UnCompress(m.Data)
    if err != nil {
        panic("解压缩图片时出现错误")
    }
    i := protomsg.Image{}
    err = proto.Unmarshal(m.Data, &i)
    err = proto.Unmarshal(bdata, &i)
    arg.ImageWidth = int(i.Width)
    arg.ImageHeight = int(i.Height)
    // 暂时写死,sdk还没有这俩算法
@@ -69,7 +78,7 @@
    arg.IsStatic = false
    fmt.Println("从mongos中拿到的数据包长度为:", len(msg))
    for _, sdkinfo := range m.Tasklab.Sdkinfos {
        if sdkinfo.Sdktype == "yolo" {
        if sdkinfo.Sdktype == "Yolo" {
            yoloParam := protomsg.ParamYoloObj{}
            err = proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam)
            if err != nil {
ruleserver/ruleToformula.go
@@ -146,7 +146,7 @@
}
// 规则主函数入口
func (arg *ArgsFromSdk) MainJudge() {
func MainJudge(arg *ArgsFromSdk) {
    cameraPolygons := GetPolygons(arg.CameraId)
    list := AreaMapList{}
    for _, polygon := range cameraPolygons {
@@ -257,7 +257,7 @@
        // 根据cameraId去更新或者插入结果,然后判断是否数组是否可以得出报警的结论
        // 往联动任务的结果数组里放值或更新
        for _, va := range timeEle.RuleResults {
            if aml.areaMapList[0].cameraId != "" && va.CameraId == aml.areaMapList[0].cameraId {
            if arg.CameraId != "" && va.CameraId == arg.CameraId {
                va.Result = strconv.FormatBool(isOk)
            }
        }
@@ -291,7 +291,7 @@
        fmt.Println("这帧图像在任务下的一整条规则下(联动任务下就是跟本摄像机像相关的小规则)的判断结果为false")
        // 所以也要去结果数组里放值或更新
        for _, va := range timeEle.RuleResults {
            if aml.areaMapList[0].cameraId != "" && va.CameraId == aml.areaMapList[0].cameraId { // aml.areaMapList[0].cameraId 随便找一个数据
            if arg.CameraId != "" && va.CameraId == arg.CameraId { // arg.CameraId 随便找一个数据
                va.Result = strconv.FormatBool(isOk)
            }
        }
@@ -369,7 +369,7 @@
// 对单帧图像的判断 是舍弃(或者说对于某些需求可以放ES数据库一份)还是返回
func judge(aml *AreaMapList, arg *ArgsFromSdk) {
    // 得到属于该摄像机的若干组任务的完整规则(跟每一条完整规则比较之后得出本张图像对于某个规则是否报警的结果。放进map,比如本帧图像的id,所碰撞成功的规则id)
    taskRuleList := GetRuleGroup(aml.areaMapList[0].cameraId)
    taskRuleList := GetRuleGroup(arg.CameraId)
    if len(taskRuleList) > 0 {
        for _, taskRule := range taskRuleList {
            ruleList := taskRule.GroupRules // 获取的是task下面的任务组