void ShowDetectedRect() { labelStatus.Text = ""; labelDetectedRect.Text = ""; labelRectInfo.Text = ""; listBoxDetectedRect.Items.Clear(); if (_ImgCol != null && listBoxImg.SelectedIndex >= 0 && listBoxImg.SelectedIndex < _ImgCol.ImgList.Count && checkBoxDetect.Checked ) { LabeledImg labeledImg = _ImgCol.ImgList[listBoxImg.SelectedIndex]; if (labeledImg != null) { List <ScoredRect> ascoredRect = null; DetectionResult detRes = DetectFaces(labeledImg); if (detRes != null) { float eThreshold = trackBarThreshold.Value * _eStepSize; if (radioButtonMergedRect.Checked) { ascoredRect = detRes.GetMergedRectList(eThreshold); } else { ascoredRect = detRes.GetRawRectList(eThreshold); } } if (ascoredRect != null) { listBoxDetectedRect.SuspendLayout(); listBoxDetectedRect.Items.Clear(); labelDetectedRect.Text = ascoredRect.Count + " rectangle(s)"; foreach (ScoredRect rect in ascoredRect) { listBoxDetectedRect.Items.Add(rect); } listBoxDetectedRect.ResumeLayout(); } } } }
private void ImgListBoxDrawItem(object sender, DrawItemEventArgs e) { if (e != null && _ImgCol != null && e.Index >= 0 && e.Index < _ImgCol.ImgList.Count) { LabeledImg labeledImg = _ImgCol.ImgList[e.Index]; Bitmap img = new Bitmap(labeledImg.FileName); Rectangle rectDraw = e.Bounds; // offset rectDraw.Inflate(-1, 0); // draw a boundary if selected if ((e.State & DrawItemState.Selected) != 0) { e.Graphics.DrawRectangle(new Pen(Color.Blue), rectDraw); } else { e.Graphics.DrawRectangle(new Pen(Color.White), rectDraw); } // offset rectDraw.Offset(5, 5); rectDraw.Inflate(-10, -10); Rectangle rect = rectDraw; if ((img.Width * rectDraw.Height) > (img.Height * rectDraw.Width)) { rect.Width = rectDraw.Width; rect.Height = ((img.Height * rectDraw.Width) / img.Width); } else { rect.Height = rectDraw.Height; rect.Width = ((img.Width * rectDraw.Height) / img.Height); } rect.X += (rectDraw.Width - rect.Width) / 2; rect.Y += (rectDraw.Height - rect.Height) / 2; e.Graphics.DrawImage(img, rect); e.Graphics.DrawString((e.Index + 1).ToString(), new Font("Arial", 14), new SolidBrush(Color.Maroon), new PointF(rectDraw.X + 5, rectDraw.Y + 5)); } }
DetectionResult DetectFaces(LabeledImg labeledImg) { DetectionResult detRes = null; if (checkBoxDetect.Checked) { try { labelStatus.Text = "Detecting..."; Application.DoEvents(); Cursor = Cursors.WaitCursor; detRes = labeledImg.GetDetectionResult(_faceDetect); if (detRes != null) { labelStatus.Text = "Detection Time: " + detRes.tmDetection.Ticks / 10000 + " msec"; } else { labelStatus.Text = "Failed!"; } Cursor = Cursors.Default; } catch (Exception ex) { Cursor = Cursors.Default; MessageBox.Show(ex.Message); return(null); } } return(detRes); }
void RenderImage(Graphics graf) { if (_ImgCol == null || listBoxImg.SelectedIndex < 0 || listBoxImg.SelectedIndex >= _ImgCol.ImgList.Count ) { _fImgDirty = _fDetectionDirty = false; return; } LabeledImg labeledImg = _ImgCol.ImgList[listBoxImg.SelectedIndex]; // render the image if (_fImgDirty) { labelImgName.Text = labeledImg.FileName; Rectangle rect = labelImageBorder.Bounds; rect.Width = labelHeader.Left - 1 - labelImageBorder.Bounds.Left; rect.Height = labelStatus.Top - 1 - labelImageBorder.Bounds.Top; graf.FillRectangle(new SolidBrush(BackColor), rect); labeledImg.Render(graf, labelImageBorder.Bounds); if (checkBoxLabel.Checked) { labeledImg.RenderAnnotations(graf, labelImageBorder.Bounds); } _fImgDirty = false; } if (_fDetectionDirty) { if (checkBoxDetect.Checked) { DetectionResult detRes = DetectFaces(labeledImg); if (detRes != null) { float eThreshold = trackBarThreshold.Value * _eStepSize; if (radioButtonRawRectangles.Checked) { detRes.RenderRawRect(eThreshold, graf, labelImageBorder.Bounds); } if (radioButtonMergedRect.Checked) { detRes.RenderMergedRect(eThreshold, graf, labelImageBorder.Bounds); } } if (listBoxDetectedRect.Items.Count > 0) { ScoredRect scoredRect = (ScoredRect)listBoxDetectedRect.SelectedItem; if (scoredRect != null) { labelRectInfo.Text = "Rect #" + listBoxDetectedRect.SelectedIndex + "\r\n" + scoredRect.ToString() + "\r\n" + "Score: " + scoredRect.Score; scoredRect.Render(graf, labelImageBorder.Bounds, true); labeledImg.Render(graf, scoredRect.Bounds, labelFaceBorder.Bounds); labeledImg.Render(graf, scoredRect.Bounds, labelFaceBorderBig.Bounds); } } } _fDetectionDirty = false; } }