如何在unity 3d中引用unity3d kinect v2的类库

unity3D+kinect开发,怎么调用外部摄像头呢?因为kinect的摄像头分辨率太低了
unity3D+kinect开发,怎么调用外部摄像头呢?因为kinect的摄像头分辨率太低了,所以想换高清个摄像头,要怎么写?下面是我不用kinect,单独调用外部摄像头的方法:&public string deviceN&& &WebCamT&& &// Use this for initialization&& &IEnumerator Start()&& &{&& & & &//获取授权&& & & &yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);&& & & &if (Application.HasUserAuthorization(UserAuthorization.WebCam))&& & & &{&& & & & & &WebCamDevice[] devices = WebCamTexture.&& print(devices.Length);&& & & & & &deviceName = devices[0].&& & & & & &tex = new WebCamTexture(deviceName, , 12);&& & & & & &renderer.material.mainTexture =&& & & & & &tex.Play();&& & & &}&& & & &else&& & & &{&& & & &}&& &} &&用了上面那个调用外部摄像头的代码后,kinect的摄像头就不好用了;一直报“Could not start graphUnityEngine.WebCamTexture:Play()&Start&c__Iterator2:MoveNext() (at Assets/ZigFu/Scripts/Viewers/ZigToVM.cs:20)Could not pause pControlUnityEngine.WebCamTexture:Play()&Start&c__Iterator2:MoveNext() (at Assets/ZigFu/Scripts/Viewers/ZigToVM.cs:20)”错误,不知道是什么原因,哪位大神知道?
要评论请先&或者&
只能kinect专用设备。一般的webcamera无法替代。因为kinect除了摄像头还带红外监测。
正如楼上说的,Kinect专用设备,用一般的webcamera无法代替,这样你就无法获取kinect的深度和骨骼数据了。如果你懂这点,只是想用高分辨率的RGB Camera替换kinect的RGB的Camera的话,理论上是行的,不过你还有解决一下问题“:1.确保你只是使用了Kinect的深度数据。2.如果你使用的了kinect的骨骼数据,最好确认下这个kinect的骨骼数据是从深度数据中提取的,不知道你用的是哪个kinect sdk,现在有些网上算法在进行骨骼矫正的时候用到了kinect的RGB 图像,矫正了垂直深度图像缺失的情况。3.确保你的kinect的线程和你的外接摄像头不再同一个线程,事实上现在的sdk理论上都说支持多个kinect,但是需要启动不同线程。4.据说(几个月前看的了)有人测试说kienct工作的时候,你的外接摄像头无法正常工作,不知道真的假的,不过理论上来说只要启动不同线程应该没什么影响的。
谢谢楼上朋友的回答,我觉得应该有办法吧,因为Kinect有两类摄像头,近摄像头和普通的视频摄像头。近摄像头是采集深度,骨骼等数据的;可能不用webcamera ,用别的......。我是想让kinect普通摄像头和外部摄像头同时存在,只要隐藏了kinect普通摄像头,不是禁用kinect摄像头!!!!内容来自[短消息]
:谢谢楼上朋友的回答,我觉得应该有办法吧,因为Kinect有两类摄像头,近红外摄像头和普通的视频摄像头。近红外摄像头是采集深度,骨骼等数据的;可能不用webcamera ,用别的......。我是想让kinec .. ( 09:21) 理论是可行的,不过你想让Kinect的RGB Camera和普通的Camera同时存在,要解决的就是你的线程问题,如果你能在两个线程中运行这两种设备,那你就能成功。而且还要注意你的Kinect线程应该和你的应用程序是在一个线程里面的,而如果你在开启异步线程的话,你的图像数据处理会不会麻烦,能不能同步显示?当然我只是理论上稍稍看过没有试验过,如果楼主实验成功了,麻烦把思路和方法分享下了。
按照楼上朋友的说法,这的确是线程的问题;但kinect camera 和普通的camera都需要调用主线程
关注中 新版的kinect 也是640x480?
嗯,但是分比率还是太差了
问题已解决!!是摄像头驱动还有设置分辨率的问题!!
问题补充:&& 我刚开始用的是百脑通1080p的高清无驱动摄像头,后来换了一个罗技的高清摄像头,用驱动精灵安装了一个驱动就可以用了关于kinect采集的彩色图像如何显示在unity3D中,以及镜像显示的问题
查了一些资料,据我所知,有两种方法:一种是显示在某个物体的renderer.material.mainTexture上;另一种是显示在GUI.DrawTexture上。其实原理是一样的,只不过显示在某个物体上,你可以很容易的移动这个物体。
之前查了些资料,主要是参照了这个大牛的工程。
http://wiki.etc.cmu.edu/unity3d/index.php/Microsoft_Kinect_-_Microsoft_SDK
运行场景,会发现有两个plane,一个显示彩色图像,一个显示深度图像。插一句,对于菜鸟来说,看大牛的代码,再把自己想要的那部分提取出来,真的不容易。可能是我能力不够,我前前后后折腾了将近三天,才把显示彩色图像的代码摘取出来。虽然能把图像显示在GUITexture上,但是没办法实现镜像的效果。后来到处找资料,才终于把这个小小的功能实现。期间虽然辛苦,但是现在感觉很满足。再插一句,google真的比百度好用的多,而且国外的论坛里的东西都很有用。
先从哪里开始呢,先说怎么把kinect采集的彩色图像信息传入unity中吧。我这里说的,都是基于上面那个大牛的工程,所以想看懂下面的,你先要下载并且运行大牛的工程。
好了,开始了。
找到ColorImagePlane你能看到他上面的脚本DisplayColor.cs就是这个脚本控制在这块平板上显示图像。打开它,稍稍研究一下它。好了,vs哼唧哼唧打开了。
先找start()。你看到定义了一个tex,然后把这个tex赋值给了这个平板的
renderer.material.mainTexture。至于最一开始声明的
private Kinect.KinectInterface
还有kinect =
devOrEmu.getKinect();我理解的不是很透彻,但是我是这么看的。先看Kinect.KinectInterface中的Kinect,F12,无法导航到定义,那就F12
KinectInterface。跳到KinectInterop.cs了,也就是说,如果你要提取显示图像的代码,就要带上这个脚本。KinectInterop.cs中定义了接口public
KinectInterface。这个接口中有一些没有函数体的函数。其他类如果想要实现这个接口,就要在类中完成接口中函数的定义。这样看来DisplayColor.cs中定义的小写kinect要实现接口中的方法。而这个DeviceOrEmulator我没搞懂是干什么的。反正devOrEmu.getKinect();这个方法返回了一个KinectSensor类型的device,而KinectSensor类实现了接口KinectInterface。这样再把device赋值给kinect。也不知道我说没说清楚,不过大家如果细心看看的话,应该能理清这个思路。
接下来update()。这就看到了kinect有pollColor()这个方法。其中最重要的一句tex.SetPixels32()。这个方法是从底到顶复制数据。所以导致了plane上的图像是上下颠倒的,虽然运行之后你发现没有颠倒,可能是大牛把plane旋转了一下。如果想显示在GUI.Drawtexture上就要正过来了。我想了好久才想明白。我是这么做的,图片下半部分被注释掉的也是一种方法,不过好像比较笨,当然方法很多,有基础的人应该觉得是小菜一碟。
好了已经正过来了。那怎么显示在gui上呢,这个简单图片中的函数已经把dst[]返回给了tex,你在GUI.DrawTexture中把tex画在屏幕上就行了。
正过来以后,你会发现,当你举起左手的时候,画面右边的手举起来了。如果你想要一个镜像的效果的话,这样可不行。查了一些资料。方法有:
GUI.DrawTextureWithTexCoords,
这个 GUI.DrawTexture(new
Rect(Screen.width, 0, -Screen.width, Screen.height), tex);
GUIUtility.RotateAroundPivot。
还有这个GUIUtility.ScaleAroundPivot(scale,
p);这些我都亲测了,只有最后一个能达到取镜像的效果。之前的三个对于静态的Texture2D也没问题,但是到了这种动态的不断刷新的tex这里,就只有最后一个好使了。每种方法如何使用,请自行谷歌。如果最后一个不好使的话,我就不会兴冲冲的来写这篇博文了,希望能对大家有帮助。如果三天之前,我一下子就搜到这样的文章,可能半天的时间,我就搞定这些了。在这里,衷心的推荐用chrome浏览器搜索你想要的信息。
最后,本来打算把之前做过的完整的demo发上来,但是实在太忙了,等以后有时间我会慢慢整理的。上面说的乱糟糟,不知道说清楚没有。大家转载的时候注明出处吧,虽然也没什么技术含量,但也用了好多时间在里面。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前位置: >
Unity3D+Kinect OpenNI开发获取身高
时间: 09:21 来源:Unity之家 作者:unity.jb51.net 浏览:
获取人物身高使用Kinect Openni在Unity3D中可以获取人的身高脚本如下:using&UnityE
using&System.C
using&System.Collections.G
public&class&GetHeight&:&MonoBehaviour&
&&&&public&static&double&height=0.0;&//人的身高
&&&&public&float&people_kinectSpleed=2.4f;&//人到kinect的距离,(kinect自身有效距离大概在1.2m-3.5m之间【XBOX】)
&&&&public&bool&isDynamicGetHeight=&//是否动态获取身高
&&&&void&Zig_Update(ZigInput&zig)&
&&&&&&&&foreach&(ZigTrackedUser&trackedUser&in&zig.TrackedUsers.Values)&
&&&&&&&&&&&&if(isDynamicGetHeight)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&if(trackedUser.SkeletonTracked)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&height=Height(trackedUser.Skeleton);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&else
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&if(Math.Round(trackedUser.Position.z&/&1000,1)&-people_kinectSpleed)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&if&(trackedUser.SkeletonTracked&&&&height==0.0)&
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&height=Height(trackedUser.Skeleton);&//得到当前使用用户所有的节点
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&public&double&Height(ZigInputJoint[]&skeleton)
&&&&&&&&const&double&HEAD_DIVERGENCE&=&0.1;
&&&&&&&&ZigInputJoint&head&=&skeleton[(int)ZigJointId.Head];
&&&&&&&&ZigInputJoint&neck&=&skeleton[(int)ZigJointId.Neck];
&&&&&&&&ZigInputJoint&spine&=&skeleton[(int)ZigJointId.Torso];
&&&&&&&&ZigInputJoint&waist&=&skeleton[(int)ZigJointId.Waist];
&&&&&&&&ZigInputJoint&hipLeft&=&skeleton[(int)ZigJointId.LeftHip];
&&&&&&&&ZigInputJoint&hipRight&=&skeleton[(int)ZigJointId.RightHip];
&&&&&&&&ZigInputJoint&kneeLeft&=&skeleton[(int)ZigJointId.LeftKnee];
&&&&&&&&ZigInputJoint&kneeRight&=&skeleton[(int)ZigJointId.RightKnee];
&&&&&&&&ZigInputJoint&ankleLeft&=&skeleton[(int)ZigJointId.LeftAnkle];
&&&&&&&&ZigInputJoint&ankleRight&=&skeleton[(int)ZigJointId.RightAnkle];
&&&&&&&&ZigInputJoint&footLeft&=&skeleton[(int)ZigJointId.LeftFoot];
&&&&&&&&ZigInputJoint&footRight&=&skeleton[(int)ZigJointId.RightFoot];
&&&&&&&&//&Find&which&leg&is&tracked&more&accurately.
&&&&&&&&int&legLeftTrackedJoints&=&NumberOfTrackedJoints(hipLeft,&kneeLeft,&ankleLeft,&footLeft);
&&&&&&&&int&legRightTrackedJoints&=&NumberOfTrackedJoints(hipRight,&kneeRight,&ankleRight,&footRight);
&&&&&&&&double&legLength&=&legLeftTrackedJoints&&&legRightTrackedJoints&?&Length(hipLeft,&kneeLeft,&ankleLeft,&footLeft)&:&Length(hipRight,&kneeRight,&ankleRight,&footRight);
&&&&&&&&return&Math.Round(Length(head,&neck,&spine,&waist)&+&legLength&+&HEAD_DIVERGENCE,2);
&&&&public&double&Length(ZigInputJoint&p1,&ZigInputJoint&p2)
&&&&&&&&return&Mathf.Sqrt(Mathf.Pow((p1.Position.x&-&p2.Position.x)&/&1000,&2)&+Mathf.Pow((p1.Position.y&-&p2.Position.y)&/&1000,&2)&+&Mathf.Pow((p1.Position.z&-&p2.Position.z)&/&1000,&2));
&&&&public&double&Length(params&ZigInputJoint[]&joints)
&&&&&&&&double&length&=&0;
&&&&&&&&for&(int&index&=&0;&index&&&joints.Length&-&1;&index++)
&&&&&&&&&&&&length&+=&Length(joints[index],&joints[index&+&1]);
&&&&&&&&return&
&&&&public&int&NumberOfTrackedJoints(params&ZigInputJoint[]&joints)
&&&&&&&&int&trackedJoints&=&0;
&&&&&&&&foreach&(ZigInputJoint&joint&in&joints)
&&&&&&&&&&&&trackedJoints++;
&&&&&&&&return&trackedJ
}OK。赶快复制脚本测试下吧。。。
(责任编辑:脚印)
免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
猜你也喜欢看这些 ??????
其他类型的Unity编程 ??????Unity 3D 、kinect与maya角色绑定的结合 - 人人问答 - 人人素材社区 - Powered by Discuz!
只需一步,快速开始
只需一步,快速开始
后使用快捷导航没有帐号?
请完成以下验证码
所属分类: &
本版主题: 6167
今日更新: 0
Unity 3D 、kinect与maya角色绑定的结合
签到天数: 90 天[LV.6]常住居民II
骨骼的方向如何确定?
为什么在maya中方向是正确的,蒙皮之后都没有人物手臂翻转的情况,而导出fbx格式导进u3d中 由kinect接收人体骨骼信息来控制模型时 肩部会有骨骼翻转甚至反向呢?
很有可能是你在unity3d中旋转了模型。以前我也遇到过。
签到天数: 62 天[LV.6]常住居民II
很有可能是你在unity3d中旋转了模型。以前我也遇到过。
您好 现在您解决了吗 导进去的模型是不是不能在U3d中有哪些限制,能具体回答下么&
签到天数: 9 天[LV.3]偶尔看看II
kinect求解
签到天数: 9 天[LV.3]偶尔看看II
kinect求解
签到天数: 90 天[LV.6]常住居民II
很有可能是你在unity3d中旋转了模型。以前我也遇到过。
您好&&现在您解决了吗&&导进去的模型是不是不能在U3d中有哪些限制,能具体回答下么
签到天数: 62 天[LV.6]常住居民II
您好&&现在您解决了吗&&导进去的模型是不是不能在U3d中有哪些限制,能具体回答下么
就是导入u3d中把模型旋转了180度,然后骨骼映射就各种反相。然后我就导入模型后不旋转操作,让它成为一个空GameObject的子物体,你旋转父体GameObject就不会影响到模型。还有模型的面数不能太高,具体是最好不要超过大概6.5个三角面。骨骼系统,我个人认为u3d对bip,CAT的支持很好。
谢谢你 bip,CAT 虽然我不懂 我会去看 去了解的,谢谢你告诉我这么多啊,受教了。&
签到天数: 90 天[LV.6]常住居民II
谢谢你&&bip,CAT 虽然我不懂 我会去看 去了解的,谢谢你告诉我这么多啊,受教了。
签到天数: 90 天[LV.6]常住居民II
就是导入u3d中把模型旋转了180度,然后骨骼映射就各种反相。然后我就导入模型后不旋转操作,让它成为一个 ...
谢谢你&&bip,CAT 虽然我不懂 我会去看 去了解的,谢谢你告诉我这么多啊,受教了。
大家好!人人素材网第138期中文字幕翻译教程来啦!
教程简介:
现在的很多电影都是使用3D工具进行预览的,这样可以现场拍摄和视觉特效的效果。在这个教程中,杰森·迈克尔·霍尔(Jason Michael Hall)将会为大家讲解预览的功能,以及在很短的时间内一个艺术家能完成多少任务。教程中也会为大家讲解在电影制作行业中预览艺术家是如何工作的。使用Maya从一个空白的场景做起,杰森会为我们讲解制作素材组成场景的过程。他与我们探讨一些摄像机和电影艺术基础知识后,开始进行Blocking操作,里面会探讨提升速度、简化操作流程的效率,组织,摄影技术,和窍门。
大家好!人人素材网第139期中文字幕翻译教程来啦!
教程简介:
本教程中,我们会学习到Maya中的基础照明。首先,我们会了解一些基础的照明概念。接下来,我们学习Maya软件中的真实照明。最后,我们会了解Maya灯光和渲染工具的所有基础属性和性能,然后从头至尾制作一个完整的照明场景。学习完本教程,大家可以更好地理解Maya中的基础灯光照明。工具类服务
编辑部专用服务
作者专用服务
基于Kinect和Unity3D的多交互方法与装置
申请(专利)号:
申请日期:
公开(公告)日:
公开(公告)号:
主分类号:
G06F3/01,G06F3/00,G,G06,G06F,G06F3
G06F3/01,G06F3/00,G,G06,G06F,G06F3,G06F3/01,G06F3/00
申请(专利权)人:
北京农业信息技术研究中心
发明(设计)人:
王虓,郭新宇,吴升,温维亮,王传宇
主申请人地址:
100097 北京市海淀区曙光花园中路11号农科大厦A座318b
专利代理机构:
北京路浩知识产权代理有限公司 11002
国别省市代码:
一种基于Kinect和Unity3D的多交互方法,,其特征在于,包括具体以下步骤: S1:调整Unity3D中摄像机参数与Kinect有效检测范围一致; S2:利用Kinect确定用户坐标以及地面方程; S3:根据相对位置确定虚拟模拟坐标,并注册虚拟模型; S4:设计交互姿势与语音; S5:确定Unity3D控制模型位移动画以及多媒体效果; S6:对Unity3D中的摄像机获取到的画面与Kinect的摄像头获取的图像进行融合并显示。 
法律状态:
公开,公开
相关检索词
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)(C)北京万方数据股份有限公司
万方数据电子出版社}

我要回帖

更多关于 unity3d 引用dll 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信