B4i Library [Class] FaceDetector

Discussion in 'iOS Libraries' started by CaptKronos, Mar 16, 2019.

  1. CaptKronos

    CaptKronos Active Member Licensed User

    FaceDetector is a class that uses Apple's Vision framework which was introduced with iOS11.

    The class basically returns a list of detected faces, and each face consists of a list of floats which represent the x and y coordinates of various face landmarks. The class explicitly exposes the left and right eye pupils, because those were the landmarks I'm interested in. To interpret the rest of the points you can refer here: https://stackoverflow.com/questions/45298639/ios11-vision-framework-mapping-all-face-landmarks.

    When calling the scanFace function you have the option to request that the returned points are mapped to the bitmap's or an imageView's coordinates, or to just return the raw 0..1 values. The mapping is more convoluted than just multiplying by the image dimensions so I would advise going with one of the first two options.

    afacedetect.scanFace(bmp, Truenull'map to bmp's coordinates
    afacedetect.scanFace(bmp, True, ImageView1) 'map to ImageView1's coordinates
    afacedetect.scanFace(bmp, Falsenull'the raw values
    Example of using the class
    Sub Process_Globals
    'These global variables will be declared once when the application starts.
        'Public variables can be accessed from all modules.
        Public App As Application
    Public NavControl As NavigationController
    Private Page1 As Page
    Private afacedetect As FaceDetector
    Private ImageView1 As ImageView
    End Sub

    Private Sub Application_Start (Nav As NavigationController)
    'SetDebugAutoFlushLogs(True) 'Uncomment if program crashes before all logs are printed.
        NavControl = Nav
        Page1.Title = 
    "Page 1"
        Page1.RootPanel.Color = 
    End Sub

    Private Sub Page1_Resize(Width As Int, Height As Int)
    Dim filename As String="XXXXXX"
    If File.Exists(File.DirAssets, filename)=False Then
    Msgbox("Please replace XXXXXX with a valid filename before running","")
    End If
    LoadBitmap(File.DirAssets , filename)
    LoadBitmap(File.DirAssets , filename), True, ImageView1)
    End Sub

    Sub mark(c As Canvas, pt As pointf, col As Int)
    End Sub

    Sub face_scanned
    Dim aFace As face
    Dim r As Rect
    If afacedetect.faces.Size=0 Then
    Msgbox("No faces","")
    End If
    Dim c As Canvas, col As Int
    For i=0 To afacedetect.faces.Size-1
            r.Initialize(aFace.boundingRect.Left, aFace.boundingRect.Top, _
            aFace.boundingRect.Right, aFace.boundingRect.Bottom)
    If i=afacedetect.faceWithHighestConfidence Then
    End If
            c.DrawRect(r, col, 
            mark(c, aFace.leftPupil, col)
            mark(c, aFace.rightPupil, col)
    'uncomment if you want all points plotted
    '        Dim pt As pointf
    '        For j=0 To aFace.points.Size-2 Step 2
    '            pt.x=aFace.points.Get(j)
    '            pt.y=aFace.points.Get(j+1)
    '            mark(c,pt, col)
    '        Next
    End Sub

    Attached Files:

    Last edited: Mar 22, 2019
    ajk, Rubsanpe, Sasuke Sama and 4 others like this.
  2. CaptKronos

    CaptKronos Active Member Licensed User

    I have just updated FaceDetector.bas. I had the left and right pupils the wrong way around!
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice