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