我正在开发一个年龄/性别分类的Kinect应用程序。我已经开发了一个代码,它将拍摄颜色流的快照,并且在裁剪头部关节周围的图像后,将使用face ++ api对图像进行性别分类。 / p>
System.Timers.Timer myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(TakeImagesTimely);
myTimer.Interval = 20000; // 1000 ms is one second
myTimer.Start();
public void TakeImagesTimely(object source, ElapsedEventArgs e)
{
this.Dispatcher.Invoke((Action)(() =>
{
// code here will run every 20 second
if (X == 0 || Y == 0) { Console.WriteLine("sdsds"); return; }
screen("Kinect123", faceImg);
String myPhotos = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
Bitmap bmp = new Bitmap(System.IO.Path.Combine(myPhotos, "Kinect123" + ".png"));
Bitmap bmpCrop = CropBitmap(bmp, X - 100, Y - 30, 200, 100);
BitmapSource bmpCropSrc = ConvertBitmap(bmpCrop);
if (bmpCrop == null || bmpCropSrc == null) { return; }
screen1("Kinect789", bmpCropSrc);
}));
}
此处屏幕功能获取颜色流的快照,然后在头部坐标周围裁剪图像后,screen1功能将裁剪后的图像上传到云端,并调用face ++ api进行年龄/性别分类。
我的问题是screen1函数需要3-4秒才能进行分类,这会挂起来自kinect的连续流。我知道我必须使用asynch / unblocking调用screen1函数,但不知道如何去做。< / p>
请指导我完成这件事。
答案 0 :(得分:0)
尝试在async
任务中包装screen1调用。
示例:
Task screen1Task = Task.Run( () => {
screen1("Kinect789", bmpCropSrc);
});
这将要求您在父方法上声明async
关键字。如果您不希望它“发射并忘记”,您还需要await
某时screen1Task
{/ 1}}。
更多示例:https://msdn.microsoft.com/en-us/library/hh195051%28v=vs.110%29.aspx