关于从 Apple 的 WWDC 2017 Session 506 中提取的代码 - exifOrientationFromDeviceOrientation() 定义在哪里?
Posted
技术标签:
【中文标题】关于从 Apple 的 WWDC 2017 Session 506 中提取的代码 - exifOrientationFromDeviceOrientation() 定义在哪里?【英文标题】:Regarding code extract from Apple's WWDC 2017 Session 506 - Where is exifOrientationFromDeviceOrientation() defined? 【发布时间】:2017-09-25 20:27:11 【问题描述】:在会话 506 的 WWDC 2017 视频中。第一个演示中的一段代码如下所示:
let exifOrientation = self.exifOrientationFromDeviceOrientation()
自我的使用。表示它应该是来自 ViewController 的属性。鉴于此 exifOrientationFromDeviceOrientation() 方法在 UIViewController 类中不存在,我认为 ViewController 符合授予该功能的协议。有人能指出是哪个协议吗?
【问题讨论】:
【参考方案1】:我强烈建议您查看https://github.com/yulingtianxia/Core-ML-Sample/blob/master/CoreMLSample/ViewController.swift,它是 GitHub 上 Core-ML-Sample 项目的一部分。
var exifOrientationFromDeviceOrientation: Int32
let exifOrientation: DeviceOrientation
enum DeviceOrientation: Int32
case top0ColLeft = 1
case top0ColRight = 2
case bottom0ColRight = 3
case bottom0ColLeft = 4
case left0ColTop = 5
case right0ColTop = 6
case right0ColBottom = 7
case left0ColBottom = 8
switch UIDevice.current.orientation
case .portraitUpsideDown:
exifOrientation = .left0ColBottom
case .landscapeLeft:
exifOrientation = .top0ColLeft
case .landscapeRight:
exifOrientation = .bottom0ColRight
default:
exifOrientation = .right0ColTop
return exifOrientation.rawValue
干杯!
【讨论】:
我正在研究对象本地化,我认为这种用于获取方向的 Exif 相关方法可能是错误的。应该遵循来自developer.apple.com/documentation/vision/… 的 WWDC 示例代码。我在这个项目中使用了该方法,并且事情按预期工作。 此外,我在 ios 12.0 上,Apple 自己的演示源代码应该比其他人的 GitHub 更受信任,其他条件相同 @kawingkelvin exifOrientation 是实现者自己的变量定义;实际值在这里定义:developer.apple.com/documentation/uikit/uideviceorientation【参考方案2】:比这更糟糕。它指的是他们应用程序的 UIViewController() 子类中的一个函数。我在 WWDC 示例中的任何地方都找不到此应用的副本——我认为它们没有包含它。
但是,这个项目似乎有一个等价物:
https://github.com/yulingtianxia/Core-ML-Sample/blob/master/CoreMLSample/ViewController.swift#L107
【讨论】:
谢谢,娄!我会看看这个 GitHub 页面,看看我能从中学到什么。最好的问候。【参考方案3】:你指的是这个代码posted here:
他们在代码中创建变量:
var exifOrientationFromDeviceOrientation: Int32
let exifOrientation: DeviceOrientation
enum DeviceOrientation: Int32
case top0ColLeft = 1
case top0ColRight = 2
case bottom0ColRight = 3
case bottom0ColLeft = 4
case left0ColTop = 5
case right0ColTop = 6
case right0ColBottom = 7
case left0ColBottom = 8
switch UIDevice.current.orientation
case .portraitUpsideDown:
exifOrientation = .left0ColBottom
case .landscapeLeft:
exifOrientation = .top0ColLeft
case .landscapeRight:
exifOrientation = .bottom0ColRight
default:
exifOrientation = .right0ColTop
return exifOrientation.rawValue
【讨论】:
感谢您的回复,CodeBender。如果您能指出我可以找到完整代码的位置,请不胜感激。最好的问候。 @AndreGuerra 我发布了链接。您可以在我的回答中的“发布在这里:”中找到它。 o.O - 我的错。之前没有注意到。谢谢。 您能解释一下为什么默认值会返回相当于 6 的值吗?我在 Apple 的文档中查找了它,6 对应于 CGImagePropertyOrientation.**right**。枚举 8 个不同的 DeviceOrientation 并只使用其中的 4 个是没有意义的,对吧?不知何故,我将这个缺失的部分应用到了我的人脸识别演示中,并且成功了,只是无法解释原因。 @AndreGuerra 大胆猜测它是用来处理镜像的,但是下面的开关没有考虑到它?【参考方案4】:请查看来自 Apple 的“Training a Create ML Model to Classify Flowers”。相关代码应该适用于 iOS 12.x。
我使用了此线程中发布的代码,却没有意识到它们不(或不再)正确。我仅在开始测试绘制边界框和分类的图像定位模型时才检测到这一点。所以如果你有同样的问题,你可以尝试更改代码。
我将返回我的分类模型,看看准确性是否有所提高。我的预期对象具有旋转不变性,因此我不希望这会发生太大变化。但是对于所有具有明确方向的模型,如果您没有正确定位,您的准确性可能会下降。
【讨论】:
以上是关于关于从 Apple 的 WWDC 2017 Session 506 中提取的代码 - exifOrientationFromDeviceOrientation() 定义在哪里?的主要内容,如果未能解决你的问题,请参考以下文章