我已經在下面的鏈接中創建了Xcode項目,以便探索Apple使用Xcode9發佈的新Vision Framework。它基於我在GitHub和Youtube上找到的代碼進行的調整,但我無法理解爲什麼VNImageRequestHandler上的orientation參數的CGImagePropertyOrientation.right。有人可以闡明這一點嗎?爲什麼臉部檢測只能使用CGImagePropertyOrientation.right?
0
A
回答
0
我已經找到了答案,以我自己的問題去府通蘋果對UIImage.imageOrientation和CGImagePropertyOrientation文檔。在此處張貼以防其他人遇到相同問題: 底線是這兩個屬性與圖像方向有關,但它們具有不同的實際值,分配給它們的枚舉。例如,一個UIImage.imageOrientation.up將映射到值0,而一個CGImagePropertyOrientation.up將映射到1.我解決它的方式是構建這個自定義的「翻譯」函數,該函數返回從UIImage.imageOrientation輸入映射到相應CGImagePropertyOrientation值:
func getCGOrientationFromUIImage(_ image: UIImage) -> CGImagePropertyOrientation {
// returns que equivalent CGImagePropertyOrientation given an UIImage.
// This is required because UIImage.imageOrientation values don't match to CGImagePropertyOrientation values
switch image.imageOrientation {
case .down:
return .down
case .left:
return .left
case .right:
return .right
case .up:
return .up
case .downMirrored:
return .downMirrored
case .leftMirrored:
return .leftMirrored
case .rightMirrored:
return .rightMirrored
case .upMirrored:
return .upMirrored
}
}
更新GitHub的樣品。無論使用何種方向拍攝照片,現在都可以識別人臉。
此致敬禮。
1
人臉檢測需要知道人臉所需的方向,這通常與圖像的預期顯示方向相匹配。 (也就是說,大多數人在大多數情況下會在臉部正面朝上的地方拍照)。大多數人臉檢測軟件(包括Vision)都經過優化,可以查找正面朝上的臉,因爲它更容易獲得當你正在尋找任何方向的面孔時誤報。
Vision的臉部檢測功能更喜歡您指定方向。 AFAICT如果您沒有指定一個,則它們使用默認的.up
方向。如果只有.right
爲指定方向時才具有可正確識別的圖像,則這些圖像可能具有EXIF元數據,表明其首選顯示方向不一定與它們捕捉的本機傳感器方向相同。
如果您的圖片開始從存儲/ URL加載UIImage
,你可以問圖像預期顯示方向是什麼UIImageOrientation
,並且將其轉換成CGImagePropertyOrientation
傳遞到視力的方法。在蘋果的Vision sample code中有這樣做的方法。
相關問題
- 1. 爲什麼OpenCV人臉檢測識別臉部未受過訓練的臉部?
- 2. UIImage臉部檢測
- 3. VNDetectFaceRectanglesRequest檢測臉部
- 4. 在OpenCV中檢測臉部並保存檢測到的臉部
- 5. 如何使用jviolajones庫檢測臉部?
- 6. OpenCV只能檢測臉部的左側輪廓?
- 7. 使用基於CNN的人臉檢測器檢測臉部圖案
- 8. Android - 臉部特徵檢測
- 9. 旋轉臉部檢測
- 10. 使用Java中的openCV檢測臉部內的笑臉
- 11. 爲什麼nth-type檢測只能在Firefox中失敗?
- 12. 爲什麼SKSpriteNodes只能部分渲染?
- 13. Google臉部檢測在轉換爲圖像並嘗試檢測臉部時崩潰
- 14. 如何檢測Android中的臉部和笑臉和臉部匹配?
- 15. 爲什麼clearInterval只能使用一次?
- 16. 爲什麼evaluateJavaScript只能使用一次?
- 17. 臉部和身體檢測API
- 18. 檢測視頻文件中的臉部
- 19. 在ROI中檢測臉部中心
- 20. 如何檢查安卓人臉檢測中的人臉檢測
- 21. 頭部檢測不是我的應用程序的臉部檢測
- 22. 使用豬特徵的人臉檢測
- 23. 使用Kinect進行人臉檢測
- 24. 使用Affectiva檢測真人臉
- 25. 人臉檢測算法使用Emgu CV
- 26. 多人臉檢測
- 27. opencv人臉檢測
- 28. 在你的程序中使用臉部檢測
- 29. 我們如何使用OpenCV檢測臉部
- 30. 如何使用iphone SDK檢測動物臉部?
這不起作用,因爲您正嘗試使用Int(來自imageOrientation),您希望提供一個UInt32(CGImagePropertyOrientation)。編譯器在這種情況下會引發錯誤。 –
Apple的示例代碼具有允許進行相同轉換的擴展名。 https://developer.apple.com/documentation/vision/classifying_images_with_vision_and_core_ml –
'擴展UIImageOrientation {VAR cgImagePropertyOrientation:CGImagePropertyOrientation { 開關自{ 情況下.down: 回報.down 情況。左: 回報。左 情況.right: 返回.right 情況.UP: 返回.UP 情況.downMirrored: 返回.downMirrored 情況.leftMirrored: 返回.leftMirrored 情況.rightMirrored: 返回.rightMirrored 的情況。upMirrored: 返回.upMirrored } } }' –