1. Trước khi bắt đầu
ARCore là khung của Google để tạo trải nghiệm thực tế tăng cường (AR) trên điện thoại thông minh. API Ngữ nghĩa cảnh và API Độ sâu không gian địa lý giúp trải nghiệm thực tế tăng cường của bạn hiểu được môi trường xung quanh người dùng.
Scene Semantics API sử dụng một mô hình học máy (ML) để phân tích hình ảnh từ camera và cung cấp hình ảnh gồm các pixel được gắn nhãn. Công nghệ này có thể phân biệt 11 nhãn ngoài trời khác nhau.
Geospatial Depth API kết hợp thông tin về độ sâu từ chuyển động và mọi cảm biến phần cứng đang hoạt động (chẳng hạn như cảm biến đo thời gian bay) với dữ liệu Streetscape Geometry API. Thiết bị này giúp cải thiện các lỗi trong quan sát độ sâu ở khoảng cách lên đến 65 mét.
Trong lớp học lập trình này, bạn sẽ tạo một ứng dụng thực tế tăng cường (AR) để trực quan hoá kết quả của API Ngữ nghĩa cảnh và API Độ sâu không gian địa lý.
Điều kiện tiên quyết
- Kiến thức cơ bản về AR
Kiến thức bạn sẽ học được
- Cách bật Scene Semantics API.
- Cách lấy và trực quan hoá hình ảnh ngữ nghĩa.
- Cách lấy và trực quan hoá hình ảnh độ tin cậy ngữ nghĩa.
- Cách xác định tỷ lệ phần trăm số pixel tương ứng với một nhãn nhất định.
- Cách thiết lập một dự án Google Cloud có thể sử dụng ARCore Geospatial API.
- Cách bật Geospatial Depth API.
- Cách trực quan hoá hình ảnh độ sâu.
Bạn cần có
- Một thiết bị Android được ARCore hỗ trợ, được kết nối với máy phát triển bằng cáp USB và được định cấu hình bằng tính năng Gỡ lỗi qua USB.
- Dịch vụ Google Play cho Thực tế tăng cường phiên bản 1.37 trở lên đã được cài đặt trên thiết bị phát triển Android.
- Android Studio đã được cài đặt và định cấu hình để tạo ứng dụng Android.
2. Thiết lập môi trường
Để giúp bạn bắt đầu sử dụng Geospatial API, chúng tôi đã cung cấp một dự án khởi đầu bao gồm những kiến thức cơ bản về dự án ARCore và một số hàm trợ giúp.
Để thiết lập dự án khởi đầu, hãy làm theo các bước sau:
- Mở Android Studio và làm theo một trong những cách sau:
- Nếu bạn đã mở một dự án, hãy nhấp vào File > New > Project from version control (Tệp > Mới > Dự án từ chế độ quản lý phiên bản).
- Nếu bạn thấy cửa sổ Welcome to Android Studio (Chào mừng bạn đến với Android Studio), hãy nhấp vào Get from VCS (Lấy trên VCS).
- Chọn Git rồi nhấn
https://github.com/google-ar/codelab-scene-semantics-geospatial-depth.git
để nhập dự án.
3. Trực quan hoá dữ liệu Scene Semantics API
Bật Scene Semantics API
Theo mặc định, Scene Semantics API bị tắt để tiết kiệm sức mạnh xử lý.
Để bật Scene Semantics API, hãy làm theo các bước sau:
- Trong tệp
CodelabActivity.kt
, hãy tìm dòng sau:// TODO: Enable the Scene Semantics API.
- Sau dòng đó, nếu thiết bị của bạn hỗ trợ, hãy bật Scene Semantics API trong cấu hình của phiên:
if (session.isSemanticModeSupported(Config.SemanticMode.ENABLED)) { semanticMode = Config.SemanticMode.ENABLED }
Lấy và trực quan hoá hình ảnh ngữ nghĩa
Hình ảnh ngữ nghĩa là kết quả của mô hình học máy ARCore, mô hình này sẽ chỉ định một Enum SemanticLabel
cho từng pixel trong nguồn cấp dữ liệu camera.
Để lấy một hình ảnh ngữ nghĩa và hiển thị hình ảnh đó trên màn hình, hãy làm theo các bước sau:
- Trong tệp
CodelabRenderer.kt
, hãy tìm dòng sau:// TODO: Obtain the semantic image for this frame.
- Sau dòng đó, hãy lấy một hình ảnh ngữ nghĩa:
Hình ảnh ngữ nghĩa được dùng trong lớpframe.acquireSemanticImage().use { image -> semanticRenderer.updateCameraSemanticsTexture(image) activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2) }
SemanticRenderer
để hiển thị trên màn hình. Bạn cập nhật biếnsemanticLabelAtCenter
để hiển thị nhãn ngữ nghĩa ở giữa màn hình trong khung hiển thị của ứng dụng. - Chạy ứng dụng và hướng camera vào nhiều đối tượng bên ngoài. Màn hình nhãn ngữ nghĩa sẽ thay đổi khi bạn nhìn vào các loại đối tượng khác nhau.
- Nhấn vào biểu tượng
Cài đặt để bật lớp phủ hình ảnh có độ tin cậy ngữ nghĩa.
Lấy và trực quan hoá hình ảnh độ tin cậy ngữ nghĩa
Hình ảnh độ tin cậy ngữ nghĩa cho biết mức độ tin cậy của ARCore đối với nhãn ngữ nghĩa tại pixel phù hợp.
Để lấy một hình ảnh ngữ nghĩa và hiển thị hình ảnh đó trên màn hình, hãy làm theo các bước sau:
- Trong tệp
CodelabRenderer.kt
, hãy tìm dòng sau:// TODO: Obtain the confidence image for this frame.
- Sau dòng này, hãy lấy một hình ảnh ngữ nghĩa:
Hình ảnh có độ tin cậy về ngữ nghĩa được dùng trong lớpframe.acquireSemanticConfidenceImage().use { image -> semanticRenderer.updateConfidenceSemanticsTexture(image) activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2) }
SemanticRenderer
để hiển thị trên màn hình. Bạn cập nhật biếnconfidenceAtCenter
để hiển thị nhãn ngữ nghĩa ở giữa màn hình trong khung hiển thị của ứng dụng. - Chạy ứng dụng và hướng camera vào nhiều đối tượng bên ngoài. Màn hình hiển thị độ tin cậy ngữ nghĩa sẽ thay đổi khi bạn nhìn vào các loại đối tượng khác nhau.
- Nhấn vào biểu tượng
Cài đặt để bật lớp phủ hình ảnh có độ tin cậy ngữ nghĩa.
Xác định mức độ phổ biến của một nhãn
Mức độ phổ biến của nhãn là tỷ lệ phần trăm của một hình ảnh ngữ nghĩa bằng với một nhãn nhất định. Ví dụ: nếu 26% hình ảnh có giá trị SemanticLabel.SKY
, thì giá trị mức độ phổ biến cho giá trị SemanticLabel.SKY
là 0.26f
.
Để lấy mức độ phổ biến của nhãn và hiển thị nhãn trên màn hình, hãy làm theo các bước sau:
- Trong tệp
CodelabRenderer.kt
, hãy tìm dòng sau:// TODO: Obtain the prevalence of the selected label for this frame.
- Sau dòng đó, hãy lấy tỷ lệ lưu hành cho nhãn đã chọn:
activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
- Chạy ứng dụng và hướng camera vào nhiều đối tượng bên ngoài. Giá trị phân số sẽ thay đổi khi bạn nhìn vào các loại đối tượng khác nhau. Nhấn vào
Cài đặt để thay đổi phần nhãn đang hiển thị. Ví dụ: hãy thử BUILDING và cố gắng lấp đầy khung hiển thị bằng một toà nhà để xem điều đó ảnh hưởng đến phân số như thế nào.
4. Trực quan hoá dữ liệu Depth API không gian địa lý
Geospatial Depth API cải thiện các chỉ số về độ sâu khi bạn bật Geospatial API và Streetscape Geometry API. Để sử dụng Geospatial Depth API bằng Kotlin và Android Studio, bạn cần có một dự án Google Cloud.
Thiết lập một dự án trên Google Cloud
ARCore Geospatial API kết nối với Google Cloud để cung cấp thông tin bản địa hoá từ Hệ thống định vị bằng hình ảnh (VPS) của Google ở những khu vực được Google Street View hỗ trợ.
Để sử dụng máy chủ này trong dự án của bạn, hãy làm theo các bước sau:
- Tạo một dự án trên Google Cloud.
- Trong trường Project name (Tên dự án), hãy nhập một tên thích hợp, chẳng hạn như
ARCore Geospatial API project
, rồi chọn một vị trí bất kỳ. - Nhấp vào Tạo.
- Trong Google Cloud Console, trên trang chọn dự án, hãy nhấp vào Tạo dự án.
- Nhấp vào đường liên kết sau để xem ARCore API cho dự án này rồi nhấp vào Bật:
- Tạo khoá API cho dự án của bạn:
- Trong phần API và dịch vụ, hãy chọn Thông tin xác thực.
- Nhấp vào Tạo thông tin xác thực rồi chọn Khoá API.
- Ghi lại khoá vì bạn sẽ cần đến khoá này sau.
Bạn đã tạo một dự án Google Cloud có uỷ quyền khoá API và bạn đã sẵn sàng sử dụng Geospatial API trong dự án mẫu.
Tích hợp khoá API với dự án Android Studio
Để liên kết khoá API từ Google Cloud với dự án của bạn, hãy làm theo các bước sau:
- Trong Android Studio, hãy nhấp vào app > src rồi nhấp đúp vào
AndroidManifest.xml
. - Tìm các mục
meta-data
sau đây:<meta-data android:name="com.google.android.ar.API_KEY" android:value="API_KEY" />
- Thay thế phần giữ chỗ
API_KEY
bằng khoá API mà bạn đã tạo trong dự án Google Cloud. Giá trị được lưu trữ trongcom.google.android.ar.API_KEY
cho phép ứng dụng này sử dụng Geospatial API.
Xác minh dự án của bạn
- Để xác minh dự án, hãy chạy ứng dụng trên thiết bị phát triển. Bạn sẽ thấy chế độ xem camera và thông tin gỡ lỗi không gian địa lý ở đầu màn hình.
Bật các cấu hình bắt buộc
Geospatial Depth API yêu cầu bạn bật 3 chế độ cài đặt trong cấu hình phiên của ứng dụng.
Để bật các tính năng này, hãy làm theo các bước sau:
- Trong tệp
CodelabRenderer.kt
, hãy tìm dòng sau:// TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
- Ở dòng tiếp theo, hãy thêm mã sau:
val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC) val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED) if (isDepthSupported && isGeospatialSupported) { // These three settings are needed to use Geospatial Depth. geospatialMode = Config.GeospatialMode.ENABLED streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED depthMode = Config.DepthMode.AUTOMATIC }
Trực quan hoá thông tin về độ sâu
- Chạy ứng dụng và ghé thăm một toà nhà trong khu vực của bạn.
- Sau khi hoàn tất quá trình Bản địa hoá không gian địa lý, hãy nhấn vào
Cài đặt rồi bật tính năng trực quan hoá độ sâu không gian địa lý.
- Xem toà nhà ở chế độ thực tế tăng cường và so sánh toà nhà đó với thông tin về độ sâu mà không có độ sâu không gian địa lý.
5. Kết luận
Xin chúc mừng! Bạn đã tạo một ứng dụng thực tế tăng cường có thể trực quan hoá ngữ nghĩa cảnh và độ sâu không gian địa lý!