Unity3D在iOS上,使用Obj-C检查设备相机图像

7
我有一个Unity/iOS应用程序,它可以捕捉用户的照片并在3D环境中显示。现在我想利用CIFaceFeature来查找眼睛位置,这需要访问本地(Objective-C)层。我的流程如下:
Unity -> WebCamTexture(对图像进行编码并发送至本地 -- 这很慢
Obj-C -> CIFaceFeature(查找眼睛坐标)
Unity -> 显示眼睛位置
我已经有一个工作原型,但它很慢,因为我是在Unity(WebCamTexture)中捕捉图像,然后将其发送到Obj-C进行FaceFeature检测。似乎应该有一种方法简单地要求我的Obj-C类“检查活动摄像头”。这必须比编码和传输图像快得多。
因此,我的问题简而言之:
1. 我能否在Obj-C中查询“当前是否有相机正在拍摄”?
2.如果可以,我如何从当前运行的会话中“快照”该图像?
谢谢!

你是如何将Unity中的Color[]数组转换为ObjC结构的?它有多慢?谢谢。 - MobileCushion
1
@MobileCushion 这是一段时间以前的事情了,所以我不太确定我是否记得清楚。我相信我们将它转换为一个bytearray,以便通过obj-C进行传输,然后在本地端重构为UIImage(也许是CGImage?)。这里的慢意味着可能需要一秒钟左右的时间...对于实时眼部检测来说太慢了,但对于用户拍照后进行检测还算可以接受(这就是我们最终采取的方法)。 - MarcT
2个回答

2
您可以通过修改Unity中的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

干杯!


1
Unity 3D 允许执行本地代码。在脚本参考中查找本地插件。通过这种方式,您可以显示本地 iOS 视图(带有相机视图,根据您的要求可能会隐藏)并运行 Objective C 代码。然后,如果您需要在 3D 视图中使用它,则将眼睛检测结果返回给 Unity。

Matt,感谢你的回答,但我认为你并没有真正回答我的问题。我已经在执行本地Obj-C(如我在帖子中所示)。我知道如何在Obj-C或Unity中捕获相机数据。我的问题是,我想从本地端捕获和操作相机图像数据,同时在Unity中显示它。(如果您知道一种从本地端捕获相机数据并以高效的方式将其发送回Unity的方法,那可能就可以解决问题了。) - MarcT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接