Reconnaissance faciale

Sujets variés concernant le développement en PureBasic
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Reconnaissance faciale

Message par CaptainCrunch »

Hello :)

Dans ce topic, je posterai progressivement des exemples, sur l'utilisation du SDK de Luxand

https://www.luxand.com/facesdk/
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: Reconnaissance faciale

Message par CaptainCrunch »

Luxand FaceSDK 5.0 (125 MB) :
https://www.luxand.com/download/Luxand_ ... _Setup.exe

Code Evaluation :
https://www.luxand.com/facesdk/requestkey/

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



Dernière modification par CaptainCrunch le dim. 03/août/2014 1:43, modifié 3 fois.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Reconnaissance faciale

Message par poshu »

Très, très cool ça. Je testerai dès que j'aurai l'occasion de passer sous Windows :3
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: Reconnaissance faciale

Message par CaptainCrunch »

Dernière modification par CaptainCrunch le dim. 03/août/2014 1:41, modifié 3 fois.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Reconnaissance faciale

Message par falsam »

Précise que ton download fait 610 Mo :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: Reconnaissance faciale

Message par CaptainCrunch »

En fonction du langage de programmation, la dll ou l'appel est différent :

Delphi : passe directement par FaceSDK.dll

.NET : FaceSDK.NET.dll

VB : passe par FaceSDK-vb.dll puis FaceSDK.dll -> l'Horreur

J'ai testé directement depuis FaceSDK.dll

Je rencontre qq pbs avec les fonctions...

Essayé avec FaceSDK-vb.dll, alors la ca marche, mais c'est leeeeeeeeeeeeent ahhahaah vb powa lol

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()

Capture d'écran :
http://hpics.li/e5e204c

Règles a respecter :

Code : Tout sélectionner


;FSDK_ActivateLibrary_("Code Eval")
;FSDK_Initialize_()

;Fonctions SDK

;FSDK_Finalize_()

CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: Reconnaissance faciale

Message par CaptainCrunch »

Bon ca avance

Je passe directement par FaceSDK.dll maintenant c'est quand meme plus rapide :)
Fred
Site Admin
Messages : 2648
Inscription : mer. 21/janv./2004 11:03

Re: Reconnaissance faciale

Message par Fred »

Excellent :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Reconnaissance faciale

Message par Backup »

j'ai pas encore testé , mais ....

j'ai deja vu le Cas pour la synthèse Vocal ,Reconnaissance vocal

il faut installer un contexte pour la mise en oeuvre ...
(installation du moteur de synthese vocal , des Voix pour la synthese..etc... )

ce qui signifie qu'on ne peux pas coder un programme, car la plupart des gens n'ont pas ce contexte d'installé ...
donc mettre par exemple de la synthèse vocal dans un prg n'a pas de fondement, puisque au final, quasi personne ne peux en profiter
(a part les Anglais qui disposent par defaut d'une synthese vocal installé a leur langue )


je me demandais si pour la reconnaissance facial, c'etait pareil ... ?

si je code un prg qui utilise cette Dll , si je fourni cette dll avec mon code, ça suffira ? (et qu'en est t'il des droits de diffusion )
ou bien faut t'il en plus installer un contexte particulier en plus de cette Dll ? ( installation d'un moteur particulier dans le Systeme )



parce que je trouve tres frustrant d'avoir des possibilités de la sorte , et d’être finalement empêché de les utiliser
parce que tout le monde n'aura pas installé ce contexte sur son ordinateur ...

je veux dire , on peut coder un programme utilisant une imprimante, un Scanner (Twain) , quelque soit le Driver installé , ça va marcher
car windows est prévu pour , éventuellement un Driver ou une Dll point barre, a la base , donc tout le monde a chez lui le contexte qui permet l'emploi de fonctions d'impression

mais pour la reconnaissance Facial .... ?
si c'est aussi galère que pour la synthèse, (installation d'un moteur (Sapi4 ou 5) + une voix ) , ....ç'est bien dommage :)
beaucoup de gens n'aiment ou ne savent pas comment installer un contexte avant utilisation d'un prg ..


le reve aurai été que nos systèmes d'exploitation soient fournis avec tout les moteurs
qu'il n'y ait que des dll a fournir, et ça roule :)
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: Reconnaissance faciale

Message par CaptainCrunch »

lu dobro

The following files may be redistributed with your application:

Windows
bin\win32\facesdk.dll (for 32-bit systems)
bin\win64\facesdk.dll (for 64-bit systems)
bin\win32\facesdk.NET.dll (for 32-bit .NET applications)
bin\win64\facesdk.NET.dll (for 64-bit .NET applications)
bin\win32\FaceSDK-VB.dll (for Visual Basic 6.0 applications)

Linux
bin\linux_x86\libfsdk.so (for 32-bit systems)
bin\linux_x86_64\libfsdk.so (for 64-bit systems)

Mac OS X
bin\osx_x86_64\libfsdk.dylib (for 64-bit systems)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Reconnaissance faciale

Message par Backup »

ha .. bah effectivement, s'il n'y a que une ou deux lib a fournir :D

du coup , ton travail est tres tres interressant :mrgreen: :)

voir s'il s'agit d'une Lib Opensource , car Fred pourrai alors l’intégrer dans PureBasic :D
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Reconnaissance faciale

Message par falsam »

Dobro a écrit :voir s'il s'agit d'une Lib Opensource , car Fred pourrai alors l’intégrer dans PureBasic :D
C'est une lib commerciale. Le coût est variable en fonction du projet que tu souhaites exécuter.

la FAQ (Question 2) sur ce lien https://www.luxand.com/facesdk/faq.php


@CaptainCrunch : Aprés avoir demander une clé d'évaluation que j'ai reçu en quelques secondes, j'ai voulu tester ton code mais il manque les déclarations de l'api correspondant aux dll de luxand. Exemple: FSDKvb_ActivateLibrary_()
Dernière modification par falsam le dim. 03/août/2014 11:26, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Fred
Site Admin
Messages : 2648
Inscription : mer. 21/janv./2004 11:03

Re: Reconnaissance faciale

Message par Fred »

Peut etre que OpenCV propose ce genre de chose en open source
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Reconnaissance faciale

Message par Backup »

Probablement, je viens de tester les exemples de JHPJHP
http://forums.purebasic.com/english/vie ... bc14fec234

et deja on peut diriger une balle, ou détourer le Visage avec un Cercle 2D , la detection de mouvement est parfaite .. etc ... :)

pas mal ce OpenCV , et impressionnant :)
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: Reconnaissance faciale

Message par CaptainCrunch »

@falsam :

Réponse tardive... j'avais pas vu

Bonjour falsam, il te manque quoi ? les déclarations ?

Je passe directement par facesdk.dll maintenant c'est plus rapide, et j'utilise les prototypes.

@Dobro :

Effectivement, il existe un OpenCv : http://docs.opencv.org/trunk/modules/co ... c_api.html

Exemple :

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

Capture d'écran :

http://hpics.li/00a114b

Exemple avec FSDK_DetectMultipleFaces :

http://hpics.li/fcad455

FaceSDK n'est pas parfait, mais il est léger... Je regarde les SDK de NeuroTechnologie

c'est du lourd :-)

http://www.neurotechnology.com
Répondre