Unity3d 在unity 3d中捕捉每一帧的图像

Unity3d 在unity 3d中捕捉每一帧的图像,unity3d,motion,Unity3d,Motion,我正在研究一种基于手势识别的算法。这个算法是我在Winform上用c脚本找到并运行的。我需要在游戏中使用相同的技术通过网络摄像头进行手势检测。我尝试在游戏脚本中使用该算法,但无法使用该算法捕获任何图像。下面是我目前正在处理的代码。我正在使用一个org.net框架来实现运动检测的思想。位图图像始终返回null。然而,在winform中使用相同的算法,它会在每一帧更改时捕获图像。我知道有一种在unity中使用PhotoCapture的技术,但我不确定在运行时如何在每一帧上使用它。感谢您的指导。谢谢

我正在研究一种基于手势识别的算法。这个算法是我在Winform上用c脚本找到并运行的。我需要在游戏中使用相同的技术通过网络摄像头进行手势检测。我尝试在游戏脚本中使用该算法,但无法使用该算法捕获任何图像。下面是我目前正在处理的代码。我正在使用一个org.net框架来实现运动检测的思想。位图图像始终返回null。然而,在winform中使用相同的算法,它会在每一帧更改时捕获图像。我知道有一种在unity中使用PhotoCapture的技术,但我不确定在运行时如何在每一帧上使用它。感谢您的指导。谢谢

OpenCamera.cs

使用手势识别; 使用系统集合; 使用System.Collections.Generic; 使用系统图; 使用UnityEngine; 使用系统、绘图、设计; 使用UnityEngine.VR.WSA.WebCam; 使用System.Linq; 使用制度; 公共类OpenCamera:MonoBehavior{ //统计长度 私人常数int statLength=15; 位图图像; PhotoCapture photoCaptureObject=null; Texture2D targetTexture=null; //当前统计指标 私有int-statIndex=0; //就绪统计值 私有int stateredy=0; //统计数组 私有int[]statCount=新int[statLength]; 私人手势识别视频手势识别器=新手势识别视频; 私人手势=新手势; 私有int-gestureShowTime=0; //用于初始化 无效启动 { WebCamTexture WebCamTexture=新的WebCamTexture; 渲染器=GetComponent; renderer.material.mainTexture=webcamTexture; 网络摄像头纹理。播放; } //每帧调用一次更新 无效更新 { gesturesRecognizer.ProcessFrameref图像; //检查我们是否需要在图像顶部绘制手势信息 如果手势显示时间>0 { 如果signet.LeftHand==HandPosition.NotRaised | | signet.RightHand!=HandPosition.NotRaised { System.Drawing.Graphics g=System.Drawing.Graphics.FromImageimage; string text=string.FormatLeft=+signature.LeftHand+\n right=+signature.righHand; System.Drawing.Font drawFont=新的System.Drawing.FontCourier,13,System.Drawing.FontStyle.Bold; SolidBrush drawBrush=新的SolidBrushSystem.Drawing.Color.Blue; g、 DrawStringtext、drawFont、drawBrush、新点F0、5; drawFont.Dispose; 拔牙刷。处理; g、 处置; } 手势显示时间-; } } }
正如我目前无法回复的评论中所提到的,这些库始终严重依赖system.drawing库,而system.drawing库只是一种窗口

您可以尝试下载图形库dll或将其从系统文件夹复制到unity项目的托管代码中,以便在每个可导出平台上运行以保留引用。然后,您可以捕获纹理2D every frame rendertextures(每帧渲染一次),并将这些像素绘制到位图中,然后将其馈送到库中

请注意,每帧复制数千个像素确实非常繁重。您必须将UnityEngine.Color转换为System.Drawing.Color


这是一个可能有效的简单解决方案。但这绝对不是一个好的结局。

使用系统是没有用的。统一绘图。如果您需要使用它,那么甚至不要使用Unity,因为这消除了使用Unity的主要原因,即可移植性。我建议您使用Unity+OpenGL。当前的框架即aForge.net为我提供了手势识别的实际使用。在使用opengl framwork的情况下,它是否提供了与Forge.net相同的好处?Forge严重依赖System.Drawing。如果你要使用它,就使用WPF或Windows窗体,因为如果你使用Unity,你的应用程序只能在Windows上运行。当我说OpenGL时,我实际上是指OpenCV。那是个打字错误。您必须知道C++为它做了一个C包装,或者考虑购买它。它将节省您的时间,并可以执行任何类型的图像处理。我使用了基于open cv的算法进行手势检测,但这些算法仅用于检测手指,而不是整个手。然而,即使我没有使用opencv,unity也使用Texture2D进行图像处理。opencv是否支持Texture2D中使用的库?