From ffd71d97fc9eb5236e6a92db408745ddf080217b Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期一, 06 五月 2019 13:28:05 +0800 Subject: [PATCH] 整理代码 --- /dev/null | 46 ----------------------- analysis/main.go | 10 +++-- analysis/work/service/ipcreciever.go | 21 ++++++---- analysis/demo/winYolo.go | 27 ++++--------- analysis/proc.go | 2 5 files changed, 28 insertions(+), 78 deletions(-) diff --git a/analysis/demo/simpleCV.go b/analysis/demo/simpleCV.go deleted file mode 100644 index 716800d..0000000 --- a/analysis/demo/simpleCV.go +++ /dev/null @@ -1,151 +0,0 @@ -package demo - -import ( - "fmt" - "image" - "image/color" - - "gocv.io/x/gocv" -) - -func cvRTSP() { - url := `rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream` - - webcam, _ := gocv.OpenVideoCapture(url) - window := gocv.NewWindow("Hello") - img := gocv.NewMat() - - for { - webcam.Read(&img) - window.IMShow(img) - window.WaitKey(1) - } -} - -func cvFaceDetect() { - // set to use a video capture device 0 - deviceID := 0 - url := `rtsp://admin:a1234567@192.168.1.188:554/h264/ch1/main/av_stream` - - // open webcam - webcam, err := gocv.OpenVideoCapture(url) - if err != nil { - fmt.Println(err) - return - } - defer webcam.Close() - - // open display window - window := gocv.NewWindow("Face Detect") - defer window.Close() - - // prepare image matrix - img := gocv.NewMat() - defer img.Close() - - // color for the rect when faces detected - blue := color.RGBA{0, 0, 255, 0} - - // load classifier to recognize faces - classifier := gocv.NewCascadeClassifier() - defer classifier.Close() - - if !classifier.Load("data/haarcascade_frontalface_default.xml") { - fmt.Println("Error reading cascade file: data/haarcascade_frontalface_default.xml") - return - } - - fmt.Printf("start reading camera device: %v\n", deviceID) - for { - if ok := webcam.Read(&img); !ok { - fmt.Printf("cannot read device %v\n", deviceID) - return - } - if img.Empty() { - continue - } - - // detect faces - rects := classifier.DetectMultiScale(img) - fmt.Printf("found %d faces\n", len(rects)) - - // draw a rectangle around each face on the original image - for _, r := range rects { - gocv.Rectangle(&img, r, blue, 3) - } - - // show the image in the window, and wait 1 millisecond - window.IMShow(img) - window.WaitKey(1) - } -} - -var w = 400 - -// CVDraw demo -func CVDraw() { - windowA := gocv.NewWindow("basic drawing: atom") - windowR := gocv.NewWindow("basic drawing: rook") - defer windowA.Close() - defer windowR.Close() - - atom := gocv.NewMatWithSize(w, w, gocv.MatTypeCV8UC3) - defer atom.Close() - - rook := gocv.NewMatWithSize(w, w, gocv.MatTypeCV8UC3) - defer rook.Close() - - black := color.RGBA{0, 0, 0, 0} - blue := color.RGBA{0, 0, 255, 0} - red := color.RGBA{255, 0, 0, 0} - white := color.RGBA{255, 255, 255, 0} - yellow := color.RGBA{255, 255, 0, 0} - - // draw the atom - gocv.Ellipse(&atom, image.Pt(w/2., w/2.), image.Pt(w/4.0, w/16.0), 90., 0, 360, blue, 2) - gocv.Ellipse(&atom, image.Pt(w/2., w/2.), image.Pt(w/4.0, w/16.0), 0., 0, 360, blue, 2) - gocv.Ellipse(&atom, image.Pt(w/2., w/2.), image.Pt(w/4.0, w/16.0), 45., 0, 360, blue, 2) - gocv.Ellipse(&atom, image.Pt(w/2., w/2.), image.Pt(w/4.0, w/16.0), -45., 0, 360, blue, 2) - gocv.Circle(&atom, image.Pt(w/2., w/2.), w/32., red, -1) - - // draw the rook - points := [][]image.Point{ - { - image.Pt(w/4., 7*w/8.), - image.Pt(3*w/4., 7*w/8.), - image.Pt(3*w/4., 13*w/16.), - image.Pt(11*w/16., 13*w/16.), - image.Pt(19*w/32., 3*w/8.), - image.Pt(3*w/4., 3*w/8.), - image.Pt(3*w/4., w/8.), - image.Pt(26*w/40., w/8.), - image.Pt(26*w/40., w/4.), - image.Pt(22*w/40., w/4.), - image.Pt(22*w/40., w/8.), - image.Pt(18*w/40., w/8.), - image.Pt(18*w/40., w/4.), - image.Pt(14*w/40., w/4.), - image.Pt(14*w/40., w/8.), - image.Pt(w/4., w/8.), - image.Pt(w/4., 3*w/8.), - image.Pt(13*w/32., 3*w/8.), - image.Pt(5*w/16., 13*w/16.), - image.Pt(w/4., 13*w/16.), - }, - } - gocv.FillPoly(&rook, points, white) - gocv.Rectangle(&rook, image.Rect(0, 7*w/8.0, w, w), yellow, -1) - gocv.Line(&rook, image.Pt(0, 15*w/16), image.Pt(w, 15*w/16), black, 2) - gocv.Line(&rook, image.Pt(w/4, 7*w/8), image.Pt(w/4, w), black, 2) - gocv.Line(&rook, image.Pt(w/2, 7*w/8), image.Pt(w/2, w), black, 2) - gocv.Line(&rook, image.Pt(3*w/4, 7*w/8), image.Pt(3*w/4, w), black, 2) - - for { - windowA.IMShow(atom) - windowR.IMShow(rook) - - if windowA.WaitKey(10) >= 0 || windowR.WaitKey(10) >= 0 { - break - } - } -} diff --git a/analysis/demo/simpleFace.go b/analysis/demo/simpleFace.go deleted file mode 100644 index 6b6b498..0000000 --- a/analysis/demo/simpleFace.go +++ /dev/null @@ -1,94 +0,0 @@ -package demo - -// import ( -// "analysis/valib/gosdk" -// "fmt" -// "image/color" -// "os" -// "time" -// "videoServer/util/goffmpeg" - -// "gocv.io/x/gocv" -// ) - -// func imageFileName(pic string, i int) string { -// imgFile := fmt.Sprintf("%s/%d.jpg", pic, i) -// imgFile2 := fmt.Sprintf("%s/%d.jpeg", pic, i) - -// if _, err := os.Stat(imgFile); err != nil { -// if _, err2 := os.Stat(imgFile2); err2 == nil { -// imgFile = imgFile2 -// } else { -// imgFile = "" -// } -// } -// return imgFile -// } - -// func runFaceSDK(data []byte, wid, hei int) ([]gosdk.CFacePos, []gosdk.CThftResult, [][]byte) { -// var prop []gosdk.CThftResult -// var feat [][]byte - -// img := gosdk.SDKImage{Data: data, Width: wid, Height: hei} -// faces := gosdk.FaceDetect(img, 0) -// for k, v := range faces { -// p := gosdk.FaceProperty(v, img, 1) -// prop = append(prop, p) -// fmt.Printf("face no %d, facepos %+v, property %+v\n", k, v, prop) -// f := gosdk.FaceExtract(v, img, 2) -// feat = append(feat, f) -// fmt.Printf("face extract feature data addr %p\n", feat) -// } - -// return faces, prop, feat -// } - -// // Face demo -// func Face(pic string) { -// gf := goffmpeg.New() - -// gosdk.InitFaceDetector(16, 0, 30, 60) -// gosdk.InitFaceProperty(10) -// gosdk.InitFaceExtractor(10, 0) - -// window := gocv.NewWindow("Face") -// clr := color.RGBA{0, 255, 255, 0} - -// for { -// for i := 0; i < 500; i++ { - -// imgFile := imageFileName(pic, i) -// if imgFile == "" { -// continue -// } - -// data, wid, hei := gf.DecodeJPEG(imgFile) -// if wid <= 0 || hei <= 0 { -// fmt.Println("decode jpg error") -// continue -// } - -// faces, prop, feat := runFaceSDK(data, wid, hei) -// count := len(faces) -// for i := 0; i < count; i++ { -// fmt.Printf("face NO. %d, Pos %+v, Property %+v, Feature Address %p\n", -// i, faces[i], prop[i], feat[i]) -// } -// // draw image -// img, _ := gocv.NewMatFromBytes(hei, wid, gocv.MatTypeCV8UC3, data) -// for _, f := range faces { -// rect := f.RcFace -// r := gosdk.Rect(rect) -// gocv.Rectangle(&img, r, clr, 3) -// } -// // show image -// window.IMShow(img) -// window.WaitKey(1) - -// time.Sleep(time.Duration(1000) * time.Millisecond) -// } -// } -// gf.Free() -// gosdk.Free() - -// } diff --git a/analysis/demo/simpleYolo.go b/analysis/demo/simpleYolo.go deleted file mode 100644 index 9b2954a..0000000 --- a/analysis/demo/simpleYolo.go +++ /dev/null @@ -1,46 +0,0 @@ -package demo - -// import ( -// "analysis/valib/gosdk" -// srv "analysis/work/service" -// "fmt" -// "image" -// "image/color" -// "strconv" -// "sync" -// "time" -// "videoServer/util/goffmpeg" - -// "gocv.io/x/gocv" -// ) - -// // Yolo demo -// func Yolo(url string) { -// gf := goffmpeg.New() - -// cfg := "./data/yolo/cfg/yolov3.cfg" -// weights := "./data/yolo/yolov3.weights" -// name := "./data/yolo/data/coco.names" - -// yolo := gosdk.InitYolo(cfg, weights, name, 0) - -// imageChan := make(chan srv.ImageInfo, 5) -// startYolo = false - -// go handleImage(yolo, imageChan) - -// gf.ActiveDecoder(func(d *[]byte, w, h *int) { - -// if *w > 0 && *h > 0 { -// i := srv.ImageInfo{Data: *d, Width: *w, Height: *h, CameraID: "id"} -// imageChan <- i -// } else { -// fmt.Println("decode jpg error") -// } -// }) -// gf.Run(url) - -// for { -// time.Sleep(time.Duration(1000) * time.Millisecond) -// } -// } diff --git a/analysis/demo/simpleIPC.go b/analysis/demo/winYolo.go similarity index 87% rename from analysis/demo/simpleIPC.go rename to analysis/demo/winYolo.go index 1cecdfc..befe3e6 100644 --- a/analysis/demo/simpleIPC.go +++ b/analysis/demo/winYolo.go @@ -11,23 +11,6 @@ "gocv.io/x/gocv" ) -// RunYoloFromIPC recv data from ipc -func RunYoloFromIPC(ipcURL string, asServer bool) { - imageChan := make(chan srv.ImageInfo) - - d := srv.NewReciever(ipcURL, imageChan) - go d.Run(asServer) - - cfg := "./data/yolo/cfg/yolov3.cfg" - weights := "./data/yolo/yolov3.weights" - name := "./data/yolo/data/coco.names" - - yolo := gosdk.InitYolo(cfg, weights, name, 0) - - handleImage(yolo, imageChan) - -} - func min(x, y int) int { if x > y { return y @@ -74,7 +57,15 @@ var startYolo bool var m sync.Mutex -func handleImage(yolo *gosdk.YoloHandle, ch <-chan srv.ImageInfo) { +// ShowYolo show yolo result +func ShowYolo(ch <-chan srv.ImageInfo) { + + cfg := "./data/yolo/cfg/yolov3.cfg" + weights := "./data/yolo/yolov3.weights" + name := "./data/yolo/data/coco.names" + + yolo := gosdk.InitYolo(cfg, weights, name, 0) + window := gocv.NewWindow("Yolo") pic := gocv.NewMat() diff --git a/analysis/main.go b/analysis/main.go index 02c4bc9..2da6327 100644 --- a/analysis/main.go +++ b/analysis/main.go @@ -2,6 +2,7 @@ import ( "analysis/demo" + srv "analysis/work/service" "flag" "fmt" ) @@ -29,11 +30,12 @@ fmt.Println("start test, pic folder: ", picFolder) - // demo.Face(picFolder) - // demo.Yolo(streamURL) - // demo.CVDraw() + imageChan := make(chan srv.ImageInfo) - demo.RunYoloFromIPC(ipcURL, true) + d := srv.NewReciever(ipcURL, imageChan) + go d.RunAsServer() + + demo.ShowYolo(imageChan) fakeStartProc() } diff --git a/analysis/proc.go b/analysis/proc.go index 4be19bd..b44023d 100644 --- a/analysis/proc.go +++ b/analysis/proc.go @@ -15,7 +15,7 @@ imageChan := make(chan service.ImageInfo) d := service.NewReciever(ipcURL, imageChan) - go d.Run(false) + go d.RunAsClient() if proc == "" { d.Stop() diff --git a/analysis/work/service/reciever.go b/analysis/work/service/ipcreciever.go similarity index 81% rename from analysis/work/service/reciever.go rename to analysis/work/service/ipcreciever.go index b952d99..68e1147 100644 --- a/analysis/work/service/reciever.go +++ b/analysis/work/service/ipcreciever.go @@ -53,21 +53,24 @@ } } -// Run run task from ipc data -func (r *Reciever) Run(asServer bool) { - var i *ipc.IPC - if asServer { - i = ipc.NewServer(r.ctxIPC.ctx, r.ipcURL) - } else { - i = ipc.NewClient(r.ctxIPC.ctx, r.ipcURL) - } - +func (r *Reciever) run(i *ipc.IPC) { dataChan := make(chan []byte) go unserilizeImageInfo(dataChan, r.chImage) i.RecvToChannel(dataChan) } +// RunAsServer run a IPC server +func (r *Reciever) RunAsServer() { + r.run(ipc.NewServer(r.ctxIPC.ctx, r.ipcURL)) + +} + +// RunAsClient run as a IPC client +func (r *Reciever) RunAsClient() { + r.run(ipc.NewClient(r.ctxIPC.ctx, r.ipcURL)) +} + // Stop stop reciever, run in goroutine func (r *Reciever) Stop() { if r.ctxIPC.cancel != nil { -- Gitblit v1.8.0