Android এর জন্য অগমেন্টেড ইমেজ ডেভেলপার গাইড

আপনার নিজের অ্যাপে কিভাবে অগমেন্টেড ইমেজ ব্যবহার করবেন তা শিখুন।

পূর্বশর্ত

এগিয়ে যাওয়ার আগে নিশ্চিত করুন যে আপনি মৌলিক AR ধারণা এবং কীভাবে একটি ARCore সেশন কনফিগার করবেন তা বুঝতে পেরেছেন।

একটি ইমেজ ডাটাবেস তৈরি করুন

প্রতিটি ইমেজ ডাটাবেস 1,000 ইমেজ পর্যন্ত তথ্য সংরক্ষণ করতে পারে।

একটি AugmentedImageDatabase তৈরি করার দুটি উপায় আছে:

  • একটি সংরক্ষিত চিত্র ডাটাবেস লোড করুন । তারপর ঐচ্ছিকভাবে আরো রেফারেন্স ইমেজ যোগ করুন.
  • একটি নতুন খালি ডাটাবেস তৈরি করুন । তারপর এক সময়ে রেফারেন্স ইমেজ যোগ করুন.

একটি সংরক্ষিত চিত্র ডাটাবেস লোড করুন

একটি বিদ্যমান চিত্র ডাটাবেস লোড করতে AugmentedImageDatabase.deserialize() ব্যবহার করুন:

জাভা

AugmentedImageDatabase imageDatabase;
try (InputStream inputStream = this.getAssets().open("example.imgdb")) {
  imageDatabase = AugmentedImageDatabase.deserialize(session, inputStream);
} catch (IOException e) {
  // The Augmented Image database could not be deserialized; handle this error appropriately.
}

কোটলিন

val imageDatabase = this.assets.open("example.imgdb").use {
  AugmentedImageDatabase.deserialize(session, it)
}

বিকাশের সময় arcoreimg কমান্ড লাইন টুল ব্যবহার করে বা মেমরিতে লোড করা ডাটাবেসে AugmentedImageDatabase.serialize() কল করে ইমেজ ডাটাবেস তৈরি করা যেতে পারে।

একটি নতুন খালি ডাটাবেস তৈরি করুন

রানটাইমে একটি খালি ইমেজ ডাটাবেস তৈরি করতে, AugmentedImageDatabase কনস্ট্রাক্টর ব্যবহার করুন:

জাভা

AugmentedImageDatabase imageDatabase = new AugmentedImageDatabase(session);

কোটলিন

val imageDatabase = AugmentedImageDatabase(session)

একটি বিদ্যমান ডাটাবেসে ছবি যোগ করুন

একটি ঐচ্ছিক widthInMeters নির্দিষ্ট করে প্রতিটি ছবির জন্য AugmentedImageDatabase.addImage() কল করে আপনার ইমেজ ডাটাবেসে ছবি যোগ করুন।

জাভা

Bitmap bitmap;
try (InputStream bitmapString = getAssets().open("dog.jpg")) {
  bitmap = BitmapFactory.decodeStream(bitmapString);
} catch (IOException e) {
  // The bitmap could not be found in assets; handle this error appropriately.
  throw new AssertionError("The bitmap could not be found in assets.", e);
}

// If the physical size of the image is not known, use addImage(String, Bitmap) instead, at the
// expense of an increased image detection time.
float imageWidthInMeters = 0.10f; // 10 cm
int dogIndex = imageDatabase.addImage("dog", bitmap, imageWidthInMeters);

কোটলিন

val bitmap = assets.open("dog.jpg").use { BitmapFactory.decodeStream(it) }
// If the physical size of the image is not known, use addImage(String, Bitmap) instead, at the
// expense of an increased image detection time.
val imageWidthInMeters = 0.10f // 10 cm
val dogIndex = imageDatabase.addImage("dog", bitmap, imageWidthInMeters)

প্রত্যাবর্তিত সূচীগুলি পরে কোন রেফারেন্স চিত্র সনাক্ত করা হয়েছে তা সনাক্ত করতে ব্যবহার করা যেতে পারে।

ইমেজ ট্র্যাকিং সক্ষম করুন

কাঙ্খিত ইমেজ ডাটাবেসের সাথে কনফিগার করা সেশন কনফিগারেশন সেট করে ছবি ট্র্যাক করা শুরু করতে আপনার ARCore সেশন কনফিগার করুন:

জাভা

Config config = new Config(session);
config.setAugmentedImageDatabase(imageDatabase);
session.configure(config);

কোটলিন

val config = Config(session)
config.augmentedImageDatabase = imageDatabase
session.configure(config)

সেশন চলাকালীন, ARCore ইমেজ ডাটাবেসের সাথে ক্যামেরা ইমেজ থেকে ফিচার পয়েন্টের সাথে মিল করে ছবি খোঁজে।

মিলে যাওয়া ছবিগুলি পেতে, আপনার ফ্রেম আপডেট লুপে আপডেট হওয়া AugmentedImage ইমেজগুলির জন্য পোল করুন৷

জাভা

Collection<AugmentedImage> updatedAugmentedImages =
    frame.getUpdatedTrackables(AugmentedImage.class);
for (AugmentedImage img : updatedAugmentedImages) {
  if (img.getTrackingState() == TrackingState.TRACKING) {
    // Use getTrackingMethod() to determine whether the image is currently
    // being tracked by the camera.
    switch (img.getTrackingMethod()) {
      case LAST_KNOWN_POSE:
        // The planar target is currently being tracked based on its last
        // known pose.
        break;
      case FULL_TRACKING:
        // The planar target is being tracked using the current camera image.
        break;
      case NOT_TRACKING:
        // The planar target isn't been tracked.
        break;
    }

    // You can also check which image this is based on img.getName().
    if (img.getIndex() == dogIndex) {
      // TODO: Render a 3D version of a dog in front of img.getCenterPose().
    } else if (img.getIndex() == catIndex) {
      // TODO: Render a 3D version of a cat in front of img.getCenterPose().
    }
  }
}

কোটলিন

val updatedAugmentedImages = frame.getUpdatedTrackables(AugmentedImage::class.java)

for (img in updatedAugmentedImages) {
  if (img.trackingState == TrackingState.TRACKING) {
    // Use getTrackingMethod() to determine whether the image is currently
    // being tracked by the camera.
    when (img.trackingMethod) {
      AugmentedImage.TrackingMethod.LAST_KNOWN_POSE -> {
        // The planar target is currently being tracked based on its last known pose.
      }
      AugmentedImage.TrackingMethod.FULL_TRACKING -> {
        // The planar target is being tracked using the current camera image.
      }
      AugmentedImage.TrackingMethod.NOT_TRACKING -> {
        // The planar target isn't been tracked.
      }
    }

    // You can also check which image this is based on AugmentedImage.getName().
    when (img.index) {
      dogIndex -> TODO("Render a 3D version of a dog at img.getCenterPose()")
      catIndex -> TODO("Render a 3D version of a cat at img.getCenterPose()")
    }
  }
}

বিভিন্ন ব্যবহারের ক্ষেত্রে সমর্থন

যখন ARCore একটি অগমেন্টেড ইমেজ শনাক্ত করে, তখন এটি সেই অগমেন্টেড ইমেজের জন্য একটি Trackable তৈরি করে এবং TrackingState কে TRACKING এবং TrackingMethod FULL_TRACKING এ সেট করে। যখন ট্র্যাক করা ছবি ক্যামেরা ভিউ থেকে সরে যায়, তখন ARCore TrackingMethod LAST_KNOWN_POSE এ পরিবর্তন করে এবং ইমেজের ওরিয়েন্টেশন এবং অবস্থান প্রদান করে।

উদ্দেশ্য ব্যবহারের ক্ষেত্রে নির্ভর করে আপনার অ্যাপের এই গণনাগুলি ভিন্নভাবে ব্যবহার করা উচিত।

  • স্থির ছবি । বেশিরভাগ ক্ষেত্রেই ছবি জড়িত থাকে যেগুলি জায়গায় স্থির থাকে (অর্থাৎ সরানো আশা করা যায় না) চিত্রটি সনাক্ত করা হয়েছে কিনা এবং এর অবস্থান জানা আছে কিনা তা নির্ধারণ করতে কেবল TrackingState ব্যবহার করতে পারে। TrackingMethod উপেক্ষা করা যেতে পারে।

  • চলন্ত ছবি । যদি আপনার অ্যাপকে একটি চলমান ছবি ট্র্যাক করতে হয়, তাহলে ছবিটি সনাক্ত করা হয়েছে কিনা এবং এর অবস্থান জানা আছে কিনা তা নির্ধারণ করতে TrackingState এবং TrackingMethod উভয়ই ব্যবহার করুন।

কেস ব্যবহার করুন স্থির চিত্র চলমান চিত্র
উদাহরণ দেয়ালে টাঙানো পোস্টার একটি বাসের পাশে একটি বিজ্ঞাপন
ভঙ্গি হতে পারে
যখন বৈধ বলে বিবেচিত হয়
TrackingState == TRACKING TrackingState == TRACKING
এবং
TrackingMethod == FULL_TRACKING

এছাড়াও দেখুন