iOS 上的 Unity3D,在 Obj-C 中检查设备摄像头图像
Posted
技术标签:
【中文标题】iOS 上的 Unity3D,在 Obj-C 中检查设备摄像头图像【英文标题】:Unity3D on iOS, inspecting the device camera image in Obj-C 【发布时间】:2013-01-11 22:11:12 【问题描述】:我有一个 Unity/ios 应用程序,它可以捕获用户的照片并将其显示在 3D 环境中。现在我想利用CIFaceFeature
来查找眼睛位置,这需要访问本机(Objective-C)层。我的流程看起来像:
Unity -> WebCamTexture
(编码并将图像发送到本机 - 这很慢)
Obj-C -> CIFaceFeature
(查找眼坐标)
Unity -> 显示眼睛位置
我有一个工作原型,但速度很慢,因为我在 Unity (WebCamTexture) 中捕获图像,然后将其发送到 Obj-C 进行 FaceFeature 检测。似乎应该有一种方法可以简单地让我的 Obj-C 类“检查活动相机”。这必须比编码和传递图像快得多。
简而言之,我的问题是:
我可以在 Obj-C 中查询“当前是否有摄像头正在拍摄?” 如果是这样,我如何从当前运行的会话中“快照”图像?谢谢!
【问题讨论】:
你是如何设法将 Color[] 数组统一转换为 ObjC 结构的,它有多慢?谢谢 @MobileCushion 这是很久以前的事了,所以我不完全确定我记得。我相信我们将它转换为字节数组以通过管道传输到 obj-C,然后在本机端将其重建为 UIImage(可能是 CGImage?)。这里的慢意味着可能一秒钟左右......对于实时眼睛检测来说太慢了,但在用户拍照后检测(这就是我们最终做的)是可以接受的。 【参考方案1】:您可以通过统一更改 CameraCapture.mm 来访问相机的预览捕获流。
我建议您查看一些名为 Camera Capture 的现有插件,以了解如何将额外的相机 I/O 功能添加到捕获会话/“捕获管道”中。
让你朝着正确的方向前进。看看 CameraCapture.mm 中的 initCapture 函数:
- (bool)initCapture:(AVCaptureDevice*)device width:(int)w height:(int)h fps:(float)fps
在这里您将能够添加到捕获会话。
然后你应该看看苹果提供的面部识别代码示例:
https://developer.apple.com/library/ios/samplecode/SquareCam/Introduction/Intro.html
干杯
【讨论】:
【参考方案2】:Unity 3D 允许执行本机代码。在脚本参考中,查找本机插件。通过这种方式,您可以显示本机 iOS 视图(使用相机视图,可能根据您的要求隐藏)并运行 Objective C 代码。如果您在 3D 视图中需要,则将眼睛检测结果返回给 Unity。
【讨论】:
matt,我很欣赏这个答案,但我认为你并没有真正解决这个问题。我已经在执行本机 Obj-C(正如我在帖子中指出的那样)。我知道如何在 Obj-C 或 Unity 中捕获相机数据。我的问题是我想在本机端捕获和操作来自相机的图像数据,同时在 Unity 中显示它。 (如果您知道一种从本机端的相机捕获然后以有效方式将该数据发送回 Unity 的方法,那可能就可以解决问题。)以上是关于iOS 上的 Unity3D,在 Obj-C 中检查设备摄像头图像的主要内容,如果未能解决你的问题,请参考以下文章
iOS上的Unity3D - 几天后Vuforia总是停止工作