public static void DrawRect(this IplImage ipl, CvRect rect, CvColor color, int thickNess) { var roi = ipl.ROI; ipl.ResetROI(); ipl.DrawRect(rect.X, rect.Y, rect.X + rect.Width, rect.Y + rect.Height, color, thickNess); ipl.SetROI(roi); }
public MainWindow() { InitializeComponent(); //ViewModel からのスクリプト実行用のdelegate DataContextChanged += (o, e) => { ViewModel vm = DataContext as ViewModel; if (vm != null) { vm._ExecuteScript += (sender, arg) => { Dispatcher.Invoke(new Action(() => { pythonConsole.Pad.Console.RunStatements(arg.cmd); })); }; vm._DrawCameraBitmap += (sender, arg) => { Dispatcher.BeginInvoke(new Action(() => { IplImage img = vm.VisionControl.GetCameraImage(); DrawCameraViewEventArgs a = arg as DrawCameraViewEventArgs; if (a._draw == 1) { CvRect rect = new CvRect(a._x1, a._y1, a._x2, a._y2); img.DrawRect(rect, new CvScalar(255, 0, 0), 2); } else if (a._draw == 2) { int x1 = a._x1 - a._x2 / 2; int x2 = a._x1 + a._x2 / 2; int y1 = a._y1 - a._y2 / 2; int y2 = a._y1 + a._y2 / 2; img.DrawLine(x1, a._y1, x2, a._y1, new CvScalar(255, 0, 0), 2); img.DrawLine(a._x1, y1, a._x1, y2, new CvScalar(255, 0, 0), 2); } if (VM.CenterLine == true) { img.DrawLine(0, 320, 640, 320, new CvScalar(255, 0, 0, 0), 2); img.DrawLine(320, 0, 320, 640, new CvScalar(255, 0, 0, 0), 2); } WriteableBitmapConverter.ToWriteableBitmap(img, _col_wb); cameraImage.Source = _col_wb; img.Dispose(); //cameraImage.Source = vm.VisionControl.GetCameraBitmap(); })); }; } }; pythonConsole.Pad.Host.ConsoleCreated += new PythonConsoleControl.ConsoleCreatedEventHandler(Host_ConsoleCreated); }
private void CaptureCameraCallback() { const double ScaleFactor = 2.5; const int MinNeighbors = 1; CvSize MinSize = new CvSize(30, 30); //mengambil data dari kamera langsung CvCapture cap = CvCapture.FromCamera(2); //menggunakan cascade classifier CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile("haarcascade_eye.xml"); //deteksi mata while (true) { IplImage img = cap.QueryFrame(); CvSeq <CvAvgComp> eyes = Cv.HaarDetectObjects(img, cascade, Cv.CreateMemStorage(), ScaleFactor, MinNeighbors, HaarDetectionType.DoCannyPruning, MinSize); foreach (CvAvgComp mata in eyes.AsParallel()) { img.DrawRect(mata.Rect, CvColor.Red); if (mata.Rect.Left > pctCvWindow.Width / 2) { try { IplImage MataImg1 = img.Clone(); Cv.SetImageROI(MataImg1, mata.Rect); IplImage MataImg2 = Cv.CreateImage(mata.Rect.Size, MataImg1.Depth, MataImg1.NChannels); Cv.Copy(MataImg1, MataImg2, null); Cv.ResetImageROI(MataImg1); Bitmap MataBitmap = BitmapConverter.ToBitmap(MataImg2); Console.WriteLine("Mata terdeteksi, HIDUPKAN vibrator!!!"); } catch { } } } //keluar (while) , mata tidak terdeteksi. Bitmap bm = BitmapConverter.ToBitmap(img); bm.SetResolution(pctCvWindow.Width, pctCvWindow.Height); pctCvWindow.Image = bm; img = null; bm = null; Console.WriteLine("Mata TIDAK terdeteksi, MATIKAN vibrator!!!"); } }
private void CaptureMotion() { try { float wFactor = (float)this.Width / (float)CaptureBox.Width; float hFactor = (float)this.Height / (float)CaptureBox.Height; CvArr array = null; CvCapture cap = CvCapture.FromCamera(CaptureDevice.Any); this.Invoke(new Action(() => { lblLoading.Visible = false; GBBox.Visible = true; CamBox.Visible = true; RadarBox.Visible = true; lblGhost.Visible = true; GhostBox.Visible = true; lblDescription.Visible = true; CaptureBox.Visible = true; })); SoundTrack.Play(); SoundTrack = new SoundPlayer("Alarm.wav"); Thread.Sleep(3600); while (true) { IplImage img = cap.QueryFrame(); if (img == null) { continue; } //int black = img //if (black < 10) //{ // MessageBox.Show("Please get off cameras' field of view and switch off the lights!", "Ghost Busters Cam"); // continue; //} img.Flip(array, FlipMode.Y); string filepath = "haarcascade_frontalface_alt2.xml"; CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile(filepath); CvSeq <CvAvgComp> faces = Cv.HaarDetectObjects(img, cascade, Cv.CreateMemStorage(), 3.0, 1, HaarDetectionType.Zero, new CvSize(70, 70), new CvSize(500, 500)); Bitmap Image = BitmapConverter.ToBitmap(img); Image.SetResolution(240, 180); this.Invoke(new Action(() => { CaptureBox.Image = Image; })); foreach (CvAvgComp face in faces) { IplImage ClonedImage = img.Clone(); Cv.SetImageROI(ClonedImage, face.Rect); IplImage ThisFace = Cv.CreateImage(face.Rect.Size, ClonedImage.Depth, ClonedImage.NChannels); Cv.Copy(ClonedImage, ThisFace, null); Cv.ResetImageROI(ClonedImage); Bitmap GhostImage = BitmapConverter.ToBitmap(ThisFace); GhostImage.SetResolution(114, 103); img.DrawRect(face.Rect, CvColor.Red, 3); Bitmap FaceImage = BitmapConverter.ToBitmap(img); FaceImage.SetResolution(240, 180); this.Invoke(new Action(() => { AlertTimer.Enabled = true; CaptureBox.Image = FaceImage; GhostBox.Image = GhostImage; })); SoundTrack.Play(); Thread.Sleep(2500); this.Invoke(new Action(() => { AlertTimer.Enabled = false; lblGhostAlert.Visible = false; })); SoundTrack.Stop(); break; } } } catch (Exception e) { Console.WriteLine(e.Message); } }
EyeRects Recognize(PictureBox bb, Panel container) { const double ScaleFactor = 2.5; const int MinNeighbors = 1; CvSize MinSize = new CvSize(30, 30); //CvCapture cap = CvCapture.FromCamera(1); CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile("haarcascade_eye.xml"); //IplImage img = cap.QueryFrame(); IplImage img = IplImage.FromBitmap(new Bitmap(bb.Image)); CvSeq <CvAvgComp> eyes = Cv.HaarDetectObjects(img, cascade, Cv.CreateMemStorage(), ScaleFactor, MinNeighbors, HaarDetectionType.DoCannyPruning, MinSize); img.DrawRect(new CvRect(30, 30, bb.Image.Width - 30, bb.Image.Height - 60), CvColor.Yellow); var rcs = new EyeRects(); foreach (CvAvgComp eye in eyes.AsParallel()) { rcs.AddRect(eye.Rect); img.DrawRect(eye.Rect, CvColor.Yellow); if (eye.Rect.Left > pn.Width / 2) { try { IplImage rightEyeImg1 = img.Clone(); Cv.SetImageROI(rightEyeImg1, eye.Rect); IplImage rightEyeImg2 = Cv.CreateImage(eye.Rect.Size, rightEyeImg1.Depth, rightEyeImg1.NChannels); Cv.Copy(rightEyeImg1, rightEyeImg2, null); Cv.ResetImageROI(rightEyeImg1); //Bitmap rightEyeBm = BitmapConverter.ToBitmap(rightEyeImg2); //spMain.Panel2.Image = rightEyeBm; } catch { } } else { try { IplImage leftEyeImg1 = img.Clone(); Cv.SetImageROI(leftEyeImg1, eye.Rect); IplImage leftEyeImg2 = Cv.CreateImage(eye.Rect.Size, leftEyeImg1.Depth, leftEyeImg1.NChannels); Cv.Copy(leftEyeImg1, leftEyeImg2, null); Cv.ResetImageROI(leftEyeImg1); //Bitmap leftEyeBm = BitmapConverter.ToBitmap(leftEyeImg2); //pctLeftEye.Image = leftEyeBm; } catch { } } } Bitmap bm = BitmapConverter.ToBitmap(img); //bm.SetResolution(1500, 1500); //pctCvWindow.Image = bm; //PictureBox pb = new PictureBox(); //pb.Image = bm; //pb.Image = bm; bb.Image = bm; //spMain.Panel2.Controls.Clear(); if (pn.Controls.Count < 1) { pn.Controls.Add(bb); //bb.Click += bb_Click; } bb.Dock = DockStyle.Fill; //pb.Image = bm; img = null; bm = null; return(rcs); }
private void CaptureMotion() { try { float wFactor = (float)this.Width / (float)CaptureBox.Width; float hFactor = (float)this.Height / (float)CaptureBox.Height; CvArr array = null; CvCapture cap = CvCapture.FromCamera(CaptureDevice.Any); this.Invoke(new Action(() => { lblLoading.Visible = false; radioButton1.Visible = true; radioButton2.Visible = true; })); while (true) { IplImage img = cap.QueryFrame(); if (img == null) { continue; } img.Flip(array, FlipMode.Y); if (mode == 1) { string filepath = "haarcascade_frontalface_alt2.xml"; CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile(filepath); CvSeq <CvAvgComp> faces = Cv.HaarDetectObjects(img, cascade, Cv.CreateMemStorage(), 3.0, 1, HaarDetectionType.Zero, new CvSize(70, 70), new CvSize(500, 500)); foreach (CvAvgComp face in faces) { //IplImage ClonedImage = img.Clone(); //Cv.SetImageROI(ClonedImage, face.Rect); //IplImage ThisFace = Cv.CreateImage(face.Rect.Size, ClonedImage.Depth, ClonedImage.NChannels); //Cv.Copy(ClonedImage, ThisFace, null); //Cv.ResetImageROI(ClonedImage); //Bitmap FaceImage = BitmapConverter.ToBitmap(ThisFace); //FaceImage.SetResolution(240, 180); //CaptureBox.Image = FaceImage; img.DrawRect(face.Rect, CvColor.Red, 3); Bitmap FaceImage = BitmapConverter.ToBitmap(img); FaceImage.SetResolution(240, 180); CaptureBox.Image = FaceImage; this.Invoke(new Action(() => { LifeBox.Left = (int)(face.Rect.Left * wFactor - (float)(LifeBox.Width / 2.0) - (float)(this.Width / 2.0)); LifeBox.Top = (int)(face.Rect.Top * hFactor - (float)(LifeBox.Height / 2.0) - (float)(this.Height / 2.0)); if (LifeBox.Left > (this.Width - LifeBox.Width - 12)) { LifeBox.Left = (this.Width - LifeBox.Width - 24); } if (LifeBox.Top > (this.Height - LifeBox.Height - 48)) { LifeBox.Top = (this.Height - LifeBox.Height - 48); } if (LifeBox.Left < 12) { LifeBox.Left = 12; } if (LifeBox.Top < 12) { LifeBox.Top = 12; } Thread.Sleep(30); })); break; } } else { int AllBlobs = 0; CvBlobs blobs = null; IplImage imgHSVsrc = Cv.CreateImage(Cv.GetSize(img), BitDepth.U8, 3); IplImage imgHSVdst = Cv.CreateImage(Cv.GetSize(img), BitDepth.U8, 1); Cv.CvtColor(img, imgHSVsrc, ColorConversion.BgrToHsv); Cv.InRangeS(imgHSVsrc, new CvScalar(86, 80, 30), new CvScalar(115, 250, 250), imgHSVdst); Cv.ReleaseImage(imgHSVsrc); blobs = new CvBlobs(imgHSVdst); blobs.FilterByArea(7000, 40000); AllBlobs = blobs.Count; foreach (KeyValuePair <int, CvBlob> blob in blobs) { CvBlob CurrentBlob = blob.Value; CvRect BlobRect = CurrentBlob.Rect; CvPoint Point1, Point2; Point1.X = BlobRect.X; Point1.Y = BlobRect.Y; Point2.X = BlobRect.X + BlobRect.Width; Point2.Y = BlobRect.Y + BlobRect.Height; img.DrawRect(Point1, Point2, CvColor.LightGreen, 3, LineType.AntiAlias); this.Invoke(new Action(() => { LifeBox.Left = (int)(BlobRect.Left * wFactor - (float)(LifeBox.Width / 2.0) - (float)(this.Width / 2.0)); LifeBox.Top = (int)(BlobRect.Top * hFactor - (float)(LifeBox.Height / 2.0) - (float)(this.Height / 2.0)); if (LifeBox.Left > (this.Width - LifeBox.Width - 12)) { LifeBox.Left = (this.Width - LifeBox.Width - 24); } if (LifeBox.Top > (this.Height - LifeBox.Height - 48)) { LifeBox.Top = (this.Height - LifeBox.Height - 48); } if (LifeBox.Left < 12) { LifeBox.Left = 12; } if (LifeBox.Top < 12) { LifeBox.Top = 12; } Thread.Sleep(30); })); break; } Bitmap Item = BitmapConverter.ToBitmap(img); Item.SetResolution(240, 180); CaptureBox.Image = Item; Bitmap HSVItem = BitmapConverter.ToBitmap(imgHSVdst); HSVItem.SetResolution(240, 180); HSVCaptureBox.Image = HSVItem; Cv.ReleaseImage(imgHSVdst); } } } catch (Exception e) { Console.WriteLine("ERROR: " + e.Message + "DETAILS: " + e.StackTrace); } }
private void CaptureCameraCallback() { const double ScaleFactor = 2.5; const int MinNeighbors = 1; CvSize MinSize = new CvSize(30, 30); CvCapture cap = CvCapture.FromCamera(1); CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile("haarcascade_eye.xml"); while (true) { IplImage img = cap.QueryFrame(); //IplImage src = new IplImage(new CvSize(600, 400),BitDepth.U8,1); //Cv.Resize(img, src, Interpolation.Linear); CvSeq <CvAvgComp> eyes = Cv.HaarDetectObjects(img, cascade, Cv.CreateMemStorage(), ScaleFactor, MinNeighbors, HaarDetectionType.DoCannyPruning, MinSize); foreach (CvAvgComp eye in eyes.AsParallel()) { img.DrawRect(eye.Rect, CvColor.Red); if (eye.Rect.Left > pctCvWindow.Width / 2) { try { IplImage rightEyeImg1 = img.Clone(); Cv.SetImageROI(rightEyeImg1, eye.Rect); IplImage rightEyeImg2 = Cv.CreateImage(eye.Rect.Size, rightEyeImg1.Depth, rightEyeImg1.NChannels); Cv.Copy(rightEyeImg1, rightEyeImg2, null); Cv.ResetImageROI(rightEyeImg1); Bitmap rightEyeBm = BitmapConverter.ToBitmap(rightEyeImg2); pctRightEye.Image = rightEyeBm; } catch { } } else { try { IplImage leftEyeImg1 = img.Clone(); Cv.SetImageROI(leftEyeImg1, eye.Rect); IplImage leftEyeImg2 = Cv.CreateImage(eye.Rect.Size, leftEyeImg1.Depth, leftEyeImg1.NChannels); Cv.Copy(leftEyeImg1, leftEyeImg2, null); Cv.ResetImageROI(leftEyeImg1); Bitmap leftEyeBm = BitmapConverter.ToBitmap(leftEyeImg2); //pctLeftEye.Image = leftEyeBm; //pctLeftEye.Visible = false; }catch {} } } Bitmap bm = BitmapConverter.ToBitmap(img); bm.SetResolution(pctCvWindow.Width, pctCvWindow.Height); pctCvWindow.Image = bm; img = null; bm = null; } }