הוספת נתונים בהתאמה אישית תוך כדי צילום ב-Android

ההקלטה ו ממשק ה-API להפעלה מאפשר להקליט סשן ולהשתמש בו במקום בפיד מצלמה בזמן אמת. עם זאת, ההקלטות האלה מכילות רק נתוני וידאו ונתוני חיישנים. אפשר גם להוסיף נתונים מותאמים אישית להקלטת סשן, כך שהנתונים יחזרו אליכם במהלך ההפעלה, כאילו הם חלק מתמונת מצלמה.

ARCore לא כולל באופן אוטומטי נתונים מותאמים אישית בהקלטות. במקום זאת, היא מאפשרת להוסיף נתונים בהתאמה אישית למסגרת ARCore במהלך ההקלטה, ולאחזר את אותם נתונים מהפריים במהלך ההפעלה. באחריותכם לתכנת את האפליקציה כך שהמשתמש יקבל את הנתונים שהוא מצפה לו להחזיר את הסשן.

תרחישים לדוגמה של נתונים מותאמים אישית

הוספת נתונים מותאמים אישית להקלטות מגדילה את האפשרויות לאפליקציות AR שלכם. בהמשך מפורטים כמה תרחישים לדוגמה.

שימוש ב-AR תוך כדי תנועה

בעבר, משתמשים יכלו לגשת לחוויות ה-AR רק במקום הנכון ובזמן הנכון. כדי להציב מנורת AR בסלון, הם היו צריכים לעמוד פיזית במיקום כדי לראות איך המנורה נראית שם. בעזרת טראקים בהתאמה אישית, הם יוכלו להקליט את הסלון פעם אחת ולהוסיף ריהוט וירטואלי לסצנה בכל פעם שמתחשק להם.

יצירה משותפת של חוויות AR

ללא דרישה לגבי סשן בזמן אמת, למשתמשים יש עוד הרבה אפשרויות לעריכת AR, שמאפשרות להם ליצור תוכן AR ייחודי ולגשת אליו בכל מקום ובכל זמן. לדוגמה, הם יכולים להקליט סביבה מסוימת, להוסיף אפקטים של מציאות רבודה ולשתף אותם עם חברים.

דרישות מוקדמות

לפני שממשיכים, חשוב להבין את המושגים הבסיסיים של AR ואת הדרך להגדיר סשן ARCore.

הקלטה באמצעות נתונים בהתאמה אישית

יצירת הקלטת סשן עם נתונים בהתאמה אישית.

אתחול הקלטה עם נתונים בהתאמה אישית

כדי לאתחל הקלטה עם נתונים מותאמים אישית, פועלים לפי השלבים הבאים: כדי להתחיל, לעצור ולבדוק סשן הקלטה צריך לקרוא את המאמר הקלטה והפעלה של סשן AR.

  1. מקבלים RecordingConfig.
  2. יוצרים Track חדש עם UUID מותאם אישית. כל הנתונים בהתאמה אישית יישמרו כאן.
  3. מוסיפים את Track אל RecordingConfig שיצרתם במהלך הגדרת הסשן.

Java

// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use
// to get your data back during playback.
UUID trackUUID = UUID.fromString("de5ec7a4-09ec-4c48-b2c3-a98b66e71893"); // from UUID generator
Track track = new Track(session).setId(trackUUID);

// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
recordingConfig.addTrack(track);

Kotlin

// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use
// to get your data back during playback.
val trackUUID = UUID.fromString("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
val track = Track(session).setId(trackUUID)

// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
recordingConfig.addTrack(track)

כל טראקים חדשים נחשבים להקלטות נפרדות, כאשר לכל טראק מוקלט מוגדר UUID משלו.

אופציונלי: הגדרת הטראק עם נתונים נוספים

אם תרצו לזהות אותו מאוחר יותר, תוכלו להגדיר מסלול עם נתונים נוספים שמתארים את הקלטת הסשן. לדוגמה, אפשר 'לתייג' טראק על ידי הוספת הערה שמתארת את המיקום והשעה שבהם הקלטתם את הסשן: 'הסשן הזה הוקלט בקניון בשעות אחר הצהריים'.

Java

// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] customTrackData = "airport".getBytes(StandardCharsets.UTF_8);
track.setMetadata(ByteBuffer.wrap(customTrackData));

Kotlin

// Set additional data on this track.
// For example, describe where you recorded the session.
val customTrackData: ByteArray = "airport".toByteArray()
track.setMetadata(ByteBuffer.wrap(customTrackData))

אופציונלי: הגדרת הטראק באמצעות סוג MIME

אם האפליקציה צריכה להיות תואמת לכלים חיצוניים, אפשר להגדיר טראק עם סוג MIME שמתאר את סוג הנתונים שמתועדים בטראק. אם לא תציינו סוג, הנתונים יסווגו בתור application/text. ARCore מתעלם מסוג MIME בקריאת נתונים.

Java

// Set a MIME type for compatibility with external tools.
track.setMimeType("text/csv");

Kotlin

// Set a MIME type for compatibility with external tools.
track.setMimeType("text/csv")

הקלטת נתיבי נתונים מותאמים אישית

כל נתוני הטראק בהתאמה אישית מתועדים ב-Frame. בסשנים של AR נעשה שימוש ב-session.update() כדי לקבל מסגרת. השעה שבה מקליטים נתונים בפריים היא אותו הזמן שבו הנתונים מוחזרים במהלך ההפעלה. לדוגמה: אם קוראים לפונקציה recordTrackData() עם הערך A ב-00:07:02, מקבלים את הערך A בסימן 00:07:02 כשהטראק יופעל.

כדי להקליט טראק נתונים מותאם אישית, ממירים את הנתונים ל-ByteBuffer ומפעילים את recordTrackData().

Java

// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
  Lamp lampProduct = Lamp.FLOOR; // a floor lamp
  // Convert the lamp data into a byte array.
  ByteBuffer lampData = ByteBuffer.wrap(new byte[] {(byte) lampProduct.ordinal()});
  frame.recordTrackData(trackUUID, lampData);
}

Kotlin

// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
  val lampProduct = Lamp.FLOOR // a floor lamp
  // Convert the lamp data into a byte array.
  val lampData = ByteBuffer.wrap(byteArrayOf(lampProduct.ordinal.toByte()))
  frame.recordTrackData(trackUUID, lampData)
}

השמעת טראקים של נתונים בהתאמה אישית

חילוץ נתונים מותאמים אישית מהקלטת סשן במהלך הפעלה.

אתחול הפעלה

אתחול הפעלה עם נתונים בהתאמה אישית זהה לאתחול הפעלה של הקלטה של סשן רגיל.

החזרת נתונים מותאמים אישית

קוראים לפונקציה getUpdatedTrackData() כדי לאחזר את הנתונים המותאמים אישית שהוקלטו במסגרת. אפשר לאחזר כמה נתוני טראקים מאותו פריים. לדוגמה, אם התקשרתם אל recordTrackData() פעמיים באותו פריים במהלך ההקלטה, תקבלו חזרה שני מופעים של TrackData במהלך ההפעלה.

Java

// Fetch the data recorded on a select frame and place it in a container object.
Collection<TrackData> trackDataList = frame.getUpdatedTrackData(trackUUID);

Kotlin

// Fetch the data recorded on a select frame and place it in a container object.
val trackDataList: Collection<TrackData> = frame.getUpdatedTrackData(trackUUID)

אחרי ש-TrackData נמצא באובייקט מאגר, מחלצים את הבייטים של הנתונים המותאמים אישית.

Java

// Extract the bytes of custom data from the list of track data.
for (TrackData trackData : trackDataList) {
  ByteBuffer bytes = trackData.getData();
  Lamp lamp = Lamp.values()[bytes.get()]; // this is the lamp!
}

Kotlin

// Extract the bytes of custom data from the list of track data.
for (trackData in trackDataList) {
  val bytes = trackData.data
  val lamp = Lamp.values()[bytes.get().toInt()] // this is the lamp!
}

מה השלב הבא?

  • לומדים איך לבנות אפליקציה משלכם בעזרת 'הקלטה' כדי להפעיל את הסרטון צריך לעבור בהקשה על הקלטה הפעלה של Codelab.