IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

[Android][CameraComponent] Comment obtenir une image nette par Autofocus ou autre?


Sujet :

Composants FMX Delphi

  1. #1
    Membre extrêmement actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    1 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 1 789
    Points : 5 751
    Points
    5 751
    Par défaut [Android][CameraComponent] Comment obtenir une image nette par Autofocus ou autre?
    Bonjour à tous,

    Contexte: Développement d'une app Android avec FMX nécessitant la prise en photo à l'aide d'un smartphone d'une étiquette pour ensuite pouvoir extraire des données de l'image.

    Mon problème: J'utilise le composant CameraComponent et c'est une galère pour obtenir une image qui ne ressemble pas à un flou artistique. Gros problème avec le focusing.


    1. Comme nous a habitué Embarcadero, on a droit à une documentation indigente. Merci encore à Embarcadero pour l'aide indiquant des "Embarcadero Technologies ne possède pas d'informations supplémentaires pour le moment. Veuillez nous aider à documenter cette rubrique en utilisant la page Discussion!"


    2. Avec un "CameraComponent1.FocusMode := FMX.Media.TFocusMode.AutoFocus", l'image est flou en permanence.

    3. Avec un "CameraComponent1.FocusMode := FMX.Media.TFocusMode.ContinuousAutoFocus", l'image est nette de temps à autre et le reste du temps, l'image retournée pas la camera montre un focusing qui cherche mais... qui ne trouve pas le bon réglage.

    4. Il ne semble pas y avoir de mode Macro (qui permettrait d'indiquer au FocusMode que l'on se limite à du gros plan).


    Est-ce que qqn a déjà été confronté au problème? Quelle serait la meilleure approche pour résoudre ce problème? Créer un mode Macro? Créer un focus manuel en indiquant une zone limitée de l'image qui doit être "focusée"?

    Toute idée et avis sont les bienvenus...

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Alors je n'ai pas la réponse ni testé, mais bien souvent il faut commencer par regarder ce que ça donne pour Android Studio

    ça ne semble pas simple même hors FMX
    https://stackoverflow.com/questions/...-automatically

    ensuite, il faut regarder comment Embarcadero a caché cela dans FMX...c'est l'inconvénient du multiplatefome, on ne regarde pas l'API du système mais une surcouche supposée engloger tout les environnements.

    De ce que je comprend sur stackoverflow, et comme souvent sous Android, ça doit bcp dépendre de la version de Android, du fabriquant et du soin qu'il a apporté à la prise de photo...mais je crois comprendre qu'il faut utiliser le mode FOCUS_MODE_CONTINUOUS_VIDEO

    et dans FMX.Media.Android.pas on découvre que le mode n'est pas géré en écriture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    function TAndroidVideoCaptureDevice.GetFocusMode: TFocusMode;
    var
      Params: JCamera_Parameters;
      FocusMode: JString;
      FocusModeText: string;
    begin
      Params := Camera.getParameters;
      if Params = nil then
        Exit(inherited);
     
      FocusMode := Params.getFocusMode;
      if FocusMode = nil then
        Exit(inherited);
     
      FocusModeText := JStringToString(FocusMode);
     
      if SameText(FocusModeText, JStringToString(TJCamera_Parameters.JavaClass.FOCUS_MODE_AUTO)) then
        Result := TFocusMode.AutoFocus
      else if SameText(FocusModeText, JStringToString(TJCamera_Parameters.JavaClass.FOCUS_MODE_CONTINUOUS_VIDEO)) then
        Result := TFocusMode.ContinuousAutoFocus
      else if SameText(FocusModeText, JStringToString(TJCamera_Parameters.JavaClass.FOCUS_MODE_CONTINUOUS_PICTURE)) then
        Result := TFocusMode.ContinuousAutoFocus
      else
        Result := TFocusMode.Locked;
    end;
     
    procedure TAndroidVideoCaptureDevice.SetFocusMode(const Value: TFocusMode);
     
      function FocusModeToNativeFocusMode(const AValue: TFocusMode): JString;
      begin
        case AValue of
          TFocusMode.AutoFocus:
            Result := TJCamera_Parameters.JavaClass.FOCUS_MODE_AUTO;
     
          TFocusMode.ContinuousAutoFocus:
            Result := TJCamera_Parameters.JavaClass.FOCUS_MODE_CONTINUOUS_PICTURE;
     
          TFocusMode.Locked:
            Result := TJCamera_Parameters.JavaClass.FOCUS_MODE_FIXED;
        else
          Result := TJCamera_Parameters.JavaClass.FOCUS_MODE_CONTINUOUS_PICTURE;
        end;
      end;
     
    var
      Params: JCamera_Parameters;
    begin
      Params := Camera.getParameters;
      if Params = nil then
        Exit;
     
      Params.setFocusMode(FocusModeToNativeFocusMode(Value));
      Camera.setParameters(Params);
     
      try
        if Value = TFocusMode.AutoFocus then
          Camera.autoFocus(nil)
        else
          Camera.cancelAutoFocus;
      except on E: EJNIException do
        Log.d(SMediaCannotUseAutofocus, [E.ToString]);
      end;
    end;
    et la mauvaise nouvelle c'est que cette classe est cachée dans la partie implémentation de l'unité :/

    reste plus qu'à ouvrir un ticket sur https://quality.embarcadero.com/ pour ajouter un mode VideoContinuousAutoFocus à TFocusMode

    en vrai il faudrait commencer par copier/coller le code et d'y ajouter le mode en question pour s'assurer que ça corrige le problème.

    Note aussi que quand on regarde l'aide en ligne Google
    https://developer.android.com/refere...era.Parameters

    outre le fait qu'on apprend qu'il faut passer à une nouvelle API, rien n'indique que ce paramètre soit le bon...il est question de focus Video (comme le nom le suggère) ce qui n'est pas ce que tu cherches.

    Bref, ça ne t'avance pas bcp, mais ça montre que la réponse n'est pas simple.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. [Débutant] comment segmente une image colore par fusion
    Par MAHDHICHAWKI dans le forum Images
    Réponses: 0
    Dernier message: 17/03/2015, 12h48
  2. Réponses: 1
    Dernier message: 18/04/2007, 20h34
  3. Comment obtenir une image resultante des 3 bandes
    Par zaiim dans le forum Images
    Réponses: 4
    Dernier message: 17/04/2007, 19h49
  4. [GD] comment afficher une image genérée par GD
    Par lochou dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 25/10/2006, 22h03
  5. [MySQL] Comment afficher une image par défaut ?
    Par clicman dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 12/10/2005, 08h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo