私はXcode9でAppleがリリースした新しいVision Frameworkを探求するために、下のリンクで入手できるXcodeプロジェクトを作成しました。私はGitHubとYoutubeの両方で見つかったコードに基づいて調整しましたが、VNImageRequestHandlerのorientationパラメータにCGImagePropertyOrientation.rightがなぜ必要なのか理解できません。誰かがこれに光を当てることができますか?なぜ顔検出はCGImagePropertyOrientation.rightでのみ機能しますか?
答えて
私はUIImage.imageOrientationとCGImagePropertyOrientationにAppleのドキュメントを通して行く自分の質問府への答えを見つけました。 これらのプロパティの両方が画像の向きに関連していますが、実際の値はそれぞれのエナメルタイトに割り当てられています。たとえば、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サンプルが更新されました。写真を撮影するために使用される向きに関係なく、現在の顔が認識されます。
よろしくお願いいたします。
顔を検出するには、顔の向きを知る必要があります。顔の向きは、通常、画像の意図した表示方向に一致します。 (ほとんどの人は、ほとんどの場合、顔が正面を向いている写真を撮ります)ほとんどの顔検出ソフトウェア、Visionが含まれています。右上の顔を探すために最適化されています。任意の向きの顔を探しているときに偽陽性です。
Visionの顔検出機能では、向きを指定することをお勧めします。 AFAICT指定しない場合は、デフォルトの.up
が使用されます。 .right
が指定された方向である場合にのみ正しく認識する画像がある場合、それらの画像には、好みの表示方向が、取り込まれた固有のセンサー方向と必ずしも同じではないことを示すEXIFメタデータが含まれている可能性があります。
あなたのイメージは、ストレージ/ URLからロードUIImage
として起動している場合は、その意図した表示方向がUIImageOrientation
であるもののイメージを尋ね、とビジョンメソッドに渡すためCGImagePropertyOrientation
にそれを変換することができます。 AppleのVision sample codeでこれを行う方法があります。
- 1. Android - 顔の検出機能
- 2. C/C++でのロバストな顔検出?
- 3. 目的地cを使用した異なる顔検出または同じ顔検出
- 4. ホッグ機能を使用した顔検出
- 5. 顔検出にHOGを使用した機能選択
- 6. Apple Vision Framework:観察で笑顔や幸せな顔を検出しますか?
- 7. 検索が機能しないのはなぜですか?
- 8. 検索バーが機能しないのはなぜですか?
- 9. カスタム検証が機能しないのはなぜですか?
- 10. 検索フォームが機能しないのはなぜですか?
- 11. 顔検出アルゴリズムは15x15ピクセルの顔ですか?
- 12. リンクリストの挿入機能が機能しないのはなぜですか? (C++)
- 13. C#IS文が機能しないのはなぜですか?
- 14. これはなぜ機能しないのですか? (C++)
- 15. 出力パラメータが機能しないのはなぜですか?
- 16. なぜ衝突検出が機能しないのですか? (p5 js frame work)
- 17. なぜ私の衝突検出がフェイザーで機能していませんか?
- 18. 顔を検出してOpenCVで検出した顔を保存する
- 19. C# - 顔とクロップの画像を検出します。
- 20. OpenCVは顔の左側のプロファイルのみを検出できますか?
- 21. C++ 11アトミック:なぜこのコードは機能しますか?
- 22. C#のプロパティ:これはなぜ機能しますか?
- 23. なぜTextBoxの検証が機能しないのですか
- 24. UIImage顔検出
- 25. SFML衝突検出は原点でのみ機能しますか?
- 26. なぜ検証が機能しないのですか? Django Forms
- 27. J2MEの顔検出
- 28. Androidの顔検出
- 29. opencvの顔検出
- 30. 顔の検出VNDetectFaceRectanglesRequest
UInt32(CGImagePropertyOrientation)を提供する予定のInt(imageOrientationから)を使用しようとしているため、これは機能しません。この場合、コンパイラはエラーをスローします。 –
Appleのサンプルコードには、同じ変換が可能な拡張機能があります。 https://developer.apple.com/documentation/vision/classifying_images_with_vision_and_core_ml –
'拡張UIImageOrientation { するvar cgImagePropertyOrientation:CGImagePropertyOrientation { スイッチ自己{ 場合.down: 場合.downリターン.LEFT: リターンケース.LEFT .RIGHT: リターンケースを.up .RIGHT: 場合は.downMirrored リターン.up: リターンケース.rightMirrored .leftMirrored: リターン場合は.leftMirrored .downMirrored リターンは0 .rightMirroredケース。upMirrored:CGImagePropertyOrientation { スイッチimageOrientation { 場合.down: 戻り.down リターン }} } ' –