| | |
| | | import ( |
| | | "analysis/logo" |
| | | "analysis/util" |
| | | "fmt" |
| | | "os/exec" |
| | | "os/signal" |
| | | "runtime/debug" |
| | | "strconv" |
| | | "syscall" |
| | | "time" |
| | | |
| | | "analysis/app/master" |
| | | "analysis/app/slave" |
| | |
| | | "flag" |
| | | |
| | | "os" |
| | | |
| | | "basic.com/valib/gogpu.git" |
| | | // "net/http" |
| | | // _ "net/http/pprof" |
| | | ) |
| | |
| | | ruleIPC string |
| | | |
| | | configPath string |
| | | |
| | | showConsole bool |
| | | ) |
| | | |
| | | const ( |
| | |
| | | ) |
| | | |
| | | func init() { |
| | | flag.StringVar(&role, "role", roleMaster, "run process role master/slave, default single") |
| | | flag.StringVar(&runType, "sdk", util.FeatAll, "run sdk type, face/facedetect/facecompare/yolo,etc.") |
| | | flag.StringVar(&id, "id", util.FakeSdkID, "sdk id as ipc label") |
| | | flag.StringVar(&role, "role", roleMaster, "进程启动方式,master/slave") |
| | | flag.StringVar(&runType, "sdk", util.FeatAll, "进程运行的算法类型FaceDetect/Yolo,etc.slave使用") |
| | | flag.StringVar(&id, "id", util.FakeSdkID, "进程运行算法的ID,slave使用") |
| | | |
| | | flag.StringVar(&configPath, util.ConfigPath, "", "sdk config file path") |
| | | flag.StringVar(&configPath, util.ConfigPath, "", "进程运行算法的参数配置文件路径,master从路径读取文件,slave使用文件") |
| | | |
| | | flag.BoolVar(&logit, util.LogIt, false, "use logger,default flase") |
| | | flag.BoolVar(&shm, util.SHM, false, "use shm for performance") |
| | | flag.BoolVar(&logit, util.LogIt, false, "是否保存日志文件,默认false") |
| | | flag.BoolVar(&shm, util.SHM, false, "是否使用shared memory, 默认false, slave使用") |
| | | |
| | | flag.IntVar(&gpu, util.GPU, -1, "gpu index") |
| | | |
| | | flag.BoolVar(&showConsole, "log-console", false, "log show console, only for debug") |
| | | flag.IntVar(&gpu, util.GPU, -1, "进程运行算法需要的GPU Index") |
| | | |
| | | // 指定获取配置信息从sqlite,有最高优先级, master使用 |
| | | flag.StringVar(&util.FSI.IP, util.FetchSrvIP, util.FSI.IP, "fetch server ip, like camera info") |
| | | flag.IntVar(&util.FSI.HTTPort, util.FetchSrvPort, util.FSI.HTTPort, "fetch server port") |
| | | flag.IntVar(&util.FSI.HBPort, util.FetchSrvHeartbeatPort, util.FSI.HBPort, "fetch server heartbeat port") |
| | | flag.IntVar(&util.FSI.DataPort, util.FetchSrvDataPort, util.FSI.DataPort, "fetch server data port") |
| | | flag.StringVar(&util.FSI.IP, util.FetchSrvIP, util.FSI.IP, "从IP获取需要运行的SDK,master使用") |
| | | flag.IntVar(&util.FSI.HBPort, util.FetchSrvHeartbeatPort, util.FSI.HBPort, "获取需要运行的SDK服务器的心跳 Port,master使用") |
| | | flag.IntVar(&util.FSI.DataPort, util.FetchSrvDataPort, util.FSI.DataPort, "获取需要运行的SDK服务器的数据 Port,master使用") |
| | | |
| | | // 指定发送到ruleprocess的ipc地址 |
| | | flag.StringVar(&util.ToRuleIPC, util.RuleIPC, util.ToRuleIPC, "send data to ruleprocess ipc") |
| | | flag.StringVar(&util.ToRuleIPC, util.RuleIPC, util.ToRuleIPC, "将算法运行结果发送到规则服务器的IPC地址,slave使用") |
| | | } |
| | | |
| | | func runLogger() { |
| | |
| | | logo.Config(file, 500, 3, 30) |
| | | logo.Infoln("START LOGGER FILE: ", file) |
| | | } |
| | | if showConsole { |
| | | logo.ShowConsole() |
| | | } |
| | | logo.ShowConsole() |
| | | } |
| | | |
| | | func setParamters() { |
| | | util.FillParams(util.FetchSrvIP, util.FSI.IP) |
| | | util.FillParams(util.FetchSrvPort, strconv.Itoa(util.FSI.HTTPort)) |
| | | util.FillParams(util.FetchSrvHeartbeatPort, strconv.Itoa(util.FSI.HBPort)) |
| | | util.FillParams(util.FetchSrvDataPort, strconv.Itoa(util.FSI.DataPort)) |
| | | // util.FillParams(util.FetchSrvIP, util.FSI.IP) |
| | | // util.FillParams(util.FetchSrvHeartbeatPort, strconv.Itoa(util.FSI.HBPort)) |
| | | // util.FillParams(util.FetchSrvDataPort, strconv.Itoa(util.FSI.DataPort)) |
| | | |
| | | util.FillParams(util.RuleIPC, util.ToRuleIPC) |
| | | |
| | |
| | | } |
| | | |
| | | func main() { |
| | | |
| | | indices := gogpu.RankGPU() |
| | | if len(indices) == 0 { |
| | | logo.Errorln("there is no gpu for valid") |
| | | return |
| | | } |
| | | |
| | | util.InitConfig() |
| | | |
| | |
| | | |
| | | ret := false |
| | | if role == roleMaster { |
| | | defer dump(util.LogFile + "_dump_" + time.Now().Format("20060102150405")) |
| | | setParamters() |
| | | ret = master.Run(ctx, configPath, "./libcomm.so") |
| | | ret = master.Run(ctx, "./libcomm.so", configPath) |
| | | |
| | | } else if role == roleSlave { |
| | | ret = slave.Run(ctx, configPath, runType, id, gpu, shm) |
| | | } else if role == "test" { |
| | | ret = slave.TwoPluginConflict("./libcomm.so", "./zconf/Yolo.json") |
| | | } |
| | | |
| | | if ret { |
| | |
| | | // viper.AddConfigPath("./") |
| | | |
| | | // envString := "" |
| | | |
| | | func dump(dumpFile string) { |
| | | dumpErr := recover() |
| | | if dumpErr == nil { |
| | | return |
| | | } |
| | | f, err := os.Create(dumpFile) |
| | | if err != nil { |
| | | return |
| | | } |
| | | f.WriteString(fmt.Sprintf("panic:\r\n%v", dumpErr)) |
| | | f.WriteString("\r\n\nstack:\r\n") |
| | | f.WriteString(string(debug.Stack())) |
| | | f.Close() |
| | | |
| | | ////////////////////////////////////////////// |
| | | // restart master |
| | | |
| | | cmd := exec.Command(os.Args[0], os.Args[1:]...) |
| | | cmd.Stdout = os.Stdout |
| | | cmd.Stderr = os.Stderr |
| | | cmd.Start() |
| | | } |