
Dans ce topic, je posterai progressivement des exemples, sur l'utilisation du SDK de Luxand
https://www.luxand.com/facesdk/
Code : Tout sélectionner
;Luxand_FSDK_APIS.pbl
facesdk.dll
;Initialization functions
FSDK_ActivateLibrary 1
FSDK_GetHardware_ID 1
FSDK_GetLicenseInfo 1
FSDK_SetNumThreads 1
FSDK_GetNumThreads 1
FSDK_Initialize 0
FSDK_Finalize 0
;Face detection functions
FSDK_DetectEyes 2
FSDK_DetectEyesInRegion 3
FSDK_DetectFace 2
FSDK_DetectMultipleFaces 4
FSDK_DetectFacialFeatures 2
FSDK_DetectFacialFeaturesInRegion 3
FSDK_DetectFacialFeaturesEx 3
FSDK_DetectFacialFeaturesInRegionEx 4
FSDK_SetFaceDetectionParameters 3
FSDK_SetFaceDetectionThreshold 1
;Image manipulation functions
FSDK_CreateEmptyImage 1
FSDK_LoadImageFromFile 2
FSDK_LoadImageFromBuffer 6
FSDK_LoadImageFromJpegBuffer 3
FSDK_LoadImageFromPngBuffer 3
FSDK_FreeImage 1
FSDK_SaveImageToFile 2
FSDK_LoadImageFromHBitmap 2
FSDK_SaveImageToHBitmap 2
FSDK_GetImageBufferSize 3
FSDK_SaveImageToBuffer 3
FSDK_SetJpegCompressionQuality 1
FSDK_CopyImage 2
FSDK_ResizeImage 3
FSDK_MirrorImage 2
FSDK_RotateImage90 3
FSDK_RotateImage 3
FSDK_RotateImageCenter 5
FSDK_CopyRect 6
FSDK_CopyRectReplicateBorder 6
FSDK_GetImageWidth 2
FSDK_GetImageHeight 2
FSDK_ExtractFaceImage 6
;Matching
FSDK_GetFaceTemplate 2
FSDK_GetFaceTemplateInRegion 3
FSDK_GetFaceTemplateUsingFeatures 3
FSDK_GetFaceTemplateUsingEyes 3
FSDK_MatchFaces 3
FSDK_GetMatchingThresholdAtFAR 2
FSDK_GetMatchingThresholdAtFRR 2
FSDK_GetDetectedFaceConfidence 1
;Webcam
FSDK_InitializeCapturing 0
FSDK_FinalizeCapturing 0
FSDK_SetCameraNaming 1
FSDK_GetCameraList 2
FSDK_GetCameraListEx 3
FSDK_GetVideoFormatList 3
FSDK_SetVideoFormat 2
FSDK_OpenVideoCamera 2
FSDK_CloseVideoCamera 1
FSDK_GrabFrame 2
FSDK_Paint 2
FSDK_OpenIPVideoCamera 6
FSDK_SetHTTPProxy 4
;Tracker
FSDK_CreateTracker 1
FSDK_FreeTracker 1
FSDK_ClearTracker 1
FSDK_SetTrackerParameter 3
FSDK_SetTrackerMultipleParameters 3
FSDK_GetTrackerParameter 4
FSDK_FeedFrame 6
FSDK_GetTrackerEyes 4
FSDK_GetTrackerFacialFeatures 4
FSDK_GetTrackerFacePosition 4
FSDK_LockID 2
FSDK_UnlockID 2
FSDK_GetName 4
FSDK_GetAllNames 4
FSDK_SetName 3
FSDK_GetIDReassignment 3
FSDK_GetSimilarIDCount 3
FSDK_GetSimilarIDList 4
FSDK_SaveTrackerMemoryToFile 2
FSDK_LoadTrackerMemoryFromFile 2
FSDK_GetTrackerMemoryBufferSize 2
FSDK_SaveTrackerMemoryToBuffer 3
FSDK_LoadTrackerMemoryFromBuffer 2
;Facial attributes
FSDK_GetTrackerFacialAttribute 6
FSDK_DetectFacialAttributeUsingFeatures 5
FSDK_GetValueConfidence 3
Code : Tout sélectionner
;Luxand_FSDKVB_APIS.pbl
facesdk-vb.dll
;Initialization functions
FSDKVB_ActivateLibrary 1
FSDKVB_GetHardware_ID 1
FSDKVB_GetLicenseInfo 1
FSDKVB_SetNumThreads 1
FSDKVB_GetNumThreads 1
FSDKVB_Initialize 0
FSDKVB_Finalize 0
;Face detection functions
FSDKVB_DetectEyes 2
FSDKVB_DetectEyesInRegion 3
FSDKVB_DetectFace 2
FSDKVB_DetectMultipleFaces 4
FSDKVB_DetectFacialFeatures 2
FSDKVB_DetectFacialFeaturesInRegion 3
FSDKVB_DetectFacialFeaturesEx 3
FSDKVB_DetectFacialFeaturesInRegionEx 4
FSDKVB_SetFaceDetectionParameters 3
FSDKVB_SetFaceDetectionThreshold 1
;Image manipulation functions
FSDKVB_CreateEmptyImage 1
FSDKVB_LoadImageFromFile 2
FSDKVB_LoadImageFromBuffer 6
FSDKVB_LoadImageFromJpegBuffer 3
FSDKVB_LoadImageFromPngBuffer 3
FSDKVB_FreeImage 1
FSDKVB_SaveImageToFile 2
FSDKVB_LoadImageFromHBitmap 2
FSDKVB_SaveImageToHBitmap 2
FSDKVB_GetImageBufferSize 3
FSDKVB_SaveImageToBuffer 3
FSDKVB_SetJpegCompressionQuality 1
FSDKVB_CopyImage 2
FSDKVB_ResizeImage 3
FSDKVB_MirrorImage 2
FSDKVB_RotateImage90 3
FSDKVB_RotateImage 3
FSDKVB_RotateImageCenter 5
FSDKVB_CopyRect 6
FSDKVB_CopyRectReplicateBorder 6
FSDKVB_GetImageWidth 2
FSDKVB_GetImageHeight 2
FSDKVB_ExtractFaceImage 6
;Matching
FSDKVB_GetFaceTemplate 2
FSDKVB_GetFaceTemplateInRegion 3
FSDKVB_GetFaceTemplateUsingFeatures 3
FSDKVB_GetFaceTemplateUsingEyes 3
FSDKVB_MatchFaces 3
FSDKVB_GetMatchingThresholdAtFAR 2
FSDKVB_GetMatchingThresholdAtFRR 2
FSDKVB_GetDetectedFaceConfidence 1
;Webcam
FSDKVB_InitializeCapturing 0
FSDKVB_FinalizeCapturing 0
FSDKVB_SetCameraNaming 1
FSDKVB_GetCameraList 2
FSDKVB_GetCameraListEx 3
FSDKVB_GetVideoFormatList 3
FSDKVB_SetVideoFormat 2
FSDKVB_OpenVideoCamera 2
FSDKVB_CloseVideoCamera 1
FSDKVB_GrabFrame 2
FSDKVB_Paint 2
FSDKVB_OpenIPVideoCamera 6
FSDKVB_SetHTTPProxy 4
;Tracker
FSDKVB_CreateTracker 1
FSDKVB_FreeTracker 1
FSDKVB_ClearTracker 1
FSDKVB_SetTrackerParameter 3
FSDKVB_SetTrackerMultipleParameters 3
FSDKVB_GetTrackerParameter 4
FSDKVB_FeedFrame 6
FSDKVB_GetTrackerEyes 4
FSDKVB_GetTrackerFacialFeatures 4
FSDKVB_GetTrackerFacePosition 4
FSDKVB_LockID 2
FSDKVB_UnlockID 2
FSDKVB_GetName 4
FSDKVB_GetAllNames 4
FSDKVB_SetName 3
FSDKVB_GetIDReassignment 3
FSDKVB_GetSimilarIDCount 3
FSDKVB_GetSimilarIDList 4
FSDKVB_SaveTrackerMemoryToFile 2
FSDKVB_LoadTrackerMemoryFromFile 2
FSDKVB_GetTrackerMemoryBufferSize 2
FSDKVB_SaveTrackerMemoryToBuffer 3
FSDKVB_LoadTrackerMemoryFromBuffer 2
;Facial attributes
FSDKVB_GetTrackerFacialAttribute 6
FSDKVB_DetectFacialAttributeUsingFeatures 5
FSDKVB_GetValueConfidence 3
Code : Tout sélectionner
;Luxand_FSDK_Const.pb
Enumeration
;Error codes
#FSDKE_OK = 0
#FSDKE_FAILED = -1
#FSDKE_NOT_ACTIVATED = -2
#FSDKE_OUT_OF_MEMORY = -3
#FSDKE_INVALID_ARGUMENT = -4
#FSDKE_IO_ERROR = -5
#FSDKE_IMAGE_TOO_SMALL = -6
#FSDKE_FACE_NOT_FOUND = -7
#FSDKE_INSUFFICIENT_BUFFER_SIZE = -8
#FSDKE_UNSUPPORTED_IMAGE_EXTENSION = -9
#FSDKE_CANNOT_OPEN_FILE = -10
#FSDKE_CANNOT_CREATE_FILE = -11
#FSDKE_BAD_FILE_FORMAT = -12
#FSDKE_FILE_NOT_FOUND = -13
#FSDKE_CONNECTION_CLOSED = -14
#FSDKE_CONNECTION_FAILED = -15
#FSDKE_IP_INIT_FAILED = -16
#FSDKE_NEED_SERVER_ACTIVATION = -17
#FSDKE_ID_NOT_FOUND = -18
#FSDKE_ATTRIBUTE_NOT_DETECTED = -19
#FSDKE_INSUFFICIENT_TRACKER_MEMORY_LIMIT = -20
#FSDKE_UNKNOWN_ATTRIBUTE = -21
#FSDKE_UNSUPPORTED_FILE_VERSION = -22
#FSDKE_SYNTAX_ERROR = -23
#FSDKE_PARAMETER_NOT_FOUND = -24
#FSDKE_INVALID_TEMPLATE = -25
#FSDKE_UNSUPPORTED_TEMPLATE_VERSION = -26
;Facial feature count
#FSDK_FACIAL_FEATURE_COUNT = 66
;Facial features
#FSDKP_LEFT_EYE = 0
#FSDKP_RIGHT_EYE = 1
#FSDKP_LEFT_EYE_INNER_CORNER = 24
#FSDKP_LEFT_EYE_OUTER_CORNER = 23
#FSDKP_LEFT_EYE_LOWER_LINE1 = 38
#FSDKP_LEFT_EYE_LOWER_LINE2 = 27
#FSDKP_LEFT_EYE_LOWER_LINE3 = 37
#FSDKP_LEFT_EYE_UPPER_LINE1 = 35
#FSDKP_LEFT_EYE_UPPER_LINE2 = 28
#FSDKP_LEFT_EYE_UPPER_LINE3 = 36
#FSDKP_LEFT_EYE_LEFT_IRIS_CORNER = 29
#FSDKP_LEFT_EYE_RIGHT_IRIS_CORNER = 30
#FSDKP_RIGHT_EYE_INNER_CORNER = 25
#FSDKP_RIGHT_EYE_OUTER_CORNER = 26
#FSDKP_RIGHT_EYE_LOWER_LINE1 = 41
#FSDKP_RIGHT_EYE_LOWER_LINE2 = 31
#FSDKP_RIGHT_EYE_LOWER_LINE3 = 42
#FSDKP_RIGHT_EYE_UPPER_LINE1 = 40
#FSDKP_RIGHT_EYE_UPPER_LINE2 = 32
#FSDKP_RIGHT_EYE_UPPER_LINE3 = 39
#FSDKP_RIGHT_EYE_LEFT_IRIS_CORNER = 33
#FSDKP_RIGHT_EYE_RIGHT_IRIS_CORNER = 34
#FSDKP_LEFT_EYEBROW_INNER_CORNER = 13
#FSDKP_LEFT_EYEBROW_MIDDLE = 16
#FSDKP_LEFT_EYEBROW_MIDDLE_LEFT = 18
#FSDKP_LEFT_EYEBROW_MIDDLE_RIGHT = 19
#FSDKP_LEFT_EYEBROW_OUTER_CORNER = 12
#FSDKP_RIGHT_EYEBROW_INNER_CORNER = 14
#FSDKP_RIGHT_EYEBROW_MIDDLE = 17
#FSDKP_RIGHT_EYEBROW_MIDDLE_LEFT = 20
#FSDKP_RIGHT_EYEBROW_MIDDLE_RIGHT = 21
#FSDKP_RIGHT_EYEBROW_OUTER_CORNER = 15
#FSDKP_NOSE_TIP = 2
#FSDKP_NOSE_BOTTOM = 49
#FSDKP_NOSE_BRIDGE = 22
#FSDKP_NOSE_LEFT_WING = 43
#FSDKP_NOSE_LEFT_WING_OUTER = 45
#FSDKP_NOSE_LEFT_WING_LOWER = 47
#FSDKP_NOSE_RIGHT_WING = 44
#FSDKP_NOSE_RIGHT_WING_OUTER = 46
#FSDKP_NOSE_RIGHT_WING_LOWER = 48
#FSDKP_MOUTH_RIGHT_CORNER = 3
#FSDKP_MOUTH_LEFT_CORNER = 4
#FSDKP_MOUTH_TOP = 54
#FSDKP_MOUTH_TOP_INNER = 61
#FSDKP_MOUTH_BOTTOM = 55
#FSDKP_MOUTH_BOTTOM_INNER = 64
#FSDKP_MOUTH_LEFT_TOP = 56
#FSDKP_MOUTH_LEFT_TOP_INNER = 60
#FSDKP_MOUTH_RIGHT_TOP = 57
#FSDKP_MOUTH_RIGHT_TOP_INNER = 62
#FSDKP_MOUTH_LEFT_BOTTOM = 58
#FSDKP_MOUTH_LEFT_BOTTOM_INNER = 63
#FSDKP_MOUTH_RIGHT_BOTTOM = 59
#FSDKP_MOUTH_RIGHT_BOTTOM_INNER = 65
#FSDKP_NASOLABIAL_FOLD_LEFT_UPPER = 50
#FSDKP_NASOLABIAL_FOLD_LEFT_LOWER = 52
#FSDKP_NASOLABIAL_FOLD_RIGHT_UPPER = 51
#FSDKP_NASOLABIAL_FOLD_RIGHT_LOWER = 53
#FSDKP_CHIN_BOTTOM = 11
#FSDKP_CHIN_LEFT = 9
#FSDKP_CHIN_RIGHT = 10
#FSDKP_FACE_CONTOUR1 = 7
#FSDKP_FACE_CONTOUR2 = 5
#FSDKP_FACE_CONTOUR12 = 6
#FSDKP_FACE_CONTOUR13 = 8
EndEnumeration
Structure FSDK_IMAGEMODE
FSDK_IMAGE_GRAYSCALE_8BIT.l
FSDK_IMAGE_COLOR_24BIT.l
FSDK_IMAGE_COLOR_32BIT.l
EndStructure
Structure FSDK_VIDEOCOMPRESSIONTYPE
FSDK_MJPEG.l
EndStructure
Structure FSDK_STRING
c_str.b[1024]
EndStructure
Structure TPoint
X.l
Y.l
EndStructure
Structure TFacePosition
xc.l
yc.l
w.l
blank_var_for_padding.l
angle.d
EndStructure
Structure FSDK_VideoFormatInfo ;Webcam
Width.l
Height.l
BPP.l
EndStructure
Code : Tout sélectionner
IncludeFile "Luxand_FSDK_Const.pb"
UseJPEGImageDecoder()
Enumeration
#mainFrm
#img1
#btnFaceDetect
EndEnumeration
Global Img_mainFrm_0.l
Img_mainFrm_0 = LoadImage(#PB_Any,"photo.jpg")
Global ff.TFacePosition
Global FaceCoords.TFacePosition
Global Dim FacialFeatures.TPoint(#FSDK_FACIAL_FEATURE_COUNT - 1)
FSDKvb_ActivateLibrary_("VotreCodeEvaluation") ; Activation de l'évaluation sinon Error
;FSDK_ActivateLibrary_
FSDKvb_Initialize_() ; Initialisation
;FSDK_Initialize_
Procedure ErrorShow(nbr.l)
Select nbr
Case 0
Debug "#FSDKE_OK"
Case -1
Debug "#FSDKE_FAILED"
Case -2
Debug "#FSDKE_NOT_ACTIVATED"
Case -3
Debug "#FSDKE_OUT_OF_MEMORY"
Case -4
Debug "#FSDKE_INVALID_ARGUMENT"
Case -5
Debug "#FSDKE_IO_ERROR"
Case -6
Debug "#FSDKE_IMAGE_TOO_SMALL"
Case -7
Debug "#FSDKE_FACE_NOT_FOUND"
Case -8
Debug "#FSDKE_INSUFFICIENT_BUFFER_SIZE"
Case -9
Debug "#FSDKE_UNSUPPORTED_IMAGE_EXTENSION"
Case -10
Debug "#FSDKE_CANNOT_OPEN_FILE"
Case -11
Debug "#FSDKE_CANNOT_CREATE_FILE"
Case -12
Debug "#FSDKE_BAD_FILE_FORMAT"
Case -13
Debug "#FSDKE_FILE_NOT_FOUND"
Case -14
Debug "#FSDKE_CONNECTION_CLOSED"
Case -15
Debug "#FSDKE_CONNECTION_FAILED"
Case -16
Debug "#FSDKE_IP_INIT_FAILED"
Case -17
Debug "#FSDKE_NEED_SERVER_ACTIVATION"
Case -18
Debug "#FSDKE_ID_NOT_FOUND"
Case -19
Debug "#FSDKE_ATTRIBUTE_NOT_DETECTED"
Case -20
Debug "#FSDKE_INSUFFICIENT_TRACKER_MEMORY_LIMIT"
Case -21
Debug "#FSDKE_UNKNOWN_ATTRIBUTE"
Case -22
Debug "#FSDKE_UNSUPPORTED_FILE_VERSION"
Case -23
Debug "#FSDKE_SYNTAX_ERROR"
Case -24
Debug "#FSDKE_PARAMETER_NOT_FOUND"
Case -25
Debug "#FSDKE_INVALID_TEMPLATE"
Case -26
Debug "#FSDKE_UNSUPPORTED_TEMPLATE_VERSION"
EndSelect
EndProcedure
Procedure mainFrmOpen()
OpenWindow(#mainFrm, x, y, 525, 400, "Facial Features - PB", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_WindowCentered)
ImageGadget(#img1, 10, 10, 180, 180, 0)
ButtonGadget(#btnFaceDetect,250, 350, 90, 40, "FaceDetect")
SetGadgetState(#img1,ImageID(Img_mainFrm_0))
EndProcedure
Procedure test(x.l,y.l,w.l)
Protected i.l,FaceX.l,FaceY.l
Img_mainFrm_0 = LoadImage(#PB_Any,"photo.jpg")
StartDrawing(ImageOutput(Img_mainFrm_0))
DrawingMode(#PB_2DDrawing_Outlined )
For i = 0 To #FSDK_FACIAL_FEATURE_COUNT - 1
FaceX = FacialFeatures(i)\x
FaceY = FacialFeatures(i)\y
If i > 1
Circle(faceX,faceY,2,RGB(0,0,255))
Else
Circle(faceX,faceY,2,0)
EndIf
Next
StopDrawing()
SetGadgetState(#img1,ImageID(Img_mainFrm_0))
EndProcedure
Procedure mainFrmEvent()
Protected glEvent.l, glGadget.l, glType.l, glWindow.l
Protected Ret.l, GG.l
Repeat
glEvent = WaitWindowEvent()
glGadget = EventGadget()
glType = EventType()
glWindow = EventWindow()
If glwindow = mainFrm
If glEvent = #PB_Event_Gadget
Select glGadget
Case #btnFaceDetect
If glType = #PB_EventType_LeftClick
ret= FSDKvb_LoadImageFromFile_(Img_mainFrm_0, "photo.jpg")
;ret= FSDK_LoadImageFromFile_
ErrorShow(ret)
If ret <> #FSDKE_OK
MessageRequester("","Error loading file",#PB_MessageRequester_Ok)
Else
gg = ImageID(Img_mainFrm_0)
ret =FSDKvb_DetectFace_(gg,ff)
;ret =FSDK_DetectFace_(gg,ff)
ErrorShow(ret)
ret =FSDKVB_DetectFacialFeatures_(gg, FacialFeatures(0))
;ret =FSDK_DetectFacialFeatures_
ErrorShow(ret)
With ff
test(\xc,\yc.l,\w)
EndWith
FSDKvb_Finalize_()
EndIf
EndIf
EndSelect
EndIf
EndIf
Until glEvent = #PB_Event_CloseWindow
End
EndProcedure
mainFrmOpen()
mainFrmEvent()
Code : Tout sélectionner
;FSDK_ActivateLibrary_("Code Eval")
;FSDK_Initialize_()
;Fonctions SDK
;FSDK_Finalize_()
C'est une lib commerciale. Le coût est variable en fonction du projet que tu souhaites exécuter.Dobro a écrit :voir s'il s'agit d'une Lib Opensource , car Fred pourrai alors l’intégrer dans PureBasic
Code : Tout sélectionner
; Utilisation directe de faceSDK.dll
; Désactiver l'unicode pour la compilation
UseJPEGImageDecoder()
UseJPEGImageEncoder()
Enumeration
;{ State Code
#FSDKE_OK = 0
#FSDKE_FAILED = -1
#FSDKE_NOT_ACTIVATED = -2
#FSDKE_OUT_OF_MEMORY = -3
#FSDKE_INVALID_ARGUMENT = -4
#FSDKE_IO_ERROR = -5
#FSDKE_IMAGE_TOO_SMALL = -6
#FSDKE_FACE_NOT_FOUND = -7
#FSDKE_INSUFFICIENT_BUFFER_SIZE = -8
#FSDKE_UNSUPPORTED_IMAGE_EXTENSION = -9
#FSDKE_CANNOT_OPEN_FILE = -10
#FSDKE_CANNOT_CREATE_FILE = -11
#FSDKE_BAD_FILE_FORMAT = -12
#FSDKE_FILE_NOT_FOUND = -13
#FSDKE_CONNECTION_CLOSED = -14
#FSDKE_CONNECTION_FAILED = -15
#FSDKE_IP_INIT_FAILED = -16
#FSDKE_NEED_SERVER_ACTIVATION = -17
#FSDKE_ID_NOT_FOUND = -18
#FSDKE_ATTRIBUTE_NOT_DETECTED = -19
#FSDKE_INSUFFICIENT_TRACKER_MEMORY_LIMIT = -20
#FSDKE_UNKNOWN_ATTRIBUTE = -21
#FSDKE_UNSUPPORTED_FILE_VERSION = -22
#FSDKE_SYNTAX_ERROR = -23
#FSDKE_PARAMETER_NOT_FOUND = -24
#FSDKE_INVALID_TEMPLATE = -25
#FSDKE_UNSUPPORTED_TEMPLATE_VERSION = -26
;}
;{ Facial
#FSDK_FACIAL_FEATURE_COUNT = 66
#FSDKP_LEFT_EYE = 0
#FSDKP_RIGHT_EYE = 1
#FSDKP_LEFT_EYE_INNER_CORNER = 24
#FSDKP_LEFT_EYE_OUTER_CORNER = 23
#FSDKP_LEFT_EYE_LOWER_LINE1 = 38
#FSDKP_LEFT_EYE_LOWER_LINE2 = 27
#FSDKP_LEFT_EYE_LOWER_LINE3 = 37
#FSDKP_LEFT_EYE_UPPER_LINE1 = 35
#FSDKP_LEFT_EYE_UPPER_LINE2 = 28
#FSDKP_LEFT_EYE_UPPER_LINE3 = 36
#FSDKP_LEFT_EYE_LEFT_IRIS_CORNER = 29
#FSDKP_LEFT_EYE_RIGHT_IRIS_CORNER = 30
#FSDKP_RIGHT_EYE_INNER_CORNER = 25
#FSDKP_RIGHT_EYE_OUTER_CORNER = 26
#FSDKP_RIGHT_EYE_LOWER_LINE1 = 41
#FSDKP_RIGHT_EYE_LOWER_LINE2 = 31
#FSDKP_RIGHT_EYE_LOWER_LINE3 = 42
#FSDKP_RIGHT_EYE_UPPER_LINE1 = 40
#FSDKP_RIGHT_EYE_UPPER_LINE2 = 32
#FSDKP_RIGHT_EYE_UPPER_LINE3 = 39
#FSDKP_RIGHT_EYE_LEFT_IRIS_CORNER = 33
#FSDKP_RIGHT_EYE_RIGHT_IRIS_CORNER = 34
#FSDKP_LEFT_EYEBROW_INNER_CORNER = 13
#FSDKP_LEFT_EYEBROW_MIDDLE = 16
#FSDKP_LEFT_EYEBROW_MIDDLE_LEFT = 18
#FSDKP_LEFT_EYEBROW_MIDDLE_RIGHT = 19
#FSDKP_LEFT_EYEBROW_OUTER_CORNER = 12
#FSDKP_RIGHT_EYEBROW_INNER_CORNER = 14
#FSDKP_RIGHT_EYEBROW_MIDDLE = 17
#FSDKP_RIGHT_EYEBROW_MIDDLE_LEFT = 20
#FSDKP_RIGHT_EYEBROW_MIDDLE_RIGHT = 21
#FSDKP_RIGHT_EYEBROW_OUTER_CORNER = 15
#FSDKP_NOSE_TIP = 2
#FSDKP_NOSE_BOTTOM = 49
#FSDKP_NOSE_BRIDGE = 22
#FSDKP_NOSE_LEFT_WING = 43
#FSDKP_NOSE_LEFT_WING_OUTER = 45
#FSDKP_NOSE_LEFT_WING_LOWER = 47
#FSDKP_NOSE_RIGHT_WING = 44
#FSDKP_NOSE_RIGHT_WING_OUTER = 46
#FSDKP_NOSE_RIGHT_WING_LOWER = 48
#FSDKP_MOUTH_RIGHT_CORNER = 3
#FSDKP_MOUTH_LEFT_CORNER = 4
#FSDKP_MOUTH_TOP = 54
#FSDKP_MOUTH_TOP_INNER = 61
#FSDKP_MOUTH_BOTTOM = 55
#FSDKP_MOUTH_BOTTOM_INNER = 64
#FSDKP_MOUTH_LEFT_TOP = 56
#FSDKP_MOUTH_LEFT_TOP_INNER = 60
#FSDKP_MOUTH_RIGHT_TOP = 57
#FSDKP_MOUTH_RIGHT_TOP_INNER = 62
#FSDKP_MOUTH_LEFT_BOTTOM = 58
#FSDKP_MOUTH_LEFT_BOTTOM_INNER = 63
#FSDKP_MOUTH_RIGHT_BOTTOM = 59
#FSDKP_MOUTH_RIGHT_BOTTOM_INNER = 65
#FSDKP_NASOLABIAL_FOLD_LEFT_UPPER = 50
#FSDKP_NASOLABIAL_FOLD_LEFT_LOWER = 52
#FSDKP_NASOLABIAL_FOLD_RIGHT_UPPER = 51
#FSDKP_NASOLABIAL_FOLD_RIGHT_LOWER = 53
#FSDKP_CHIN_BOTTOM = 11
#FSDKP_CHIN_LEFT = 9
#FSDKP_CHIN_RIGHT = 10
#FSDKP_FACE_CONTOUR1 = 7
#FSDKP_FACE_CONTOUR2 = 5
#FSDKP_FACE_CONTOUR12 = 6
#FSDKP_FACE_CONTOUR13 = 8
;}
EndEnumeration
Structure TPoint
X.l
Y.l
EndStructure
Global Dim FacialFeatures.TPoint(#FSDK_FACIAL_FEATURE_COUNT - 1)
Global Dim FaceTemplate.l(14326)
Global left.l, top.l, right.l, bottom.l
Global img.l, pt.l
Structure TFacePosition
xc.l
yc.l
w.l
blank_var_for_padding.l
angle.d
EndStructure
Global FacePos.TFacePosition
Procedure ErrorShow(nbr.l)
Select nbr
Case 0
PrintN( "#FSDKE_OK")
Case -1
PrintN( "#FSDKE_FAILED")
Case -2
PrintN( "#FSDKE_NOT_ACTIVATED" )
Case -3
PrintN( "#FSDKE_OUT_OF_MEMORY")
Case -4
PrintN( "#FSDKE_INVALID_ARGUMENT")
Case -5
PrintN( "#FSDKE_IO_ERROR")
Case -6
PrintN( "#FSDKE_IMAGE_TOO_SMALL")
Case -7
PrintN( "#FSDKE_FACE_NOT_FOUND")
Case -8
PrintN( "#FSDKE_INSUFFICIENT_BUFFER_SIZE")
Case -9
PrintN( "#FSDKE_UNSUPPORTED_IMAGE_EXTENSION")
Case -10
PrintN( "#FSDKE_CANNOT_OPEN_FILE")
Case -11
PrintN( "#FSDKE_CANNOT_CREATE_FILE")
Case -12
PrintN( "#FSDKE_BAD_FILE_FORMAT")
Case -13
PrintN( "#FSDKE_FILE_NOT_FOUND")
Case -14
PrintN( "#FSDKE_CONNECTION_CLOSED")
Case -15
PrintN( "#FSDKE_CONNECTION_FAILED")
Case -16
PrintN( "#FSDKE_IP_INIT_FAILED")
Case -17
PrintN( "#FSDKE_NEED_SERVER_ACTIVATION")
Case -18
PrintN( "#FSDKE_ID_NOT_FOUND")
Case -19
PrintN( "#FSDKE_ATTRIBUTE_NOT_DETECTED")
Case -20
PrintN( "#FSDKE_INSUFFICIENT_TRACKER_MEMORY_LIMIT")
Case -21
PrintN( "#FSDKE_UNKNOWN_ATTRIBUTE")
Case -22
PrintN( "#FSDKE_UNSUPPORTED_FILE_VERSION")
Case -23
PrintN( "#FSDKE_SYNTAX_ERROR")
Case -24
PrintN( "#FSDKE_PARAMETER_NOT_FOUND")
Case -25
PrintN( "#FSDKE_INVALID_TEMPLATE")
Case -26
PrintN( "#FSDKE_UNSUPPORTED_TEMPLATE_VERSION")
EndSelect
EndProcedure
;{ Proto
PrototypeC.i apiActivation(License.s)
PrototypeC.i apiInitialize()
PrototypeC.i apiFinalize()
PrototypeC.i apiLoadImageFromFile(pt.l,Pic.p-ascii)
PrototypeC.i apiSetNumThreads(nbr.i)
PrototypeC.i apiSetFaceDetectionThreshold(nb.l)
PrototypeC.i apiSetFaceDetectionParameters(n1.l,n2.l,n3.l)
PrototypeC.i apiDetectFace(ImgPt.l, FaceStrucPt.l)
PrototypeC.i apiDetectFacialFeatures(ImgPt.l,Features.l)
PrototypeC.i apiDetectFacialFeaturesInRegion(ImgPt.l,FacePos.l,Features.l)
;PrototypeC.i apiGetFaceTemplateUsingFeatures(ImgPt.l,Features.l, FaceTemplace.l) FaceTemplate ne passe pas
;}
Define License.s, MaPhoto.s
Define Ret.l,RetLib.l
OpenConsole()
ConsoleTitle("")
EnableGraphicalConsole(1)
ConsoleLocate(0,0)
ConsoleCursor(0)
RetLib = OpenLibrary(#PB_Any,"facesdk.dll")
If RetLib > 0
;*********************************************************************************************
; Activation du sdk, sinon ca ne marche pas :-)
License = "vkIBi3SM4fZRjqI1CoC1y28Sfs1fyWqU6/sgRw03DMe577rtAMy8GZ0FDKKYeThSN84uOEdW7X5OoKXTE7+QmrFc0w3AbTFQR9i9BgsBxWhHJ8hS5W/JtxmRT5Qp7ag0z64+1S6mXcbA2sydphIz/gbXjEXS05ABFaGsrC7DATI="
Activation.apiActivation = GetFunction(RetLib,"FSDK_ActivateLibrary")
ret = activation(license)
ErrorShow(ret)
;*********************************************************************************************
; Initialisation
Initialize.apiInitialize = GetFunction(RetLib,"FSDK_Initialize")
ret=Initialize()
ErrorShow(ret)
;*********************************************************************************************
; Nombre de threads
SetNumthreads.apiSetNumThreads = GetFunction(RetLib,"FSDK_SetNumThreads")
Ret=SetNumthreads(2)
ErrorShow(ret)
;*********************************************************************************************
; Chargement de la photo via Fichier JPG
MaPhoto = "c:\PhotoDeSylvester.jpg" ; Une photo... avec 1 visage, 1 !
LoadImageFromFile.apiLoadImageFromFile= GetFunction(RetLib,"FSDK_LoadImageFromFile")
Ret = LoadImageFromFile(@pt,MaPhoto)
ErrorShow(ret)
;*********************************************************************************************
;Sets a threshold value For face detection. The Default value is 5. The lowest possible value is 1
;The function allows adjusting the sensitivity of the detection. If the threshold value is set To a higher value,
;the detector will only recognize faces With sharp, clearly defined details, thus reducing the number of false positive detections.
;Setting the threshold lower allows detecting more faces With less clearly defined features at the expense of increased number
;of false positives.
SetFaceDetectionThreshold.apiSetFaceDetectionThreshold= GetFunction(RetLib,"FSDK_SetFaceDetectionThreshold")
Ret = SetFaceDetectionThreshold(4)
ErrorShow(ret)
;*********************************************************************************************
;Param1 = TRUE : extended in-plane rotation support is enabled at the cost of detection speed (3 times performance hit).
; FALSE : Default fast detection -15..15 degrees.
;Param2 = TRUE : detects in-plane rotation angle when detecting faces. The angle is recorded into the Angle field of the TFacePosition Structure
; FALSE : disables the detection of rotation angle.
;Param3 = Controls the detection speed by setting the size of the image the detection functions will work with.
; Choose higher value To increase detection quality, Or lower value To improve the performance.
; Note: By Default, all images are internally resized To the width of 384 pixels
SetFaceDetectionParameters.apiSetFaceDetectionParameters= GetFunction(RetLib,"FSDK_SetFaceDetectionParameters")
Ret = SetFaceDetectionParameters(1,1,400)
ErrorShow(ret)
;*********************************************************************************************
; Détection d'1 visage , si + voir la fonction FSDK_DetectMultipleFaces : marche bien aussi
DetectFace.apiDetectFace= GetFunction(RetLib,"FSDK_DetectFace")
Ret = DetectFace(pt, FacePos)
ErrorShow(ret)
Select ret
Case #FSDKE_OK ; Si visage découvert...
; Récupération des traits caractéristiques (66 points !) en fonction de la zone du visage (plus rapide que la photo entière)
; Plus fiable que la position des yeux
DetectFacialFeaturesInRegion.apiDetectFacialFeaturesInRegion= GetFunction(RetLib,"FSDK_DetectFacialFeaturesInRegion")
RET =DetectFacialFeaturesInRegion(pt, @FacePos,@FacialFeatures())
ErrorShow(ret)
;*********************************************************************************************
;Création du template du visage pour un FaceMatching
;Je n'arrive pas à passer le template via le proto ( FSDK_GetFaceTemplateUsingFeatures 3 )
ret = FSDK_GetFaceTemplateUsingFeatures_(pt,@FacialFeatures(),@FaceTemplate())
ErrorShow(ret)
EndSelect
Finalize.apiFinalize = GetFunction(RetLib,"FSDK_Finalize")
Ret=Finalize()
ErrorShow(ret)
CloseLibrary(RetLib)
Else
MessageRequester("Erreur","erreur d'ouverture de la lib",#PB_MessageRequester_Ok)
End
EndIf
;***********************************************************************
img = LoadImage(#PB_Any,MaPhoto)
OpenWindow(1, 10, 10, 780, 610, "", #PB_Window_SystemMenu)
StartDrawing(ImageOutput(img))
DrawingMode(#PB_2DDrawing_Outlined )
;******** Carré du visage *********************************************
; Coordonnées du visage
With FacePos
left = \xc - Round(\w*0.6,#PB_Round_Down)
top = \yc - Round(\w*0.5,#PB_Round_Down)
right = \xc + Round(\w*0.6,#PB_Round_Down)
bottom = \yc + Round(\w*0.7,#PB_Round_Down)
EndWith
Box(left,top,right-left,bottom-top,RGB(0,0,255))
;******** Cercles Caractéristiques du visage *****************************
Define i.l,FaceX.l,FaceY.l
For i = 0 To #FSDK_FACIAL_FEATURE_COUNT - 1
FaceX = FacialFeatures(i)\x
FaceY = FacialFeatures(i)\y
If i > 1
Circle(faceX,faceY,2,RGB(0,0,255))
; Else
Circle(faceX,faceY,2,RGB(0,0,255))
EndIf
Next
;************************************************************************
StopDrawing()
ImageGadget(2, 110, 20, 510, 500, ImageID(img))
;**************************************************************************
Define glEvent.l, glGadget.l, glType.l, glWindow.l
Repeat
glEvent = WaitWindowEvent()
glGadget = EventGadget()
glType = EventType()
glWindow = EventWindow()
If glwindow = frm
If glEvent = #PB_Event_Gadget
Select glGadget
EndSelect
EndIf
EndIf
Until glEvent = #PB_Event_CloseWindow
CloseConsole()
End