ক্যামেরা মোশন মেটাডেটা স্পেসিক

এই পৃষ্ঠাটি একটি স্পেসিফিকেশন বর্ণনা করে যা MP4 ফাইলগুলিকে ভিডিও ক্যাপচারের সময় ক্যামেরার গতি সম্পর্কে মেটাডেটা এম্বেড করতে দেয়৷ যে ডিভাইসগুলি ভিডিও ক্যাপচার করে সেগুলিতে সাধারণত সেন্সর থাকে যা ক্যাপচার সম্পর্কে অতিরিক্ত তথ্য প্রদান করতে পারে। উদাহরণ স্বরূপ:

  • মোবাইল ফোনে সাধারণত জাইরোস্কোপ, অ্যাক্সিলোমিটার, ম্যাগনেটোমিটার এবং জিপিএসের জন্য সেন্সর থাকে।
  • সেন্সর ফিউশন ডিভাইসের 3 ডিগ্রি স্বাধীনতা (3DoF) পোজ ট্র্যাক করতে ব্যবহার করা যেতে পারে।
  • যুগপত স্থানীয়করণ এবং ম্যাপিং (SLAM) ডিভাইসের 6 ডিগ্রি স্বাধীনতা (6DoF) পোজ (উদাহরণস্বরূপ, ট্যাঙ্গো) ট্র্যাক করতে ব্যবহার করা যেতে পারে।
  • এক্সপোজার তথ্য প্রতি-স্ক্যানলাইন গতিকে ইন্টারপোলেট করতে ব্যবহার করা যেতে পারে।

বিভিন্ন অ্যাপ্লিকেশনে উন্নত পোস্ট-প্রসেসিংয়ের জন্য এই মেটাডেটা ভিডিওতে সংরক্ষণ করা যেতে পারে। উদাহরণ স্বরূপ:

  • ফ্রেম-স্তরের ঘূর্ণন তথ্য ভিডিও স্থিতিশীল করতে ব্যবহার করা যেতে পারে, এবং স্ক্যানলাইন-স্তরের গতি ডেটা রোলিং শাটার প্রভাব কমাতে ব্যবহার করা যেতে পারে।
  • IMU রিডিং এবং প্রাপ্ত 3DoF পোজগুলি IMU এবং ক্যামেরার মধ্যে সময় সারিবদ্ধকরণ এবং জ্যামিতিক প্রান্তিককরণের মূল্যায়ন করতে ব্যবহার করা যেতে পারে।

নীচের বিভাগগুলি ক্যামেরা মোশন মেটাডেটা (CAMM) ট্র্যাক নির্দিষ্ট করে, যার মধ্যে একটি নতুন নমুনা এন্ট্রি রয়েছে যা ট্র্যাকের অস্তিত্ব এবং ট্র্যাক নমুনার ডেটা বিন্যাস নির্দেশ করে৷

নমুনা এন্ট্রি

ভিডিও ফাইলে কাস্টম meta ট্র্যাক নির্দেশ করতে নিম্নলিখিত নমুনা এন্ট্রি বক্স থাকা উচিত এবং ট্র্যাকের subComponentType -কম্পোনেন্ট টাইপ মেটাতে সেট করা উচিত।

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') {
}
  

উপাত্ত বিন্যাস

মেটাডেটা ট্র্যাকটিতে মেটাডেটা নমুনার একটি স্ট্রীম রয়েছে যা নিম্নরূপ ফর্ম্যাট করা হয়েছে।

মাঠ ইউনিট বর্ণনা
uint16 reserved;
সংরক্ষিত 0 হতে হবে।
uint16 type;
ডেটা প্যাকেটের ধরন (নীচে দেখুন)। প্রতিটি প্যাকেটে এক ধরনের ডেটা থাকে।
switch (type) {
  case 0:
    float angle_axis[3];
  break;
          

রেডিয়ানে কোণ অক্ষ অভিযোজন স্থানীয় ক্যামেরা স্থানাঙ্ক থেকে বিশ্ব সমন্বয় ব্যবস্থায় ঘূর্ণন প্রতিনিধিত্ব করে। বিশ্বের সমন্বয় সিস্টেম অ্যাপ্লিকেশন দ্বারা সংজ্ঞায়িত করা হয়.

কোণ অক্ষ ভেক্টরের সাথে সামঞ্জস্যপূর্ণ 3x3 ঘূর্ণন ম্যাট্রিক্স M কে ধরা যাক। স্থানীয় স্থানাঙ্ক ব্যবস্থায় যে কোনো রশ্মি X-এর জন্য, বিশ্ব স্থানাঙ্কে রশ্মির দিক হল M * X।

ডিভাইসে 3DoF সেন্সর ফিউশন চালানোর মাধ্যমে এই তথ্য পাওয়া যেতে পারে। IMU রিডিংগুলিকে একীভূত করার পরে, শুধুমাত্র সমন্বিত বৈশ্বিক অভিযোজন রেকর্ড করা প্রয়োজন৷

তিনটি মান কোণ-অক্ষ ভেক্টরকে উপস্থাপন করে, যেমন রেডিয়ানে ঘূর্ণন কোণটি ভেক্টরের দৈর্ঘ্য দ্বারা দেওয়া হয় এবং ঘূর্ণন অক্ষটি স্বাভাবিক ভেক্টর দ্বারা দেওয়া হয়।

এনকোডেড উপস্থাপনাটি একটি অক্ষ এবং কোণ থেকে float[3] angle_axis := angle_radians * normalized_axis_vec3 সহ তৈরি করা যেতে পারে। একটি ধনাত্মক কোণ অক্ষের চারপাশে ঘড়ির কাঁটার বিপরীতে ঘূর্ণনের প্রতিনিধিত্ব করে।

এবং এনকোড করা উপস্থাপনাটি float[3] axis := normalize(axis_angle) এবং float angle_radians := length(angle_axis) সহ একটি অক্ষ এবং কোণে রূপান্তরিত হতে পারে।

  case 1:
    int32 pixel_exposure_time;
    int32 rolling_shutter_skew_time;
  break;
          
ন্যানোসেকেন্ড

এই মেটাডেটা ভিডিও ফ্রেম প্রতি হয়. এই মেটাডেটার উপস্থাপনার সময় (PTS) একটি ভিডিও ফ্রেমে প্রথম-ব্যবহৃত স্ক্যানলাইনের এক্সপোজারের শুরু হওয়া উচিত।

pixel_exposure_time_ns হল ন্যানোসেকেন্ডে একটি পিক্সেলের এক্সপোজার সময় এবং rolling_shutter_skew_time_ns হল প্রথম-ব্যবহৃত স্ক্যানলাইন এবং সর্বশেষ-ব্যবহৃত স্ক্যানলাইনের এক্সপোজারের মধ্যে বিলম্ব। তারা প্রতি-স্ক্যানলাইন মেটাডেটা ইন্টারপোলেট করতে ব্যবহার করা যেতে পারে।

সংশ্লিষ্ট ফ্রেমের PTS pts_of_this_metadata এবং pts_of_this_metadata + pixel_exposure_time_ns + rolling_shutter_skew_time_ns এর মধ্যে থাকা উচিত।

যখন এই তথ্য সংরক্ষণ করা হয় না, তখন ডিভাইসটিকে ভিডিও ফ্রেমের PTS সামঞ্জস্য করার সর্বোত্তম প্রচেষ্টা করা উচিত যাতে ফ্রেম এক্সপোজারের কেন্দ্রে থাকে।

  case 2:
    float gyro[3];
  break;
          
রেডিয়ান/সেকেন্ড

ক্যামেরার XYZ অক্ষের চারপাশে রেডিয়ান/সেকেন্ডে জাইরোস্কোপ সংকেত। ঘড়ির কাঁটার বিপরীত দিকে ঘূর্ণন ইতিবাচক।

অ্যাপ্লিকেশনগুলি IMU স্থানাঙ্ক সিস্টেম এবং ক্যামেরা সমন্বয় সিস্টেমের মধ্যে সম্পর্ককে সংজ্ঞায়িত করে। আমরা যদি সম্ভব হয় তাদের সারিবদ্ধ সুপারিশ.

নোট করুন যে প্রাথমিক গাইরো রিডিংগুলি এর ড্রাইভার দ্বারা সংজ্ঞায়িত IMU কোঅর্ডিনেট সিস্টেমে রয়েছে এবং এটিকে ক্যামেরা স্থানাঙ্ক সিস্টেমে রূপান্তর করার জন্য সঠিক রূপান্তর প্রয়োজন।

Android সেন্সর দেখুন।TYPE_GYROSCOPE।

  case 3:
    float acceleration[3];
  break;
          
মিটার/সেকেন্ড^2

ক্যামেরার XYZ অক্ষ বরাবর মিটার/সেকেন্ড^2 এ এক্সেলেরোমিটার রিডিং।

অ্যাপ্লিকেশনগুলি IMU স্থানাঙ্ক সিস্টেম এবং ক্যামেরা সমন্বয় সিস্টেমের মধ্যে সম্পর্ককে সংজ্ঞায়িত করে। আমরা যদি সম্ভব হয় তাদের সারিবদ্ধ সুপারিশ.

Android সেন্সর দেখুন।TYPE_ACCELEROMETER।

  case 4:
    float position[3];
  break;
          

ক্যামেরার 3D অবস্থান। 3D অবস্থান এবং কোণ অক্ষ ঘূর্ণন একসাথে ক্যামেরার 6DoF ভঙ্গি সংজ্ঞায়িত করে এবং তারা একটি সাধারণ অ্যাপ্লিকেশন-সংজ্ঞায়িত স্থানাঙ্ক সিস্টেমে রয়েছে।

আপনি ডিভাইসে 6DoF ট্র্যাকিং চালিয়ে এই তথ্য পেতে পারেন।

  case 5:
    double latitude;
    double longitude;
    double altitude;
  break;
          
ডিগ্রী

নমুনার ন্যূনতম জিপিএস স্থানাঙ্ক।

  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 - GPS যুগের পর থেকে যখন পরিমাপ নেওয়া হয়েছিল

gps_fix_type - 0 (কোনও ফিক্স নেই), 2 (2D ফিক্স), 3 (3D ফিক্স)

অক্ষাংশ - ডিগ্রী মধ্যে অক্ষাংশ

দ্রাঘিমাংশ - ডিগ্রিতে দ্রাঘিমাংশ

উচ্চতা - WGS-84 উপবৃত্তের উপরে উচ্চতা

অনুভূমিক_নির্ভুলতা - অনুভূমিক (অক্ষাংশ/দীর্ঘ) সঠিকতা

vertical_accuracy - উল্লম্ব (উচ্চতা) নির্ভুলতা

বেগ_পূর্ব - পূর্ব দিকে বেগ

velocity_north - উত্তর দিকে বেগ

velocity_up - উপরে দিকের বেগ

speed_accuracy - গতির সঠিকতা

  case 7:
    float magnetic_field[3];
  break;
          
মাইক্রোটেসলা

পরিবেষ্টিত চৌম্বক ক্ষেত্র।

Android সেন্সর দেখুন।TYPE_MAGNETIC_FIELD।

}

মন্তব্য

  • প্রতি MP4 ফাইলে শুধুমাত্র একটি CAMM ট্র্যাক থাকা উচিত, যাতে উপরের সমস্ত ডেটা টাইপগুলিকে একত্রিত করে ধারণ করে৷
  • জিপিএস নমুনা 5 এবং 6 ক্ষেত্রে সেন্সর দ্বারা উত্পন্ন কাঁচা মান হতে হবে। জিপিএস পরিবর্তন না হলে এগুলি প্রত্যক্ষ করা বা পুনরাবৃত্তি করা যায় না।
  • স্থানাঙ্ক সিস্টেমগুলি ডানদিকের। ক্যামেরা কোঅর্ডিনেট সিস্টেম X নির্দেশ করে ডানদিকে, Y নিচের দিকে নির্দেশ করে এবং Z সামনের দিকে নির্দেশ করে। গ্লোবাল কোঅর্ডিনেট সিস্টেমের Y-অক্ষকে মাধ্যাকর্ষণ ভেক্টর বরাবর নিচে নির্দেশ করা উচিত।
  • IMU রিডিংগুলি সাধারণত একটি পৃথক IMU কোঅর্ডিনেট সিস্টেমে থাকে এবং দুটি স্থানাঙ্ক সিস্টেম আলাদা হলে ক্যামেরা স্থানাঙ্ক সিস্টেমে তাদের ম্যাপ করার জন্য ঘূর্ণনের প্রয়োজন হয়।
  • সমস্ত ক্ষেত্র লিটল-এন্ডিয়ান (প্রথমে সর্বনিম্ন উল্লেখযোগ্য বাইট), এবং 32-বিট ফ্লোটিং পয়েন্টগুলি IEEE 754-1985 ফর্ম্যাটের।
  • ভিডিও ফ্রেম এবং মেটাডেটা সঠিকভাবে সিঙ্ক্রোনাইজ করার জন্য, ভিডিও ফ্রেমের PTS তার এক্সপোজারের কেন্দ্রে থাকা উচিত (এটি এক্সপোজার মেটাডেটা থেকেও অনুমান করা যেতে পারে)।
  • এই ডেটা মিক্সিং অ্যাপ্লিকেশনটিকে একটি সঠিক PTS পেতে যথেষ্ট বড় টাইম স্কেল বেছে নেওয়া উচিত।

সম্ভাব্য সমস্যা

  • এই নকশা শুধুমাত্র ডেটা নমুনা প্রতি একটি প্যাকেট অনুমতি দেয়. এমবেডেড ডিভাইসে খুব উচ্চ ফ্রিকোয়েন্সি প্যাকেট লিখতে সমস্যা হতে পারে কারণ এটি I/O চাপ বাড়ায়, সেইসাথে হেডারের আকার (উদাহরণস্বরূপ, stsc এবং stsz পরমাণু) যদি প্যাকেটের আকার পরিবর্তিত হয়।
  • বিভিন্ন বিলম্বের সাথে বিভিন্ন ধরণের ডেটা মিশ্রিত করার ফলে ফাইলে প্যাকেট লেখার কারণে PTS এগিয়ে এবং পিছনে যেতে পারে। যাইহোক, প্যাকেটগুলিকে বাফার করে এবং একঘেয়ে ক্রমে লেখার মাধ্যমে এটি কাটিয়ে উঠতে পারে।