问题描述
我有一种方法可以从网络摄像头获取视频作为位图流,我有一种方法可以从图片中检测人脸并在它们周围绘制一个矩形
public void start_cam_stream()
{
string[] devices = UsbCamera.FindDevices();
if (devices.Length == 0) MessageBox.Show("no camera");
int cameraIndex = 0;
UsbCamera.VideoFormat[] formats = UsbCamera.GetVideoFormat(cameraIndex);
var camera = new UsbCamera(cameraIndex,formats[0]);
camera.Start();
var bmp = camera.GetBitmap();
var timer = new System.Timers.Timer(100) { SynchronizingObject = this };
//timer.Elapsed += (s,ev) => pictureBox1.Image = camera.GetBitmap();
timer.Elapsed += (s,ev) => detectfaces(camera.GetBitmap());
timer.Start();
// release resource when close.
this.FormClosing += (s,ev) => timer.Stop();
this.FormClosing += (s,ev) => camera.Stop();
}
public void detectfaces(Bitmap original_bmp)
{
Bitmap imgbmp;
var img = DlibDotNet.Extensions.BitmapExtensions.ToArray2D<RgbPixel>(original_bmp);
using (var fd = Dlib.GetFrontalFaceDetector())
{
// find all faces in the image
var faces = fd.Operator(img);
foreach (var face in faces)
{
// draw a rectangle for each face
Dlib.DrawRectangle(img,face,color: new RgbPixel(0,255,255),thickness: 4);
}
detectedbmp = BitmapExtensions.ToBitmap<RgbPixel>(img);
}
pictureBox1.Image = original_bmp;
pictureBox2.Image = detectedbmp;
}
我想要做的是从camera.GetBitmap() 中获取每个位图并将“detectfaces()”方法应用于它,并将“修改后的位图”放在第二个图片框中。
当处理单个图像时,detectfaces 方法可以正常工作,另外我将位图转换为 2Darray,以便 Dlib 可以使用它并将其转换回 bmp,以便它可以显示在图片框中。
但是,当我执行两个图片框时保持空白,就好像我没有对它们的“图像”属性应用任何内容
这是我第一次使用面部识别库和类似的东西,所以我不确定我做错了什么,谷歌在这种情况下没有那么有用。
如果有人有一个完全不同的解决方案可以正常工作(使用除 dlib 之外的其他库),我准备尝试一下。
(ps:摄影是这个人https://github.com/secile/UsbCamera)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)