1

私はいくつかのswift 2を使用して練習していますが、CIDetectorを使用する際にいくつかの問題に遭遇しました。

一連の写真を含むアプリがあります。3 つの異なる長方形と 3 つの異なる人物/グループの写真。これらの画像でCIDetectorを試して、何が認識されているかを確認しました。私が持っている最も成功したのは顔です-しかし、認識している顔は画像の非常に奇妙な場所にあります.

これは、私がテストした長方形の画像とその出力です。 長方形テスト

そしてこちらが顔写真。 ここに画像の説明を入力

これが私の検出コードです:

    ///does the detecting of features
        func detectFeatures() -> [CIFeature]? {

            print("detecting")

            let detectorOptions: [String: AnyObject] = [CIDetectorAccuracy: CIDetectorAccuracyHigh, CIDetectorImageOrientation: 6]
            var detectorType    : String

            switch currentPhoto.currentType {
            case .RECTANGLES:
                detectorType = CIDetectorTypeRectangle
            case .FACES:
                detectorType = CIDetectorTypeFace
            default:
                print("error in phototype")
                return nil

            }

            let detector = CIDetector(ofType: detectorType, context: nil, options: detectorOptions)
            let image = CIImage(image: imageViewer.image!)

            guard image != nil else{
                print("image not cast to CIImage")
                return nil
            }

            return detector.featuresInImage(image!)
        }

星が追加された場所:

for f in features!{
            print(f.bounds.origin)
            imageViewer.layer.addSublayer(createMarker(f.bounds.size, location: f.bounds.origin))
        }

星が作成される場所:

///Creates a star on a layer and puts it over the point passed in
    func createMarker(size: CGSize, location: CGPoint) -> CALayer{

        print("The marker will be at [\(location.x),\(location.y)]")
        //doesn't appear in correct place on the screen
        let newLayer = CALayer()
        newLayer.bounds = imageViewer.bounds
        newLayer.frame = CGRect(origin: location, size: size)
        newLayer.contents = UIImage(named: "star")?.CGImage
        newLayer.backgroundColor = UIColor(colorLiteralRed: 0.0, green: 0.0, blue: 0.0, alpha: 0.0).CGColor
        newLayer.masksToBounds = false

        return newLayer
    }

誰かが以前にこのようなことに遭遇したことがありますか?

4

1 に答える 1