web-dev-qa-db-fra.com

comment obtenir la distance d'objet de la caméra iPhone en utilisant les métadonnées Exif d'image?


Édition : Désolé pour l'édition tardive, sans deux paramètres, vous ne pouvez pas le calculer, il faut donc d'abord remplir la hauteur de la caméra de l'utilisateur à partir du sol.


J'ai vérifié un certain nombre de solutions mais aucune d'elles n'est utile!

Je sais que la distance de travail = (Hauteur du capteur + Hauteur du sujet) * Longueur focale/Hauteur du capteur

et

distance to object (mm) = focal length (mm) * real height of the object (mm) * image height (pixels)
                          ----------------------------------------------------------------
                                object height (pixels) * sensor height (mm)

Et je veux m'éloigner de ceci:

Formation d'image par les lentilles et l'oeil

Bonjour, je reçois les informations suivantes en utilisant l'image Exif ALAssetsLibrary

Et j'ai obtenu les métadonnées suivantes:

Save image metadata.
 {
    DPIHeight = 72;
    DPIWidth = 72;
    FaceRegions =     {
        Regions =         {
            HeightAppliedTo = 2448;
            RegionList =             (
                                {
                    AngleInfoRoll = 270;
                    AngleInfoYaw = 0;
                    ConfidenceLevel = 376;
                    FaceID = 1;
                    Height = "0.1413399";
                    Timestamp = 5996166864910;
                    Type = Face;
                    Width = "0.1060049";
                    X = "0.3560049";
                    Y = "0.4746732";
                }
            );
            WidthAppliedTo = 3264;
        };
    };
    Orientation = 6;
    "{Exif}" =     {
        ApertureValue = "2.526068811667587";
        BrightnessValue = "1.291629806962232";
        ColorSpace = 1;
        DateTimeDigitized = "2014:03:25 15:43:36";
        DateTimeOriginal = "2014:03:25 15:43:36";
        ExposureMode = 0;
        ExposureProgram = 2;
        ExposureTime = "0.05";
        FNumber = "2.4";
        Flash = 24;
        FocalLenIn35mmFilm = 33;
        FocalLength = "4.12";
        ISOSpeedRatings =         (
            160
        );
        LensMake = Apple;
        LensModel = "iPhone 5 back camera 4.12mm f/2.4";
        LensSpecification =         (
            "4.12",
            "4.12",
            "2.4",
            "2.4"
        );
        MeteringMode = 5;
        PixelXDimension = 3264;
        PixelYDimension = 2448;
        SceneType = 1;
        SensingMethod = 2;
        ShutterSpeedValue = "4.321956949076723";
        SubjectArea =         (
            1631,
            1223,
            1795,
            1077
        );
        SubsecTimeDigitized = 261;
        SubsecTimeOriginal = 261;
        UserComment = hoge;
        WhiteBalance = 0;
    };
    "{GPS}" =     {
        Altitude = "196.008";
        AltitudeRef = 0;
        DateStamp = "2014:03:25";
        Latitude = "28.61772";
        LatitudeRef = N;
        Longitude = "77.38891";
        LongitudeRef = E;
        TimeStamp = "10:13:37.439000";
    };
    "{MakerApple}" =     {
        1 = 0;
        3 =         {
            Epoch = 0;
            flags = 1;
            timescale = 1000000000;
            value = 249840592070541;
        };
        4 = 0;
        5 = 179;
        6 = 139;
        7 = 1;
    };
    "{TIFF}" =     {
        DateTime = "2014:03:25 15:43:36";
        Make = Apple;
        Model = "iPhone 5";
        Software = "7.0.6";
        XResolution = 72;
        YResolution = 72;
    };
}

J'ai besoin de calculer la distance entre l'objet et la caméra, en utilisant les détails ci-dessus; en utilisant iphone4s, iphone5 ou iphone5s. C'est possible?

enter image description here

Formule Besoin de savoir modifiée utilisée par cette application pour toute idée:

Besoin de connaître n'importe quelle méthode

http://www.youtube.com/watch?v=eCStIagorx8

comment cette appli fonctionne ??? Toute l'aide est la bienvenue

37
9to5ios

@iphonemaclover. Comme beaucoup de gens l'ont souligné, les informations sont insuffisantes pour calculer cela uniquement en utilisant la trigonométrie. Cependant, selon la précision dont vous avez besoin, ou ce que vous essayez de mesurer et d'autres données que vous pouvez vous attendre à récupérer à partir d'un iPhone et/ou si vous êtes prêt à faire des hypothèses, il est possible de faire certaines incursions.

a) +1 à Martin R, si vous supposez une terre plate, une hauteur de téléphone (qui, selon l'application que vous avez citée), un utilisateur pourrait mettre à jour à des fins d'étalonnage, peut récupérer des informations de hauteur et savoir où se trouve un point au sol à la base de votre objet est alors c'est simple trig. Une fois qu'il existe une estimation de la distance et en supposant que la chose que vous mesurez est proche de la verticale (ou se trouve à un angle connu), sa hauteur peut également être calculée.

b) Votre fichier exif contient des informations sur la région du visage. Si vous êtes intéressé par les gens et que vous êtes heureux de supposer qu'ils sont adultes, vous pouvez utiliser une hypothèse de taille moyenne pour estimer la distance en utilisant la méthode que vous avez déjà décrite.

c) Si vous pouvez récupérer une série d'images et de positions de caméra et que les positions de caméra/objet varient, je pense que les informations 3D peuvent être récupérées en utilisant la géométrie projective.

14
StuReeks

Si vous vous demandez comment trouver la distance compte tenu de la hauteur du téléphone/tablette et incliner vers le haut/vers le bas, utilisez simplement l'atan de l'angle vers le bas (0 s'il est pointé vers l'avant; -30 s'il est -30 degrés vers le bas) fois la hauteur Le seul problème est que nous ne connaissons pas la hauteur du téléphone au-dessus du sol.

Je sais que vous souhaitez utiliser la mise au point de l'appareil photo, mais c'est improbable. Vous avez mentionné une application Android Android, alors que si vous remarquez que cette application vous oblige à saisir la hauteur du téléphone par rapport au sol. Vous pouvez essayer d'utiliser l'altitude GPS moins ce que dit une carte topographique, mais c'est incroyablement inexact. Ou peut-être pourriez-vous prendre une photo à partir d'un emplacement, puis vous déplacer autour de la cible de 45 degrés environ, mais tout le monde n'a pas de boussole pour mesurer cela ou a la possibilité de faire des cercles autour de la cible. Comment vous déplaceriez-vous à 45 degrés autour d'un objet devant vous en vous tenant sur un pont? Même si vous avez essayé d'utiliser la mise au point de la caméra, celle-ci est automatiquement mise à jour et je ne sais rien sur l'utilisation d'une variable pour trouver la mise au point de la caméra. https: // developer.Apple.com/library/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html montre comment définir le mode de mise au point, mais je ne trouve rien sur la définition d'une mise au point personnalisée ou l'affichage de ce que l'appareil photo Si vous voulez prendre une photo et faire une sorte d'analyse pixel par pixel personnalisée pour voir h ow il est concentré, allez-y certainement. Peut-être qu'un iPhone brisé en prison peut accéder à la mise au point de la caméra, mais je suppose que votre public cible est plus que le groupe restreint qui a traversé le processus de bris de prison.

Je pense que le moyen le plus simple de trouver la hauteur est de leur faire pointer leur téléphone vers leur pied. Ensuite, vous pouvez leur demander la taille et la marque de la chaussure pour estimer la largeur de leur chaussure, ou simplement faire une supposition à plat. Demandez-leur simplement de pointer du côté de leur chaussure, peut-être en affichant un point rouge au milieu de l'écran pour qu'ils sachent exactement où ils pointent. Ensuite, demandez-leur de pointer vers l'autre, puis, une fois que vous avez capturé les deux bords de leur chaussure, utilisez la largeur estimée en pouces de leur chaussure multipliée par le bronzage de la différence d'angle d'un bord à l'autre (donc si c'est 170 degrés lorsqu'il est pointé sur un bord et 190 lorsque de l'autre, utilisez le bronzage de 20). Cela devrait vous donner la hauteur en pouces du sol.

    s = shoe width;
    ao = angle when pointed at left shoe Edge (y-axis)(radians);
    at = angle when pointed at right shoe Edge (y-axis)(radians);
    a = angle of device when pointed at the point on the ground (x-axis)(radians);
    d = distance;
    d = atan(a) * tan(at - ao) * s;
9
colorado777

Ce n'est pas possible d'obtenir la distance en variant distance sol-mobile dynamiquement de chaque personne. L'utilisateur doit définir manuellement la hauteur du mobile à chaque fois pour calculer.

5
Rajesh Loganathan

Je sais que c'est une vieille question, mais quelque chose m'a fait réfléchir à savoir s'il était possible d'utiliser le capteur de mise au point d'un iPhone pour mesurer la distance à un objet, et cela est ressorti de mes recherches.

Je pense que dans la question initiale de @ iphonemaclover, la "hauteur du capteur" ne fait pas référence à la hauteur de l'appareil photo au-dessus du sol, mais à la hauteur physique du capteur de l'appareil photo à l'intérieur du téléphone. Après tout, si vous aviez le téléphone sur un bras rotatif pivotant autour du sujet, la distance au sujet pourrait rester constante tandis que la position verticale du téléphone changerait. Ce sont la taille du capteur et la distance focale qui déterminent ce qu'il y a dans son cadre.

Dans cet esprit, j'ai fait quelques expériences rapides avec mon téléphone qui semblaient le confirmer (cependant, je dois admettre que je n'ai pas effectué de mesures réelles au-delà des estimations du globe oculaire et d'une règle de bureau.)

J'utilisais un iPhone 5, et avec un peu de recherche sur Google, nous pouvons apprendre quelques informations clés sur son capteur de caméra:

  • résolution en pixels: 3264 x 2448
  • distance focale: 4,10 mm
  • taille du capteur: 4,54 x 3,42 mm

Donc: la première formule ci-dessus pour "Distance de travail" peut nous indiquer la distance à laquelle un sujet d'une taille donnée remplira le cadre du capteur. Avec l'appareil photo en orientation paysage et un sujet de 2 m de haut (2000 mm), nous obtenons:

(3.42 + 2000) * 4.10
--------------------  =  2401.76mm, or about 2.4m
        3.42

Donc, si vous vous tenez à environ 2,4 m d'une personne de 2 m de haut, elle doit remplir le cadre en orientation paysage. Pour le portrait, vous devrez vous éloigner d'environ 1,8 m.

C'est très bien et merveilleux pour remplir le cadre. Mais nous voulons calculer des distances arbitraires, en voyant combien de trame notre sujet occupe. C'est à cela que sert la deuxième formule. Utilisons à nouveau notre sujet de 2 m de haut et connectons les numéros. Pour cette expérience, disons que nous avons examiné notre image et que le sujet de la photo occupe 1800 pixels verticalement. En branchant la deuxième formule de distance, nous obtenons:

4.10 * 2000 * 2448
------------------  =  3260.82mm, or ~ 3.26m
    1800 * 3.42

Et si le sujet occupait les mêmes 1800 pixels verticaux en mode portrait, alors on pourrait deviner que le photographe était à environ 3,28 m.

Tout cela suppose que les formules données ci-dessus sont correctes. Et encore une fois, je n'ai fait que des tentatives rudimentaires pour vérifier les mesures "plein cadre" (une fois avec un sujet d'environ 28 cm de haut, puis avec un sujet d'environ 1,7 m de haut). Mais mes estimations du globe oculaire semblaient raisonnablement proches de ce que la formule prédit.

3
Dougal Campbell