reid from https://github.com/michuanhaohao/reid-strong-baseline
zhangmeng
2020-02-25 0786441ed1828c411a16d6648baee753a02a3ddb
common/helper.go
@@ -1,96 +1,96 @@
package common
import (
   "context"
   "encoding/json"
   "fmt"
   "io/ioutil"
   "strconv"
   "time"
    "context"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "strconv"
    "time"
   "basic.com/pubsub/protomsg.git"
   "github.com/gogo/protobuf/proto"
    "basic.com/pubsub/protomsg.git"
    "github.com/gogo/protobuf/proto"
)
// GetIpcAddress get ipc
func GetIpcAddress(shm bool, id string) string {
   if shm {
      return id
   }
   return `ipc:///tmp/` + id + `.ipc`
    if shm {
        return id
    }
    return `ipc:///tmp/` + id + `.ipc`
}
// SubConfig sub
type SubConfig struct {
   SoFile string            `json:"so_file_path"`
   Env    string            `json:"runtime"`
   Param  map[string]string `json:"param"`
    SoFile string            `json:"so_file_path"`
    Env    string            `json:"runtime"`
    Param  map[string]string `json:"param"`
}
// SdkConfig sdk
type SdkConfig struct {
   SoFile string            `json:"so_file_path"`
   Env    string            `json:"runtime"`
   Param  map[string]string `json:"param"`
   Sub    *SubConfig        `json:"sub"`
    SoFile string            `json:"so_file_path"`
    Env    string            `json:"runtime"`
    Param  map[string]string `json:"param"`
    Sub    *SubConfig        `json:"sub"`
}
// ReadConfig conf
func ReadConfig(file string) (SdkConfig, error) {
   data, err := ioutil.ReadFile(file)
   if err != nil {
      return SdkConfig{}, fmt.Errorf("READ SDK CONFIG FILE %s ERROR", file)
   }
    data, err := ioutil.ReadFile(file)
    if err != nil {
        return SdkConfig{}, fmt.Errorf("READ SDK CONFIG FILE %s ERROR", file)
    }
   //读取的数据为json格式,需要进行解码
   var v SdkConfig
   err = json.Unmarshal(data, &v)
    //读取的数据为json格式,需要进行解码
    var v SdkConfig
    err = json.Unmarshal(data, &v)
   return v, err
    return v, err
}
// Atoi atoi
func Atoi(s string) int {
   i, _ := strconv.Atoi(s)
   return i
    i, _ := strconv.Atoi(s)
    return i
}
// UnserilizeProto un
func UnserilizeProto(ctx context.Context, data <-chan []byte, out chan<- protomsg.SdkMessage, fn func(...interface{})) {
   for {
      select {
      case <-ctx.Done():
         return
      case d := <-data:
         if len(d) < 100 {
            continue
         }
         msg := protomsg.SdkMessage{}
         if err := proto.Unmarshal(d, &msg); err != nil {
            fn("UnserilizeProto Unmarshal msg 处理异常 Error:", err)
            continue
         }
    for {
        select {
        case <-ctx.Done():
            return
        case d := <-data:
            if len(d) < 100 {
                continue
            }
            msg := protomsg.SdkMessage{}
            if err := proto.Unmarshal(d, &msg); err != nil {
                fn("UnserilizeProto Unmarshal msg 处理异常 Error:", err)
                continue
            }
         out <- msg
            out <- msg
      default:
         time.Sleep(10 * time.Millisecond)
      }
   }
        default:
            time.Sleep(10 * time.Millisecond)
        }
    }
}
// UnpackImage unpack
func UnpackImage(msg protomsg.SdkMessage, fnName string, fn func(...interface{})) *protomsg.Image {
   // 反序列化数据得到sdk入参
   i := &protomsg.Image{}
   err := proto.Unmarshal(msg.Data, i)
   if err != nil {
      fn(fnName, " protobuf Unmarshal decode CameraImage error: ", err.Error())
      return nil
   }
   if i.Data == nil {
      fn(fnName, " protomsg.Image data null")
      return nil
   }
   return i
    // 反序列化数据得到sdk入参
    i := &protomsg.Image{}
    err := proto.Unmarshal(msg.Data, i)
    if err != nil {
        fn(fnName, " protobuf Unmarshal decode CameraImage error: ", err.Error())
        return nil
    }
    if i.Data == nil {
        fn(fnName, " protomsg.Image data null")
        return nil
    }
    return i
}