Обнаруживать только в разделе слоя предварительного просмотра камеры, iOS, Swift

Я пытаюсь получить зону обнаружения в режиме предварительного просмотра на слое предварительного просмотра камеры.

Возможно ли для этого, скажем, что есть прямая трансляция, и у вас включено распознавание лица, и, когда вы осматриваетесь, она только помещает рамку вокруг лица в определенной области, например, прямоугольник в центре экрана. все другие лица в окне предварительного просмотра, находящиеся за пределами прямоугольника, не обнаруживаются?

Я использую Vision, iOS, Swift.

1 ответ

Я понял это, добавив охрану перед добавлением CALayer

Перед просмотром сделал загрузку

@IBOutlet weak var scanAreaImage: UIImageView!
var regionOfInterest: CGRect!

В представлении загрузил scanAreaImage.frame - это представление изображения, которое я вставил через раскадровку, и оно будет представлять область, в которой я хотел только обнаружение,

let someRect: CGRect = scanAreaImage.frame
        regionOfInterest = someRect

затем в разделе обнаружения текста видения.

func highlightLetters(box: VNRectangleObservation) {

    let xCord = box.topLeft.x * (cameraPreviewlayer?.frame.size.width)!
    let yCord = (1 - box.topLeft.y) * (cameraPreviewlayer?.frame.size.height)!
    let width = (box.topRight.x - box.bottomLeft.x) * (cameraPreviewlayer?.frame.size.width)!
    let height = (box.topLeft.y - box.bottomLeft.y) * (cameraPreviewlayer?.frame.size.height)!

// This is the section I Added for the rec of interest detection zone.
//////////////////////////////////////////////

    let wordRect = CGRect(x: xCord, y: yCord, width: width, height: height)
    guard regionOfInterest.contains(wordRect.origin) else { return } // only draw a box if the orgin of the word box is within the regionOfInterest

// regionOfInterest being the cgRect you created earlier    
   //////////////////////////////////////////////

    let outline = CALayer()
    outline.frame = CGRect(x: xCord, y: yCord, width: width, height: height)
    outline.borderWidth = 1.0
    if textColour == 1 {
        outline.borderColor = UIColor.blue.cgColor
    }else {
        outline.borderColor = UIColor.clear.cgColor
    }

    cameraPreviewlayer?.addSublayer(outline)

это только покажет контуры вещей внутри прямоугольника, который вы создали в раскадровке. (Мое время является scanAreaImage)

Я надеюсь, что это помогает кому-то.

Другие вопросы по тегам