HoloLens (generasi ke-1) dan Azure 307: Pembelajaran mesin
Catatan
Tutorial Mixed Reality Academy dirancang dengan HoloLens (generasi ke-1) dan Mixed Reality Immersive Headsets dalam pikiran. Dengan demikian, kami merasa penting untuk meninggalkan tutorial ini di tempat bagi pengembang yang masih mencari panduan dalam mengembangkan untuk perangkat tersebut. Tutorial ini tidak akan diperbarui dengan toolset atau interaksi terbaru yang digunakan untuk HoloLens 2. Mereka akan dipertahankan untuk terus bekerja pada perangkat yang didukung. Akan ada serangkaian tutorial baru yang akan diposting di masa depan yang akan menunjukkan cara mengembangkan untuk HoloLens 2. Pemberitahuan ini akan diperbarui dengan tautan ke tutorial tersebut ketika diposting.
Dalam kursus ini, Anda akan mempelajari cara menambahkan kemampuan Pembelajaran Mesin (ML) ke aplikasi realitas campuran menggunakan Azure Pembelajaran Mesin Studio (klasik).
Azure Pembelajaran Mesin Studio (klasik) adalah layanan Microsoft, yang menyediakan sejumlah besar algoritma pembelajaran mesin kepada pengembang, yang dapat membantu input data, output, persiapan, dan visualisasi. Dari komponen-komponen ini, kemudian dimungkinkan untuk mengembangkan eksperimen analitik prediktif, melakukan iterasi di atasnya, dan menggunakannya untuk melatih model Anda. Setelah pelatihan, Anda dapat membuat model Anda beroperasi dalam cloud Azure, sehingga kemudian dapat mencetak data baru. Untuk informasi selengkapnya, kunjungi halaman Azure Pembelajaran Mesin Studio (klasik).
Setelah menyelesaikan kursus ini, Anda akan memiliki aplikasi headset imersif realitas campuran, dan akan belajar bagaimana hal berikut:
- Berikan tabel data penjualan ke portal Azure Pembelajaran Mesin Studio (klasik), dan rancang algoritma untuk memprediksi penjualan item populer di masa mendatang.
- Buat Proyek Unity, yang dapat menerima dan menginterpretasikan data prediksi dari layanan ML.
- Tampilkan data predikasi secara visual dalam Proyek Unity, melalui penyediaan item penjualan paling populer, di rak.
Dalam aplikasi Anda, terserah Anda tentang bagaimana Anda akan mengintegrasikan hasilnya dengan desain Anda. Kursus ini dirancang untuk mengajari Anda cara mengintegrasikan Layanan Azure dengan Proyek Unity Anda. Ini adalah tugas Anda untuk menggunakan pengetahuan yang Anda peroleh dari kursus ini untuk meningkatkan aplikasi realitas campuran Anda.
Kursus ini adalah tutorial mandiri, yang tidak secara langsung melibatkan Mixed Reality Labs lainnya.
Dukungan perangkat
Kursus | HoloLens | Headset imersif |
---|---|---|
MR dan Azure 307: Pembelajaran mesin | ✔️ | ✔️ |
Catatan
Meskipun kursus ini terutama berfokus pada headset imersif Windows Mixed Reality (VR), Anda juga dapat menerapkan apa yang Anda pelajari dalam kursus ini ke Microsoft HoloLens. Saat mengikuti kursus, Anda akan melihat catatan tentang perubahan apa pun yang mungkin perlu Anda gunakan untuk mendukung HoloLens. Saat menggunakan HoloLens, Anda mungkin melihat beberapa gema selama pengambilan suara.
Prasyarat
Catatan
Tutorial ini dirancang untuk pengembang yang memiliki pengalaman dasar dengan Unity dan C#. Perlu diketahui juga bahwa prasyarat dan instruksi tertulis dalam dokumen ini mewakili apa yang telah diuji dan diverifikasi pada saat penulisan (Mei 2018). Anda bebas menggunakan perangkat lunak terbaru, seperti yang tercantum dalam artikel instal alat, meskipun tidak boleh diasumsikan bahwa informasi dalam kursus ini akan sangat cocok dengan apa yang akan Anda temukan di perangkat lunak yang lebih baru daripada apa yang tercantum di bawah ini.
Kami merekomendasikan perangkat keras dan perangkat lunak berikut untuk kursus ini:
- PC pengembangan, kompatibel dengan Windows Mixed Reality untuk pengembangan headset imersif (VR)
- Pembaruan Windows 10 Fall Creators (atau yang lebih baru) dengan mode Pengembang diaktifkan
- Windows 10 SDK terbaru
- Unity 2017.4
- Visual Studio 2017
- Headset Windows Mixed Reality immersive (VR) atau Microsoft HoloLens dengan mode Pengembang diaktifkan
- Akses internet untuk penyiapan Azure dan pengambilan data ML
Sebelum memulai
Untuk menghindari masalah saat membangun proyek ini, sangat disarankan agar Anda membuat proyek yang disebutkan dalam tutorial ini di folder root atau near-root (jalur folder panjang dapat menyebabkan masalah pada build-time).
Bab 1 - Penyiapan Akun Azure Storage
Untuk menggunakan Azure Translator API, Anda harus mengonfigurasi instans layanan untuk tersedia untuk aplikasi Anda.
Masuk ke Portal Microsoft Azure.
Catatan
Jika Anda belum memiliki akun Azure, Anda harus membuatnya. Jika Anda mengikuti tutorial ini dalam situasi ruang kelas atau lab, mintalah instruktur atau salah satu proktor untuk membantu menyiapkan akun baru Anda.
Setelah Anda masuk, klik Akun Penyimpanan di menu sebelah kiri.
Catatan
Kata Baru mungkin telah diganti dengan Buat sumber daya, di portal yang lebih baru.
Pada tab Akun Penyimpanan, klik Tambahkan.
Di panel Buat Akun Penyimpanan:
Sisipkan Nama untuk akun Anda, ketahuilah bidang ini hanya menerima angka, dan huruf kecil.
Untuk Model penyebaran, pilih Resource manager.
Untuk Jenis akun, pilih Penyimpanan (tujuan umum v1).
Dalam Performa, pilih Standar.
Untuk Replikasi pilih Penyimpanan baca-akses-geo-redundan (RA-GRS).
Biarkan Transfer aman diperlukan sebagai Dinonaktifkan.
Pilih Langganan.
Pilih Grup Sumber Daya atau buat yang baru. Grup sumber daya menyediakan cara untuk memantau, mengontrol akses, menyediakan, dan mengelola penagihan untuk kumpulan aset Azure. Disarankan untuk menyimpan semua layanan Azure yang terkait dengan satu proyek (misalnya seperti lab ini) di bawah grup sumber daya umum).
Jika Anda ingin membaca selengkapnya tentang Grup Sumber Daya Azure, silakan kunjungi artikel grup sumber daya.
Tentukan Lokasi untuk grup sumber daya Anda (jika Anda membuat Grup Sumber Daya baru). Lokasi idealnya akan berada di wilayah tempat aplikasi akan berjalan. Beberapa aset Azure hanya tersedia di wilayah tertentu.
Anda juga perlu mengonfirmasi bahwa Anda telah memahami Syarat dan Ketentuan yang diterapkan pada Layanan ini.
Setelah mengklik Buat, Anda harus menunggu layanan dibuat, ini mungkin memakan waktu satu menit.
Pemberitahuan akan muncul di portal setelah instans Layanan dibuat.
Bab 2 - Azure Pembelajaran Mesin Studio (klasik)
Untuk menggunakan Azure Pembelajaran Mesin, Anda harus mengonfigurasi instans layanan Pembelajaran Mesin agar tersedia untuk aplikasi Anda.
Di Portal Microsoft Azure, klik Baru di sudut kiri atas, dan cari Pembelajaran Mesin Studio Workspace, tekan Enter.
Halaman baru akan memberikan deskripsi layanan Pembelajaran Mesin Studio Workspace. Di kiri bawah perintah ini, klik tombol Buat , untuk membuat asosiasi dengan layanan ini.
Setelah Anda mengklik Buat, panel akan muncul di mana Anda perlu memberikan beberapa detail tentang layanan Pembelajaran Mesin Studio baru Anda:
Sisipkan nama Ruang Kerja yang Anda inginkan untuk instans layanan ini.
Pilih Langganan.
Pilih Grup Sumber Daya atau buat yang baru. Grup sumber daya menyediakan cara untuk memantau, mengontrol akses, menyediakan, dan mengelola penagihan untuk kumpulan aset Azure. Disarankan untuk menyimpan semua layanan Azure yang terkait dengan satu proyek (misalnya seperti lab ini) di bawah grup sumber daya umum).
Jika Anda ingin membaca selengkapnya tentang Grup Sumber Daya Azure, silakan kunjungi artikel grup sumber daya.
Tentukan Lokasi untuk grup sumber daya Anda (jika Anda membuat Grup Sumber Daya baru). Lokasi idealnya akan berada di wilayah tempat aplikasi akan berjalan. Beberapa aset Azure hanya tersedia di wilayah tertentu. Anda harus menggunakan grup sumber daya yang sama dengan yang Anda gunakan untuk membuat Azure Storage di Bab sebelumnya.
Untuk bagian Akun penyimpanan, klik Gunakan yang sudah ada, lalu klik menu dropdown, dan dari sana, klik Akun Penyimpanan yang Anda buat di Bab terakhir.
Pilih tingkat harga Ruang Kerja yang sesuai untuk Anda, dari menu dropdown.
Di dalam bagian Paket layanan web, klik Buat baru, lalu sisipkan nama untuk paket tersebut di bidang teks.
Dari bagian Tingkat harga paket layanan web, pilih tingkat harga pilihan Anda. Tingkat pengujian pengembangan yang disebut DEVTEST Standard harus tersedia untuk Anda tanpa biaya.
Anda juga perlu mengonfirmasi bahwa Anda telah memahami Syarat dan Ketentuan yang diterapkan pada Layanan ini.
Klik Buat.
Setelah mengklik Buat, Anda harus menunggu layanan dibuat, ini mungkin memakan waktu satu menit.
Pemberitahuan akan muncul di portal setelah instans Layanan dibuat.
Klik pemberitahuan untuk menjelajahi instans Layanan baru Anda.
Klik tombol Buka sumber daya di pemberitahuan untuk menjelajahi instans Layanan baru Anda.
Di halaman yang ditampilkan, di bawah bagian Tautan Tambahan, klik Luncurkan Pembelajaran Mesin Studio, yang akan mengarahkan browser Anda ke portal Pembelajaran Mesin Studio.
Gunakan tombol Masuk, di kanan atas atau di tengah, untuk masuk ke Pembelajaran Mesin Studio (klasik).
Bab 3 - Pembelajaran Mesin Studio (klasik): Penyiapan himpunan data
Salah satu cara kerja algoritma Pembelajaran Mesin adalah dengan menganalisis data yang ada dan kemudian mencoba memprediksi hasil di masa mendatang berdasarkan himpunan data yang ada. Ini umumnya berarti bahwa semakin banyak data yang ada yang Anda miliki, semakin baik algoritma akan memprediksi hasil di masa mendatang.
Tabel sampel disediakan untuk Anda, untuk kursus ini, yang disebut ProductsTableCSV dan dapat diunduh di sini.
Penting
File .zip di atas berisi ProductsTableCSV dan .unitypackage, yang akan Anda butuhkan di Bab 6. Paket ini juga disediakan dalam Bab tersebut, meskipun terpisah ke file csv.
Himpunan data sampel ini berisi catatan objek terlaris pada setiap jam setiap hari dalam setahun 2017.
Misalnya, pada hari ke-1 tahun 2017, pukul 13.00 (jam 13), barang terlaris adalah garam dan lada.
Tabel sampel ini berisi 9998 entri.
Kembali ke portal Pembelajaran Mesin Studio (klasik), dan tambahkan tabel ini sebagai Himpunan Data untuk ML Anda. Lakukan ini dengan mengklik tombol + Baru di sudut kiri bawah layar.
Bagian akan muncul dari bawah, dan di dalamnya ada panel navigasi di sebelah kiri. Klik Himpunan Data, lalu di sebelah kanannya, Dari File Lokal.
Unggah Himpunan Data baru dengan mengikuti langkah-langkah berikut:
Jendela unggahan akan muncul, tempat Anda dapat Menelusuri hard drive Anda untuk himpunan data baru.
Setelah dipilih, dan kembali ke jendela unggah, biarkan kotak centang tidak dicentang.
Di bidang teks di bawah ini, masukkan ProductsTableCSV.csv sebagai nama untuk himpunan data (meskipun harus ditambahkan secara otomatis).
Menggunakan menu dropdown untuk Jenis, pilih File CSV Generik dengan header (.csv).
Tekan tanda centang di kanan bawah jendela unggah, dan Himpunan Data Anda akan diunggah.
Bab 4 - The Pembelajaran Mesin Studio (klasik): Eksperimen
Sebelum Anda dapat membangun sistem pembelajaran mesin, Anda harus membangun eksperimen, untuk memvalidasi teori Anda tentang data Anda. Dengan hasilnya, Anda akan tahu apakah Anda membutuhkan lebih banyak data, atau jika tidak ada korelasi antara data dan kemungkinan hasil.
Untuk mulai membuat eksperimen:
Klik lagi pada tombol + Baru di kiri bawah halaman, lalu klik Eksperimen Eksperimen> Kosong.
Halaman baru akan ditampilkan dengan Eksperimen kosong:
Dari panel di sebelah kiri perluas Himpunan Data Tersimpan Himpunan> Data Saya dan seret ProductsTableCSV ke Kanvas Eksperimen.
Di panel di sebelah kiri, perluas Sampel Transformasi>Data dan Pisahkan. Lalu seret item Pisahkan Data ke Kanvas Eksperimen. Item Pisahkan Data akan membagi himpunan data menjadi dua bagian. Satu bagian yang akan Anda gunakan untuk melatih algoritma pembelajaran mesin. Bagian kedua akan digunakan untuk mengevaluasi akurasi algoritma yang dihasilkan.
Di panel kanan (saat item Pisahkan Data pada kanvas dipilih), edit Pecahan baris dalam himpunan data output pertama menjadi 0,7. Ini akan membagi data menjadi dua bagian, bagian pertama akan menjadi 70% dari data, dan bagian kedua adalah 30%. Untuk memastikan bahwa data dibagi secara acak, pastikan kotak centang Pemisahan acak tetap dicentang.
Seret koneksi dari dasar item ProductsTableCSV di kanvas ke bagian atas item Pisahkan Data. Ini akan menghubungkan item dan mengirim output himpunan data ProductsTableCSV (data) ke input Data Terpisah.
Di panel Eksperimen di sisi kiri, perluas Pembelajaran Mesin> Train. Seret item Latih Model ke kanvas Eksperimen. Kanvas Anda akan terlihat sama seperti di bawah ini.
Dari kiri bawah item Pisahkan Data seret koneksi ke kanan atas item Latih Model. Pemisahan 70% pertama dari himpunan data akan digunakan oleh Model Latih untuk melatih algoritma.
Pilih item Latih Model di kanvas, dan di panel Properti (di sisi kanan jendela browser Anda) klik tombol Luncurkan pemilih kolom.
Dalam produk jenis kotak teks lalu tekan Enter, produk akan diatur sebagai kolom untuk melatih prediksi. Setelah ini, klik centang di sudut kanan bawah untuk menutup dialog pemilihan.
Anda akan melatih algoritma Regresi Logistik Multikelas untuk memprediksi produk yang paling banyak dijual berdasarkan jam dalam sehari dan tanggal. Namun, di luar cakupan dokumen ini untuk menjelaskan detail algoritma berbeda yang disediakan oleh studio Azure Pembelajaran Mesin, Anda dapat mengetahui lebih lanjut dari Pembelajaran Mesin Algoritma Cheat Sheet
Dari panel item eksperimen di sebelah kiri, perluas Pembelajaran Mesin> Initialize Model>Classification, dan seret item Regresi Logistik Multikelas ke kanvas eksperimen.
Sambungkan output, dari bagian bawah Regresi Logistik Multikelas, ke input kiri atas item Latih Model .
Dalam daftar item eksperimen di panel di sebelah kiri, perluas Pembelajaran Mesin> Score, dan seret item Model Skor ke kanvas.
Sambungkan output, dari bagian bawah Latih Model, ke input kiri atas Model Skor.
Sambungkan output kanan bawah dari Pisahkan Data, ke input kanan atas item Model Skor.
Dalam daftar item Eksperimen di panel di sebelah kiri, perluas Pembelajaran Mesin> Evaluate, dan seret item Evaluasi Model ke kanvas.
Sambungkan output dari Model Skor ke input kiri atas Model Evaluasi.
Anda telah membangun Eksperimen Pembelajaran Mesin pertama Anda. Anda sekarang dapat menyimpan dan menjalankan eksperimen. Di menu di bagian bawah halaman, klik tombol Simpan untuk menyimpan eksperimen Anda lalu klik Jalankan untuk memulai eksperimen.
Anda dapat melihat status eksperimen di kanan atas kanvas. Tunggu beberapa saat hingga eksperimen selesai.
Jika Anda memiliki himpunan data besar (dunia nyata) kemungkinan eksperimen dapat memakan waktu berjam-jam untuk dijalankan.
Klik kanan pada item Evaluasi Model di kanvas dan dari menu konteks arahkan mouse ke atas Hasil Evaluasi, lalu pilih Visualisasikan.
Hasil evaluasi akan ditampilkan yang menunjukkan hasil yang diprediksi versus hasil aktual. Ini menggunakan 30% dari himpunan data asli, yang dibagi sebelumnya, untuk mengevaluasi model. Anda dapat melihat hasilnya tidak bagus, idealnya Anda akan memiliki angka tertinggi di setiap baris menjadi item yang disorot dalam kolom.
Tutup Hasil.
Untuk menggunakan model Pembelajaran Mesin yang baru dilatih, Anda perlu mengeksposnya sebagai Layanan Web. Untuk melakukan ini, klik item menu Siapkan Layanan Web di menu di bagian bawah halaman, dan klik Layanan Web Prediktif.
Tab baru akan dibuat, dan model latih digabungkan untuk membuat layanan web baru.
Di menu di bagian bawah halaman klik Simpan, lalu klik Jalankan. Anda akan melihat status diperbarui di sudut kanan atas kanvas eksperimen.
Setelah selesai berjalan, tombol Sebarkan Layanan Web akan muncul di bagian bawah halaman. Anda siap untuk menyebarkan layanan web. Klik Sebarkan Layanan Web (Klasik) di menu di bagian bawah halaman.
Browser Anda mungkin meminta untuk mengizinkan pop-up, yang harus Anda izinkan, meskipun Anda mungkin perlu menekan Sebarkan Layanan Web lagi, jika halaman penyebaran tidak ditampilkan.
Setelah Eksperimen dibuat, Anda akan diarahkan ke halaman Dasbor tempat Kunci API Anda akan ditampilkan. Salin ke notepad untuk saat ini, Anda akan segera membutuhkannya dalam kode Anda. Setelah Anda mencatat Kunci API Anda, klik tombol REQUEST/RESPONSE di bagian Titik Akhir Default di bawah Kunci.
Catatan
Jika Anda mengklik Uji di halaman ini, Anda akan dapat memasukkan data input dan melihat output. Masukkan hari dan jam. Biarkan entri produk kosong. Lalu klik tombol Konfirmasi . Output di bagian bawah halaman akan menunjukkan JSON yang mewakili kemungkinan setiap produk menjadi pilihan.
Halaman web baru akan terbuka, menampilkan instruksi dan beberapa contoh tentang struktur Permintaan yang diperlukan oleh Pembelajaran Mesin Studio (klasik). Salin URI Permintaan yang ditampilkan di halaman ini, ke notepad Anda.
Anda sekarang telah membangun sistem pembelajaran mesin yang menyediakan produk yang paling mungkin dijual berdasarkan data pembelian historis, berkorelasi dengan waktu hari dan hari dalam setahun.
Untuk memanggil layanan web, Anda memerlukan URL untuk titik akhir layanan dan Kunci API untuk layanan tersebut. Klik tab Konsumsi , dari menu atas.
Halaman Info Konsumsi akan menampilkan informasi yang Anda perlukan untuk memanggil layanan web dari kode Anda. Ambil salinan Kunci Primer dan URL Permintaan-Respons . Anda akan membutuhkannya di Bab berikutnya.
Bab 5 - Menyiapkan Proyek Unity
Siapkan dan uji Mixed Reality Immersive Headset Anda.
Catatan
Anda tidak akan memerlukan Pengontrol Gerakan untuk kursus ini. Jika Anda memerlukan dukungan untuk menyiapkan Immersive Headset, silakan klik DI SINI.
Buka Unity dan buat Proyek Unity baru yang disebut MR_MachineLearning. Pastikan jenis proyek diatur ke 3D.
Dengan Unity terbuka, ada baiknya memeriksa Editor Skrip default diatur ke Visual Studio. Buka Edit>Preferensi lalu dari jendela baru, navigasikan ke Alat Eksternal. Ubah Editor Skrip Eksternal ke Visual Studio 2017. Tutup jendela Preferensi .
Selanjutnya, buka Pengaturan Build File>dan alihkan platform ke Platform Windows Universal, dengan mengklik tombol Beralih Platform.
Pastikan juga bahwa:
Perangkat Target diatur ke Perangkat Apa Pun.
Untuk Microsoft HoloLens, atur Perangkat Target ke HoloLens.
Jenis Build diatur ke D3D.
SDK diatur ke Terbaru diinstal.
Versi Visual Studio diatur ke Terbaru yang terinstal.
Build and Run diatur ke Komputer Lokal.
Jangan khawatir tentang menyiapkan Adegan sekarang, karena ini disediakan nanti.
Pengaturan yang tersisa harus dibiarkan sebagai default untuk saat ini.
Di jendela Pengaturan Build, klik tombol Pengaturan Pemutar, ini akan membuka panel terkait di ruang tempat Pemeriksa berada.
Di panel ini, beberapa pengaturan perlu diverifikasi:
Di tab Pengaturan Lainnya:
Versi Runtime Pembuatan Skrip harus Eksperimental (Setara.NET 4.6)
Scripting Backend harus .NET
Tingkat Kompatibilitas API harus .NET 4.6
Dalam tab Pengaturan Penerbitan, di bawah Kemampuan, periksa:
InternetClient
Selanjutnya di bawah panel, di Pengaturan XR (ditemukan di bawah Pengaturan Penerbitan), centang Realitas Virtual yang Didukung, pastikan Windows Mixed Reality SDK ditambahkan
Kembali ke Pengaturan Build Proyek Unity C# tidak lagi berwarna abu-abu; centang kotak di samping ini.
Tutup jendela Pengaturan Build.
Simpan Proyek Anda (PROYEK PENYIMPANAN FILE>).
Bab 6 - Mengimpor Paket Unity MLProducts
Untuk kursus ini, Anda harus mengunduh Paket Aset Unity yang disebut Azure-MR-307.unitypackage. Paket ini dilengkapi dengan adegan, dengan semua objek di bawaan itu, sehingga Anda dapat fokus untuk membuatnya berfungsi. Skrip ShelfKeeper disediakan, meskipun hanya menyimpan variabel publik, untuk tujuan struktur penyiapan adegan. Anda harus melakukan semua bagian lainnya.
Untuk mengimpor paket ini:
Dengan dasbor Unity di depan Anda, klik Aset di menu di bagian atas layar, lalu klik Impor Paket, Paket Kustom.
Gunakan pemilih file untuk memilih paket azure-MR-307.unitypackage dan klik Buka.
Daftar komponen untuk aset ini akan ditampilkan kepada Anda. Konfirmasi impor dengan mengklik Impor.
Setelah selesai mengimpor, Anda akan melihat bahwa beberapa folder baru telah muncul di Panel Proyek Unity Anda. Itulah model 3D dan bahan masing-masing yang merupakan bagian dari adegan yang telah dibuat sebelumnya yang akan Anda kerjakan. Anda akan menulis sebagian besar kode dalam kursus ini.
Di dalam folder Panel Proyek, klik folder Adegan dan klik dua kali pada adegan di dalamnya (disebut MR_MachineLearningScene). Adegan akan terbuka (lihat gambar di bawah). Jika berlian merah hilang, cukup klik tombol Gizmos , di kanan atas Panel Game.
Bab 7 - Memeriksa DLL di Unity
Untuk memanfaatkan penggunaan pustaka JSON (digunakan untuk serialisasi dan deserialisasi), DLL Newtonsoft telah diimplementasikan dengan paket yang Anda bawa. Pustaka harus memiliki konfigurasi yang benar, meskipun perlu diperiksa (terutama jika Anda mengalami masalah dengan kode tidak berfungsi).
Untuk melakukannya:
Klik kiri pada file Newtonsoft di dalam folder Plugin dan lihat panel Inspektur. Pastikan Platform apa pun dicentang. Buka tab UWP dan pastikan juga Jangan proses dicentang.
Bab 8 - Buat kelas ShelfKeeper
Kelas ShelfKeeper menghosting metode yang mengontrol UI dan produk yang muncul di adegan.
Sebagai bagian dari paket yang diimpor, Anda akan diberikan kelas ini, meskipun tidak lengkap. Sekarang saatnya untuk menyelesaikan kelas tersebut:
Klik dua kali pada skrip ShelfKeeper , di dalam folder Skrip , untuk membukanya dengan Visual Studio 2017.
Ganti semua kode yang ada dalam skrip dengan kode berikut, yang mengatur waktu dan tanggal dan memiliki metode untuk menampilkan produk.
using UnityEngine; public class ShelfKeeper : MonoBehaviour { /// <summary> /// Provides this class Singleton-like behavior /// </summary> public static ShelfKeeper instance; /// <summary> /// Unity Inspector accessible Reference to the Text Mesh object needed for data /// </summary> public TextMesh dateText; /// <summary> /// Unity Inspector accessible Reference to the Text Mesh object needed for time /// </summary> public TextMesh timeText; /// <summary> /// Provides references to the spawn locations for the products prefabs /// </summary> public Transform[] spawnPoint; private void Awake() { instance = this; } /// <summary> /// Set the text of the date in the scene /// </summary> public void SetDate(string day, string month) { dateText.text = day + " " + month; } /// <summary> /// Set the text of the time in the scene /// </summary> public void SetTime(string hour) { timeText.text = hour + ":00"; } /// <summary> /// Spawn a product on the shelf by providing the name and selling grade /// </summary> /// <param name="name"></param> /// <param name="sellingGrade">0 being the best seller</param> public void SpawnProduct(string name, int sellingGrade) { Instantiate(Resources.Load(name), spawnPoint[sellingGrade].transform.position, spawnPoint[sellingGrade].transform.rotation); } }
Pastikan untuk menyimpan perubahan Anda di Visual Studio sebelum kembali ke Unity.
Kembali ke Unity Editor, periksa apakah kelas ShelfKeeper terlihat seperti di bawah ini:
Penting
Jika skrip Anda tidak memiliki target referensi (yaitu Tanggal (Jala Teks)), cukup seret objek yang sesuai dari Panel Hierarki, ke bidang target. Lihat di bawah ini untuk penjelasan, jika diperlukan:
Buka array Spawn Point dalam skrip komponen ShelfKeeper dengan mengklik kiri. Sub-bagian akan muncul yang disebut Ukuran, yang menunjukkan ukuran array. Ketik 3 ke dalam kotak teks di samping Ukuran dan tekan Enter, dan tiga slot akan dibuat di bawahnya.
Dalam Hierarki perluas objek Tampilan Waktu (dengan mengklik kiri panah di sampingnya). Selanjutnya klik Kamera Utama dari dalam Hierarki, sehingga Pemeriksa menampilkan informasinya.
Pilih Kamera Utama di Panel Hierarki. Seret objek Tanggal dan Waktu dari Panel Hierarki ke slot Teks Tanggal dan Teks Waktu dalam Pemeriksa Kamera Utama di komponen ShelfKeeper.
Seret Titik Spawn dari Panel Hierarki (di bawah objek Shelf) ke target referensi 3 Element di bawah array Spawn Point, seperti yang ditunjukkan pada gambar.
Bab 9 - Buat kelas ProductPrediction
Kelas berikutnya yang akan Anda buat adalah kelas ProductPrediction .
Kelas ini bertanggung jawab untuk:
Mengkueri instans Pembelajaran Mesin Service, memberikan tanggal dan waktu saat ini.
Deserialisasi respons JSON ke dalam data yang dapat digunakan.
Menginterpretasikan data, mengambil 3 produk yang direkomendasikan.
Memanggil metode kelas ShelfKeeper untuk menampilkan data di Adegan.
Untuk membuat kelas ini:
Buka folder Skrip, di Panel Proyek.
Klik kanan di dalam folder, Buat>Skrip C#. Panggil skrip ProductPrediction.
Klik dua kali pada skrip ProductPrediction baru untuk membukanya dengan Visual Studio 2017.
Jika dialog Modifikasi File Terdeteksi muncul, klik *Muat Ulang Solusi.
Tambahkan namespace berikut ke bagian atas kelas ProductPrediction:
using System; using System.Collections.Generic; using UnityEngine; using System.Linq; using Newtonsoft.Json; using UnityEngine.Networking; using System.Runtime.Serialization; using System.Collections;
Di dalam kelas ProductPrediction sisipkan dua objek berikut yang terdiri dari sejumlah kelas berlapis. Kelas-kelas ini digunakan untuk menserialisasikan dan mendeserialisasi JSON untuk Layanan Pembelajaran Mesin.
/// <summary> /// This object represents the Prediction request /// It host the day of the year and hour of the day /// The product must be left blank when serialising /// </summary> public class RootObject { public Inputs Inputs { get; set; } } public class Inputs { public Input1 input1 { get; set; } } public class Input1 { public List<string> ColumnNames { get; set; } public List<List<string>> Values { get; set; } }
/// <summary> /// This object containing the deserialised Prediction result /// It host the list of the products /// and the likelihood of them being sold at current date and time /// </summary> public class Prediction { public Results Results { get; set; } } public class Results { public Output1 output1; } public class Output1 { public string type; public Value value; } public class Value { public List<string> ColumnNames { get; set; } public List<List<string>> Values { get; set; } }
Kemudian tambahkan variabel berikut di atas kode sebelumnya (sehingga kode terkait JSON berada di bagian bawah skrip, di bawah semua kode lain, dan keluar dari jalan):
/// <summary> /// The 'Primary Key' from your Machine Learning Portal /// </summary> private string authKey = "-- Insert your service authentication key here --"; /// <summary> /// The 'Request-Response' Service Endpoint from your Machine Learning Portal /// </summary> private string serviceEndpoint = "-- Insert your service endpoint here --"; /// <summary> /// The Hour as set in Windows /// </summary> private string thisHour; /// <summary> /// The Day, as set in Windows /// </summary> private string thisDay; /// <summary> /// The Month, as set in Windows /// </summary> private string thisMonth; /// <summary> /// The Numeric Day from current Date Conversion /// </summary> private string dayOfTheYear; /// <summary> /// Dictionary for holding the first (or default) provided prediction /// from the Machine Learning Experiment /// </summary> private Dictionary<string, string> predictionDictionary; /// <summary> /// List for holding product prediction with name and scores /// </summary> private List<KeyValuePair<string, double>> keyValueList;
Penting
Pastikan untuk menyisipkan kunci utama dan titik akhir permintaan-respons, dari portal Pembelajaran Mesin, ke dalam variabel di sini. Gambar di bawah ini menunjukkan dari mana Anda akan mengambil kunci dan titik akhir.
Sisipkan kode ini dalam metode Start(). Metode Start() dipanggil ketika kelas menginisialisasi:
void Start() { // Call to get the current date and time as set in Windows GetTodayDateAndTime(); // Call to set the HOUR in the UI ShelfKeeper.instance.SetTime(thisHour); // Call to set the DATE in the UI ShelfKeeper.instance.SetDate(thisDay, thisMonth); // Run the method to Get Predication from Azure Machine Learning StartCoroutine(GetPrediction(thisHour, dayOfTheYear)); }
Berikut ini adalah metode yang mengumpulkan tanggal dan waktu dari Windows dan mengonversinya menjadi format yang dapat digunakan eksperimen Pembelajaran Mesin kami untuk membandingkan dengan data yang disimpan dalam tabel.
/// <summary> /// Get current date and hour /// </summary> private void GetTodayDateAndTime() { // Get today date and time DateTime todayDate = DateTime.Now; // Extrapolate the HOUR thisHour = todayDate.Hour.ToString(); // Extrapolate the DATE thisDay = todayDate.Day.ToString(); thisMonth = todayDate.ToString("MMM"); // Extrapolate the day of the year dayOfTheYear = todayDate.DayOfYear.ToString(); }
Anda dapat menghapus metode Update() karena kelas ini tidak akan menggunakannya.
Tambahkan metode berikut yang akan mengomunikasikan tanggal dan waktu saat ini ke titik akhir Pembelajaran Mesin dan menerima respons dalam format JSON.
private IEnumerator GetPrediction(string timeOfDay, string dayOfYear) { // Populate the request object // Using current day of the year and hour of the day RootObject ro = new RootObject { Inputs = new Inputs { input1 = new Input1 { ColumnNames = new List<string> { "day", "hour", "product" }, Values = new List<List<string>>() } } }; List<string> l = new List<string> { dayOfYear, timeOfDay, "" }; ro.Inputs.input1.Values.Add(l); Debug.LogFormat("Score request built"); // Serialize the request string json = JsonConvert.SerializeObject(ro); using (UnityWebRequest www = UnityWebRequest.Post(serviceEndpoint, "POST")) { byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(json); www.uploadHandler = new UploadHandlerRaw(jsonToSend); www.downloadHandler = new DownloadHandlerBuffer(); www.SetRequestHeader("Authorization", "Bearer " + authKey); www.SetRequestHeader("Content-Type", "application/json"); www.SetRequestHeader("Accept", "application/json"); yield return www.SendWebRequest(); string response = www.downloadHandler.text; // Deserialize the response DataContractSerializer serializer; serializer = new DataContractSerializer(typeof(string)); DeserialiseJsonResponse(response); } }
Tambahkan metode berikut, yang bertanggung jawab untuk mendeserialisasi respons JSON, dan mengkomunikasikan hasil deserialisasi ke kelas ShelfKeeper . Hasil ini akan menjadi nama dari tiga item yang diprediksi paling banyak dijual pada tanggal dan waktu saat ini. Masukkan kode di bawah ini ke kelas ProductPrediction , di bawah metode sebelumnya.
/// <summary> /// Deserialize the response received from the Machine Learning portal /// </summary> public void DeserialiseJsonResponse(string jsonResponse) { // Deserialize JSON Prediction prediction = JsonConvert.DeserializeObject<Prediction>(jsonResponse); predictionDictionary = new Dictionary<string, string>(); for (int i = 0; i < prediction.Results.output1.value.ColumnNames.Count; i++) { if (prediction.Results.output1.value.Values[0][i] != null) { predictionDictionary.Add(prediction.Results.output1.value.ColumnNames[i], prediction.Results.output1.value.Values[0][i]); } } keyValueList = new List<KeyValuePair<string, double>>(); // Strip all non-results, by adding only items of interest to the scoreList for (int i = 0; i < predictionDictionary.Count; i++) { KeyValuePair<string, string> pair = predictionDictionary.ElementAt(i); if (pair.Key.StartsWith("Scored Probabilities")) { // Parse string as double then simplify the string key so to only have the item name double scorefloat = 0f; double.TryParse(pair.Value, out scorefloat); string simplifiedName = pair.Key.Replace("\"", "").Replace("Scored Probabilities for Class", "").Trim(); keyValueList.Add(new KeyValuePair<string, double>(simplifiedName, scorefloat)); } } // Sort Predictions (results will be lowest to highest) keyValueList.Sort((x, y) => y.Value.CompareTo(x.Value)); // Spawn the top three items, from the keyValueList, which we have sorted for (int i = 0; i < 3; i++) { ShelfKeeper.instance.SpawnProduct(keyValueList[i].Key, i); } // Clear lists in case of reuse keyValueList.Clear(); predictionDictionary.Clear(); }
Simpan Visual Studio dan kembali ke Unity.
Seret skrip kelas ProductPrediction dari folder Skrip, ke objek Kamera Utama.
Simpan adegan anda dan proyek File>Save Scene/File>Save Project.
Bab 10 - Bangun Solusi UWP
Sekarang saatnya untuk membangun proyek Anda sebagai solusi UWP, sehingga dapat berjalan sebagai aplikasi mandiri.
Untuk Membangun:
Simpan adegan saat ini dengan mengklik Simpan Adegan File>.
Buka Pengaturan Penyusunan File>
Centang kotak yang disebut Unity C# Projects (ini penting karena akan memungkinkan Anda mengedit kelas setelah build selesai).
Klik Tambahkan Adegan Terbuka,
Klik Bangun.
Anda akan diminta untuk memilih folder tempat Anda ingin membangun Solusi.
Buat folder BUILDS dan di dalam folder tersebut buat folder lain dengan nama pilihan Anda yang sesuai.
Klik folder baru Anda lalu klik Pilih Folder, untuk memulai build di lokasi tersebut.
Setelah Unity selesai membangun (mungkin perlu waktu), Unity akan membuka jendela File Explorer di lokasi build Anda (periksa bilah tugas Anda, karena mungkin tidak selalu muncul di atas jendela Anda, tetapi akan memberi tahu Anda tentang penambahan jendela baru).
Bab 11 - Sebarkan Aplikasi Anda
Untuk menyebarkan aplikasi Anda:
Navigasi ke build Unity baru Anda ( folder Aplikasi ) dan buka file solusi dengan Visual Studio.
Dengan Visual Studio terbuka, Anda perlu Memulihkan Paket NuGet, yang dapat dilakukan melalui mengklik kanan solusi MachineLearningLab_Build Anda, dari Penjelajah Solusi (ditemukan di sebelah kanan Visual Studio), lalu mengklik Pulihkan Paket NuGet:
Di Konfigurasi Solusi pilih Debug.
Di Platform Solusi, pilih x86, Komputer Lokal.
Untuk Microsoft HoloLens, Anda mungkin merasa lebih mudah untuk mengatur ini ke Komputer Jarak Jauh, sehingga Anda tidak tertambat ke komputer Anda. Meskipun, Anda juga harus melakukan hal berikut:
- Ketahui Alamat IP HoloLens Anda, yang dapat ditemukan dalam Jaringan Pengaturan > & Opsi Tingkat Lanjut Wi-Fi > Internet>; IPv4 adalah alamat yang harus Anda gunakan.
- Pastikan Mode Pengembang Aktif; ditemukan di Pengaturan > Pembaruan & Keamanan > Untuk pengembang.
Buka menu Build dan klik Sebarkan Solusi untuk memuat samping aplikasi ke PC Anda.
Aplikasi Anda sekarang akan muncul dalam daftar aplikasi yang diinstal, siap untuk diluncurkan.
Saat Anda menjalankan aplikasi Mixed Reality, Anda akan melihat bangku yang disiapkan di adegan Unity Anda, dan dari inisialisasi, data yang Anda siapkan dalam Azure akan diambil. Data akan dideserialisasi dalam aplikasi Anda, dan tiga hasil teratas untuk tanggal dan waktu Anda saat ini akan disediakan secara visual, karena tiga model di bangku.
Aplikasi Pembelajaran Mesin Anda yang sudah selesai
Selamat, Anda membangun aplikasi realitas campuran yang memanfaatkan Azure Pembelajaran Mesin untuk membuat prediksi data dan menampilkannya di adegan Anda.
Latihan
Latihan 1
Bereksperimenlah dengan urutan pengurutan aplikasi Anda dan buat tiga prediksi bawah muncul di rak, karena data ini berpotensi berguna juga.
Latihan 2
Menggunakan Tabel Azure mengisi tabel baru dengan informasi cuaca dan membuat eksperimen baru menggunakan data.