Spécifications des métadonnées de mouvement de l'appareil photo

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">

Cette page décrit une spécification qui permet aux fichiers MP4 d'être intégrés des métadonnées sur le mouvement de la caméra pendant l'enregistrement vidéo. Les appareils qui enregistrent des vidéos ont généralement qui peuvent fournir des informations supplémentaires sur la capture. Exemple :

  • Les téléphones mobiles sont généralement équipés de capteurs pour gyroscope, accéléromètre, magnétomètre et GPS.
  • La fusion des capteurs peut être utilisée pour suivre la posture des appareils à trois degrés de liberté (3DoF).
  • La localisation et la cartographie simultanées (SLAM) peuvent être utilisées pour suivre les 6 degrés de liberté. (6DoF) de l'appareil (tango, par exemple).
  • Les informations d'exposition peuvent être utilisées pour interpoler un mouvement par ligne de balayage.

Ces métadonnées peuvent être enregistrées dans la vidéo pour un post-traitement avancé dans diverses applications. Exemple :

  • Les informations de rotation au niveau de l'image peuvent être utilisées pour stabiliser les vidéos, et les données de mouvement au niveau de la ligne de balayage peuvent être utilisées pour réduire les effets de l'obturateur roulant.
  • Les mesures de l'IMU et les poses 3DoF dérivées peuvent être utilisées pour évaluer l'alignement temporel et géométrique entre l'IMU et l'appareil photo.

Les sections ci-dessous spécifient la piste CAMM (CAmera Motion Metadata), qui inclut un nouvel échantillon qui indique l'existence du titre et le format des données des échantillons de titres.

Exemple d'entrée

Le fichier vidéo doit contenir l'exemple de champ d'entrée suivant pour indiquer les métadonnées personnalisées piste, et son subComponentType doit être défini sur meta.

Camera Motion Metadata Sample Entry (camm)

Definition
Box Type: camm
Container: stsd
A sample entry indicating the data track that saves the camera motion.

Syntax
aligned(8) class CameraMotionMetadataSampleEntry extends SampleEntry('camm') {
}
  

Format des données

La piste de métadonnées contient un flux d'échantillons de métadonnées formatés comme suit.

Champ Unité Description
uint16 reserved;
Réservé. Doit être égal à 0.
uint16 type;
Type du paquet de données (voir ci-dessous). Chaque paquet contient un type de données.
switch (type) {
  case 0:
    float angle_axis[3];
  break;
          

Orientation de l'axe de l'angle en radians représentant la rotation entre les coordonnées locales de la caméra et un système de coordonnées mondiales. Le système de coordonnées mondiales est défini par les applications.

Soit M la matrice de rotation 3x3 correspondant au vecteur de l'axe de l'angle. Pour tout rayon X situé dans le système de coordonnées local, la direction du rayon dans les coordonnées mondiales est M * X.

Pour obtenir ces informations, lancez la fusion des capteurs 3DoF sur l'appareil. Après l'intégration des lectures de l'IMU, seule l'orientation globale intégrée doit être enregistrée.

Les trois valeurs représentent le vecteur de l'axe de l'angle, de sorte que l'angle de rotation en radians est donné par la longueur du vecteur, et l'axe de rotation est donné par le vecteur normalisé.

La représentation encodée peut être créée à partir d'un axe et d'un angle avec float[3] angle_axis := angle_radians * normalized_axis_vec3. Un angle positif représente une rotation autour de l'axe dans le sens inverse des aiguilles d'une montre.

De plus, la représentation encodée peut être reconvertie en axe et en angle avec float[3] axis := normalize(axis_angle) et float angle_radians := length(angle_axis).

  case 1:
    int32 pixel_exposure_time;
    int32 rolling_shutter_skew_time;
  break;
          
nanosecondes

Ces métadonnées sont définies par image vidéo. L'heure de présentation (PTS) de ces métadonnées doit le début de l'exposition de la première ligne de balayage utilisée dans une image vidéo.

pixel_exposure_time_ns est le temps d'exposition d'un seul pixel dans nanosecondes, et rolling_shutter_skew_time_ns est le délai entre l'exposition de la première et de la dernière utilisée. Ils peuvent être utilisés pour interpoler les métadonnées par ligne de balayage.

Le PTS de la trame correspondante doit se situer dans pts_of_this_metadata et pts_of_this_metadata + pixel_exposure_time_ns + rolling_Shutter_skew_time_ns ;

Lorsque ces informations ne sont pas enregistrées, l'appareil doit s'efforcer au mieux de Ajustez le PTS de l'image vidéo pour qu'il se trouve au centre de l'exposition de l'image.

  case 2:
    float gyro[3];
  break;
          
radians/seconde

Signal du gyroscope en radians/seconde autour des axes XYZ de la caméra. La valeur Rotation est positif dans le sens inverse des aiguilles d'une montre.

Les applications définissent la relation entre le système de coordonnées IMU et l'appareil photo. le système de coordonnées. Si possible, nous vous recommandons de les aligner.

Notez que les relevés initiaux du gyroscope sont dans le système de coordonnées IMU défini par le conducteur. et une transformation correcte est nécessaire pour le convertir en système de coordonnées de la caméra.

Reportez-vous à Android Sensor.TYPE_GYROSCOPE.

  case 3:
    float acceleration[3];
  break;
          
mètres/secondes^2

Relevé de l'accéléromètre en mètres/seconde^2 le long des axes XYZ de l'appareil photo.

Les applications définissent la relation entre le système de coordonnées IMU et l'appareil photo. le système de coordonnées. Si possible, nous vous recommandons de les aligner.

Reportez-vous à Android Sensor.TYPE_ACCELEROMETER.

  case 4:
    float position[3];
  break;
          

Position 3D de la caméra. La position en 3D et la rotation de l'axe de l'angle définissent Position 6DoF de l'appareil photo, à une position commune définie par l'application du système d'exploitation.

Vous pouvez obtenir ces informations en exécutant le suivi 6DoF sur l'appareil.

  case 5:
    double latitude;
    double longitude;
    double altitude;
  break;
          
degrés

Coordonnée GPS minimale de l'échantillon.

<ph type="x-smartling-placeholder">
  case 6:
    double time_gps_epoch;
    int gps_fix_type;
    double latitude;
    double longitude;
    float altitude;
    float horizontal_accuracy;
    float vertical_accuracy;
    float velocity_east;
    float velocity_north;
    float velocity_up;
    float speed_accuracy;
  break;
          
seconds

degrees
degrees
meters
meters
meters
meters/seconds
meters/seconds
meters/seconds
meters/seconds
          

time_gps_epoch : temps écoulé depuis l'epoch GPS à laquelle la mesure a été effectuée

gps_fix_type - 0 ( pas de correction), 2 (correction 2D), 3 (correction 3D)

latitude : latitude en degrés.

longitude : longitude en degrés

altitude : hauteur au-dessus de l'ellipsoïde WGS84

horizontal_accuracy : précision horizontale (lat/long)

vertical_accuracy : précision de la verticale (altitude)

velocity_east : vitesse vers l'est

velocity_north : vitesse vers le nord

velocity_up : vitesse ascendante

speed_accuracy : précision de la vitesse.

<ph type="x-smartling-placeholder">
  case 7:
    float magnetic_field[3];
  break;
          
Microtesla

Champ magnétique ambiant.

Reportez-vous à Android Sensor.TYPE_MAGNETIC_FIELD.

}

Remarques

  • Il ne doit y avoir qu'une seule piste CAMM par fichier MP4, qui contient tous les types de données ci-dessus. en les combinant.
  • Dans les cas 5 et 6, les échantillons GPS doivent être des valeurs brutes générées par les capteurs. Elles ne peuvent pas être interpolées ou répétées en l'absence de changement GPS.
  • Les systèmes de coordonnées sont à droite. Le système de coordonnées de la caméra est défini sur X. pointant vers la droite, Y vers le bas et le Z vers l'avant. L'axe Y de l'échelle le système de coordonnées doit pointer vers le bas le long du vecteur de gravité.
  • Les relevés de l'IMU se trouvent généralement dans un système de coordonnées IMU distinct, et une rotation est nécessaire pour les mapper au système de coordonnées de la caméra si les deux systèmes de coordonnées sont différents.
  • Tous les champs sont small-endian (l'octet de poids est le moins important en premier) et le nombre flottant de 32 bits sont au format IEEE 754-1985.
  • Pour synchroniser avec précision l'image vidéo et les métadonnées, le PTS de l'image vidéo doivent être au centre de son exposition (elle peut également être déduite des métadonnées d'exposition).
  • L'application qui combine ces données doit choisir une échelle de temps suffisamment grande pour obtenir une PTS précis.

Problèmes potentiels

  • Cette conception n'autorise qu'un seul paquet par échantillon de données. Les appareils intégrés peuvent rencontrer des problèmes d'écriture des paquets à très haute fréquence, car cela augmente la pression d'E/S ainsi que la taille de l'en-tête (par exemple, les atomes stsc et stsz) si la taille des paquets varie.
  • La combinaison de différents types de données avec des délais différents peut faire avancer le PTS à la fois. et vers l'arrière à mesure que des paquets sont écrits dans le fichier. Cependant, cela peut être remédié par la mise en mémoire tampon des paquets et leur écriture dans un ordre monotone.