package main
|
|
import (
|
"analysis/logo"
|
"analysis/proc"
|
"analysis/util"
|
"strconv"
|
|
"context"
|
"flag"
|
|
"os"
|
"os/signal"
|
|
"golang.org/x/sys/unix"
|
|
"basic.com/valib/gogpu.git"
|
"basic.com/valib/gosdk.git"
|
// "net/http"
|
// _ "net/http/pprof"
|
)
|
|
var (
|
logit bool
|
role string
|
runType string
|
id string
|
gpu int
|
shm bool
|
ruleIPC string
|
)
|
|
const (
|
master = `master`
|
slave = `slave`
|
single = `single`
|
)
|
|
func init() {
|
flag.BoolVar(&logit, "logit", false, "use logger,default flase")
|
flag.StringVar(&role, "role", single, "run process role master/slave/single, 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.IntVar(&gpu, "gpu", -1, "gpu index")
|
flag.BoolVar(&shm, "shm", false, "use shm for performance")
|
|
// 人脸识别参数
|
flag.IntVar(&util.SFI.DetectThrd, util.FaceDetectThread, util.SFI.DetectThrd, "face detect max thread count")
|
flag.IntVar(&util.SFI.DetectNum, util.FaceDetectNum, util.SFI.DetectNum, "face detect min face count")
|
flag.IntVar(&util.SFI.DetectAngle, util.FaceDetectAngle, util.SFI.DetectAngle, "face detect face angle")
|
flag.IntVar(&util.SFI.PropThrd, util.FacePropertyThread, util.SFI.PropThrd, "face property max thread count")
|
flag.IntVar(&util.SFI.ExtractThrd, util.FaceExtractThread, util.SFI.ExtractThrd, "face extract max thread count")
|
flag.IntVar(&util.SFI.TrackInterval, util.FaceTrackInterval, util.SFI.TrackInterval, "face track needed interval")
|
flag.IntVar(&util.SFI.SampleSize, util.FaceTrackSample, util.SFI.SampleSize, "face track sample size")
|
|
// 车辆信息
|
// 授权服务路径
|
flag.StringVar(&util.SCI.LicenseServerPath, util.CarSDKLicense, util.SCI.LicenseServerPath, "car detect lic server bin path")
|
flag.IntVar(&util.SCI.MaxImageWidth, util.CarMaxImageWidth, util.SCI.MaxImageWidth, "car detect image width")
|
flag.IntVar(&util.SCI.MaxImageHeight, util.CarMaxImageHeight, util.SCI.MaxImageHeight, "car detect image height")
|
// cloud plate
|
flag.StringVar(&util.SCI.Model, util.CarSDKModel, util.SCI.Model, "cloud palte detector model")
|
|
// 指定获取配置信息从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")
|
|
// 指定发送到ruleprocess的ipc地址
|
flag.StringVar(&util.ToRuleIPC, util.RuleIPC, util.ToRuleIPC, "send data to ruleprocess ipc")
|
}
|
|
func runLogger() {
|
|
suffix := role + "_" + runType
|
|
if logit {
|
file := util.LogFile + suffix // + strconv.Itoa(os.Getpid())
|
logo.Config(file, 500, 3, 30)
|
logo.Infoln("START LOGGER FILE: ", file)
|
}
|
logo.ShowConsole()
|
}
|
|
func setParamters() {
|
util.FillParams(util.FaceDetectThread, strconv.Itoa(util.SFI.DetectThrd))
|
util.FillParams(util.FaceDetectNum, strconv.Itoa(util.SFI.DetectNum))
|
util.FillParams(util.FaceDetectAngle, strconv.Itoa(util.SFI.DetectAngle))
|
util.FillParams(util.FacePropertyThread, strconv.Itoa(util.SFI.PropThrd))
|
util.FillParams(util.FaceExtractThread, strconv.Itoa(util.SFI.ExtractThrd))
|
util.FillParams(util.FaceTrackInterval, strconv.Itoa(util.SFI.TrackInterval))
|
util.FillParams(util.FaceTrackSample, strconv.Itoa(util.SFI.SampleSize))
|
|
util.FillParams(util.CarSDKLicense, util.SCI.LicenseServerPath)
|
util.FillParams(util.CarSDKModel, util.SCI.Model)
|
util.FillParams(util.CarMaxImageWidth, strconv.Itoa(util.SCI.MaxImageWidth))
|
util.FillParams(util.CarMaxImageHeight, strconv.Itoa(util.SCI.MaxImageHeight))
|
|
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.RuleIPC, util.ToRuleIPC)
|
|
util.SetParams("-gpu=" + strconv.Itoa(gpu))
|
if logit {
|
util.SetParams("-logit")
|
}
|
if shm {
|
util.SetParams("-shm")
|
}
|
|
// util.FillParams("gpu", strconv.Itoa(gpu))
|
// if logit {
|
// util.FillParams("logit", "true")
|
// }
|
// if shm {
|
// util.FillParams("shm", "true")
|
// }
|
|
}
|
|
func main() {
|
|
indices := gogpu.RankGPU()
|
if len(indices) == 0 {
|
logo.Errorln("there is no gpu for valid")
|
return
|
}
|
|
util.InitConfig()
|
|
flag.Parse()
|
|
// go func() {
|
// http.ListenAndServe("0.0.0.0:6060", nil)
|
// }()
|
|
runLogger()
|
|
logo.Infoln(os.Args)
|
ctx, cancel := context.WithCancel(context.Background())
|
|
ret := false
|
if role == single {
|
ret = proc.SingleRole(ctx, runType, id, gpu, shm)
|
} else if role == master {
|
setParamters()
|
ret = proc.MasterRole(ctx)
|
} else if role == slave {
|
ret = proc.SingleRole(ctx, runType, id, gpu, shm)
|
}
|
|
if ret {
|
c := make(chan os.Signal, 1)
|
signal.Notify(c, os.Interrupt, os.Kill, unix.SIGTERM)
|
<-c
|
}
|
|
cancel()
|
|
gosdk.Free()
|
logo.Close()
|
}
|