Thông số kỹ thuật của siêu dữ liệu chuyển động của camera

Trang này mô tả thông số kỹ thuật cho phép nhúng tệp MP4 siêu dữ liệu về chuyển động của camera trong khi quay video. Các thiết bị quay video thường có cảm biến có thể cung cấp thêm thông tin về chụp ảnh. Ví dụ:

  • Điện thoại di động thường có cảm biến cho con quay hồi chuyển, gia tốc kế, từ kế và GPS.
  • Phản ứng tổng hợp cảm biến có thể được dùng để theo dõi tư thế 3 bậc tự do (3DoF) của các thiết bị.
  • Bản địa hoá và ánh xạ đồng thời (SLAM) có thể được sử dụng để theo dõi 6 bậc tự do (6DoF) tư thế của thiết bị (ví dụ: Tango).
  • Thông tin phơi sáng có thể được dùng để nội suy chuyển động trên mỗi đường quét.

Bạn có thể lưu siêu dữ liệu này vào video để xử lý hậu kỳ nâng cao trong nhiều ứng dụng. Ví dụ:

  • Thông tin xoay ở cấp khung hình có thể dùng để ổn định video và dữ liệu chuyển động cấp đường quét có thể dùng để giảm hiệu ứng màn trập lăn.
  • Bạn có thể sử dụng các chỉ số IMU và tư thế 3DoF dẫn xuất để đánh giá sự căn chỉnh thời gian và căn chỉnh hình học giữa IMU và máy ảnh.

Các phần dưới đây nêu rõ kênh Siêu dữ liệu chuyển động CAmera (CAMM), trong đó có một mẫu mới mục này cho biết sự tồn tại của bản nhạc và định dạng dữ liệu của bản nhạc mẫu.

Mục mẫu

Tệp video phải chứa ô nhập mẫu sau để cho biết siêu dữ liệu tuỳ chỉnh kênh và subComponentType của kênh phải được đặt thành 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') {
}
  

Định dạng dữ liệu

Bản siêu dữ liệu chứa một luồng mẫu siêu dữ liệu được định dạng như sau.

Trường Đơn vị Mô tả
uint16 reserved;
Đã đặt trước. Nên là 0.
uint16 type;
Loại gói dữ liệu (xem bên dưới). Mỗi gói có một loại dữ liệu.
switch (type) {
  case 0:
    float angle_axis[3];
  break;
          

Hướng trục góc tính bằng radian biểu thị hướng xoay từ toạ độ máy ảnh cục bộ đến hệ toạ độ thế giới. Hệ toạ độ thế giới do các ứng dụng xác định.

Gọi M là ma trận quay 3x3 tương ứng với vectơ trục góc. Đối với bất kỳ tia X nào trong hệ toạ độ cục bộ, hướng tia trong toạ độ thế giới là M * X.

Bạn có thể lấy thông tin này bằng cách chạy tính năng hợp nhất cảm biến 3DoF trên thiết bị. Sau khi tích hợp các giá trị IMU, chỉ cần ghi lại hướng toàn cục được tích hợp.

Ba giá trị đại diện cho vectơ trục góc, sao cho góc quay tính bằng radian được cho theo độ dài của vectơ và trục quay được cho bởi vectơ chuẩn hoá.

Bạn có thể tạo bản trình bày được mã hoá từ một trục và góc bằng float[3] angle_axis := angle_radians * normalized_axis_vec3. Góc dương biểu thị sự xoay ngược chiều kim đồng hồ xung quanh trục.

Ngoài ra, bạn có thể chuyển đổi bản trình bày được mã hoá trở lại thành một trục và góc bằng float[3] axis := normalize(axis_angle)float angle_radians := length(angle_axis).

  case 1:
    int32 pixel_exposure_time;
    int32 rolling_shutter_skew_time;
  break;
          
nano giây

Siêu dữ liệu này là theo từng khung hình video. Thời gian trình bày (PTS) của siêu dữ liệu này phải là điểm bắt đầu hiển thị đường quét được sử dụng lần đầu trong khung hình video.

pixel_exposure_time_ns là thời gian phơi sáng cho một pixel tính theo nano giây và rolling_shutter_skew_time_ns là độ trễ giữa độ phơi sáng của đường quét dùng lần đầu tiên và đường quét dùng gần đây nhất. Chúng có thể được sử dụng để nội suy siêu dữ liệu cho mỗi bản quét.

PTS của khung hình tương ứng phải nằm trong pts_of_this_metadatapts_of_this_metadata + pixel_expo quốc_time_ns + roll_capture_skew_time_ns.

Khi thông tin này không được lưu, thiết bị sẽ cố gắng hết sức để điều chỉnh PTS của khung hình video nằm ở chính giữa độ phơi sáng của khung hình.

  case 2:
    float gyro[3];
  break;
          
radian/giây

Tín hiệu con quay hồi chuyển tính bằng radian/giây xung quanh các trục XYZ của máy ảnh. Xoay là dương theo chiều ngược kim đồng hồ.

Các ứng dụng xác định mối quan hệ giữa hệ toạ độ IMU và máy ảnh hệ toạ độ. Bạn nên căn chỉnh chúng nếu có thể.

Lưu ý rằng các số đọc con quay hồi chuyển ban đầu nằm trong hệ thống toạ độ IMU do người lái xe xác định, và cần biến đổi thích hợp để chuyển đổi nó sang hệ toạ độ máy ảnh.

Tham khảo Cảm biến Android.TYPE_GYROSCOPE.

  case 3:
    float acceleration[3];
  break;
          
mét/giây^2

Đọc gia tốc kế tính bằng mét/giây^2 dọc theo các trục XYZ của máy ảnh.

Các ứng dụng xác định mối quan hệ giữa hệ toạ độ IMU và máy ảnh hệ toạ độ. Bạn nên căn chỉnh chúng nếu có thể.

Tham khảo Android Sensor.TYPE_ACCELEROMETER.

  case 4:
    float position[3];
  break;
          

Vị trí 3D của camera. Vị trí 3D và xoay trục góc cùng xác định Tư thế 6DoF của camera và chúng nằm trong một toạ độ chung do ứng dụng xác định hệ thống.

Bạn có thể xem thông tin này bằng cách chạy tính năng theo dõi 6DoF trên thiết bị.

  case 5:
    double latitude;
    double longitude;
    double altitude;
  break;
          
độ

Toạ độ GPS tối thiểu của mẫu.

  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 – Thời gian kể từ thời gian bắt đầu của hệ thống GPS khi đo lường

gps_fix_type – 0 ( không sửa), 2 (sửa 2D), 3 (sửa 3D)

vĩ độ - Vĩ độ tính bằng độ

kinh độ – Kinh độ theo độ

cao độ - Chiều cao trên hình elip WGS-84

horizontal_accuracy – Độ chính xác theo chiều ngang (vĩ độ/kinh độ)

vertical_accuracy – Độ chính xác theo chiều dọc (độ cao)

velocity_east – Vận tốc theo hướng đông

velocity_north – Vận tốc theo hướng bắc

velocity_up – Vận tốc theo hướng đi lên

speed_accuracy – Độ chính xác về tốc độ

  case 7:
    float magnetic_field[3];
  break;
          
microtesla

Từ trường xung quanh.

Tham khảo Android Sensor.TYPE_MAGNETIC_FIELD.

}

Ghi chú

  • Mỗi tệp MP4 chỉ được có một bản nhạc CAMM, chứa tất cả các loại dữ liệu nêu trên bằng cách kết hợp chúng với nhau.
  • Mẫu GPS trong trường hợp 5 và 6 phải là giá trị thô do các cảm biến tạo ra. Chúng không được nội suy hoặc lặp lại khi không có thay đổi GPS.
  • Hệ toạ độ là bên phải. Hệ thống toạ độ máy ảnh được định nghĩa là X hướng sang phải, Y hướng xuống dưới và Z chỉ về phía trước. Trục Y của hình ảnh toàn cục hệ toạ độ phải trỏ xuống dọc theo vectơ trọng lực.
  • Chỉ số IMU thường nằm trong một hệ toạ độ IMU riêng biệt và cần phải xoay để ánh xạ chúng với hệ toạ độ của máy ảnh nếu hai hệ toạ độ này khác nhau.
  • Tất cả các trường đều là Little-endian (byte ít quan trọng nhất đầu tiên) và 32-bit nổi có định dạng IEEE 754-1985.
  • Để đồng bộ hoá chính xác khung video và siêu dữ liệu, PTS của khung video nên ở vị trí trung tâm (điều này cũng có thể được suy luận từ siêu dữ liệu phơi sáng).
  • Ứng dụng kết hợp dữ liệu này nên chọn thang thời gian đủ lớn để có PTS chính xác.

Các vấn đề có thể xảy ra

  • Thiết kế này chỉ cho phép một gói cho mỗi mẫu dữ liệu. Thiết bị được nhúng có thể gặp vấn đề khi ghi gói tần số rất cao vì nó làm tăng áp lực I/O, cũng như kích thước tiêu đề (ví dụ: nguyên tử stscstsz) nếu kích thước gói thay đổi.
  • Việc kết hợp nhiều loại dữ liệu với độ trễ khác nhau có thể khiến PTS không xử lý được và ngược lại khi các gói được ghi vào tệp. Tuy nhiên, bạn có thể khắc phục vấn đề này bằng cách lưu vào bộ đệm gói và ghi chúng theo thứ tự đơn điệu.