2017-09-07 4 views
1

J'essaie d'obtenir une zone de détection dans un aperçu en direct sur ma couche de prévisualisation de la caméra. Est-il possible pour cela, disons qu'il y a un flux en direct et que vous avez le visage détecté et que vous regardez autour de lui ne mettra une boîte autour du visage dans une certaine zone, par exemple un rectangle au centre de l'écran . tous les autres visages dans l'aperçu qui sont en dehors du rectangle ne sont pas détectés?seulement détecter dans une section de couche de prévisualisation de la caméra, iOS, Swift

Im utilisant Vision, iOS, Swift.

+0

Une chose que vous venez avec, j'essaie de faire la même chose maintenant? – djay

+0

J'ai fait de mon mieux pour mettre un garde dans la zone de détection. Créez donc un cgrect si la largeur et la hauteur du texte xCord yCord dans la fonction de mise en surbrillance de la lettre créent ensuite un autre cgrect pour votre texte d'intérêt pour la zone que vous voulez seulement voir. Ensuite, utilisez guard 2ndcgrect.contains (1stcgrect.origin) sinon {return} mettez ceci avant de voir le calque, cela ne fera que mettre des contours autour de la chose dans le texte d'intérêt .. https://medium.com/@tonymerritt/hi-peng -27ff127cd659? Source = linkShare-8fa3bb4b8b91-1511567697 Je l'ai posté ici aussi dans les commentaires –

+1

@djay J'ai aussi posté ma réponse à ceci afin que vous puissiez le voir correctement –

Répondre

0

Je compris cela en ajoutant un garde avant la CALayer ajouter

Avant Voir ne charge

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

Dans la vue a fait la charge scanAreaImage.frame est une vue de l'image que je mets via story-board et ceci représenterait la zone que je voulais seulement détecter dans,

let someRect: CGRect = scanAreaImage.frame 
     regionOfInterest = someRect 

puis dans la section de détection de texte de vision. Ceci montrera seulement les contours des choses à l'intérieur du rectangle que vous avez créé dans le storyboard.

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) 

(Mine étant le scanAreaImage)

J'espère que cela aide quelqu'un.