Tutorial: Menerapkan model pembelajaran mesin di Azure Functions dengan Python dan TensorFlow
Dalam artikel ini, Anda mempelajari cara menggunakan Python, TensorFlow, dan Azure Functions dengan model pembelajaran mesin untuk mengklasifikasikan gambar berdasarkan kontennya. Karena Anda melakukan semua bekerja secara lokal dan tidak membuat sumber daya Azure di cloud, tidak ada biaya untuk menyelesaikan tutorial ini.
- Menginisialisasi lingkungan lokal untuk mengembangkan Azure Functions di Python.
- Impor model pembelajaran mesin TensorFlow kustom ke dalam aplikasi fungsi.
- Buat API HTTP tanpa server untuk mengklasifikasikan gambar berisi anjing atau kucing.
- Mengkonsumsi API dari aplikasi web.
Prasyarat
- Akun Azure dengan langganan aktif. Membuat akun secara gratis.
- Python 3.7.4. (Python 3.7.4 dan Python 3.6.x diverifikasi dengan Azure Functions; Python 3.8 dan versi yang lebih baru belum didukung.)
- Azure Functions Core Tools
- Editor kode seperti Visual Studio Code
Pemeriksaan prasyarat
- Di terminal atau jendela perintah, jalankan
func --version
untuk memeriksa apakah versi Azure Functions Core Tools adalah 2.7.1846 atau lebih baru. - Jalankan
python --version
(Linux/macOS) ataupy --version
(Windows) untuk memeriksa laporan versi Python Anda 3.7.x.
Mengkloning repositori tutorial
Di terminal atau jendela perintah, kloning repositori berikut menggunakan Git:
git clone https://github.com/Azure-Samples/functions-python-tensorflow-tutorial.git
Navigasi ke folder dan periksa isinya.
cd functions-python-tensorflow-tutorial
- mulai adalah folder aktif Anda untuk tutorial.
- akhir adalah hasil akhir dan implementasi penuh untuk referensi Anda.
- sumber daya berisi model pembelajaran mesin dan pustaka pembantu.
- frontend adalah situs web yang memanggil aplikasi fungsi.
Membuat dan mengaktifkan lingkungan virtual Python
Navigasi ke folder mulai dan jalankan perintah berikut untuk membuat dan mengaktifkan lingkungan virtual bernama .venv
. Pastikan untuk menggunakan Python 3.7 yang didukung oleh Azure Functions.
cd start
python -m venv .venv
source .venv/bin/activate
Jika Python tidak memasang paket venv pada distribusi Linux Anda, jalankan perintah berikut:
sudo apt-get install python3-venv
Anda menjalankan semua perintah berikutnya di lingkungan virtual yang diaktifkan ini. (Untuk keluar dari lingkungan virtual, jalankan deactivate
.)
Membuat proyek fungsi lokal
Di Azure Functions, proyek fungsi adalah kontainer untuk satu atau beberapa fungsi individual yang masing-masing merespons pemicu tertentu. Semua fungsi dalam proyek memiliki konfigurasi lokal dan hosting yang sama. Di bagian ini, Anda membuat proyek fungsi yang berisi satu fungsi boilerplate bernama classify
yang menyediakan titik akhir HTTP. Anda menambahkan kode yang lebih spesifik di bagian yang lebih baru.
Di folder mulai, gunakan Azure Functions Core Tools untuk menginisialisasi aplikasi fungsi Python:
func init --worker-runtime python
Setelah inisialisasi, folder start berisi berbagai file untuk proyek inif, termasuk file konfigurasi bernama local.settings.json dan host.json. Karena local.settings.json dapat berisi rahasia yang diunduh dari Azure, file dikecualikan dari kontrol sumber secara default dalam file .gitignore.
Tip
Karena proyek fungsi terikat dengan runtime tertentu, semua fungsi dalam proyek harus ditulis dengan bahasa yang sama.
Tambahkan fungsi ke proyek Anda dengan menggunakan perintah berikut, di mana argumen
--name
adalah nama unik fungsi Anda dan argumen--template
menentukan pemicu fungsi.func new
membuat subfolder yang cocok dengan nama fungsi yang berisi file kode yang sesuai dengan bahasa yang dipilih proyek dan file konfigurasi bernama function.json.func new --name classify --template "HTTP trigger"
Perintah ini membuat folder yang cocok dengan nama fungsi, mengklasifikasikan. Di dalam folder tersebut, terdapat dua file: __init__.py, yang berisi fungsi kode, dan function.json, yang menggambarkan pemicu fungsi serta pengikatan input dan outputnya. Untuk detail tentang konten file-file ini, lihat Model pemrograman di panduan pengembang Python.
Menjalankan fungsi secara lokal
Mulai fungsi dengan memulai host runtime Azure Functions lokal di folder mulai:
func start
Setelah Anda melihat titik akhir
classify
muncul dalam output, navigasi ke URL,http://localhost:7071/api/classify?name=Azure
. Pesan "Halo Azure!" akan muncul pada output.Gunakan Ctrl-C untuk menghentikan host.
Mengimpor model TensorFlow dan menambahkan kode pembantu
Untuk memodifikasi fungsi classify
untuk mengklasifikasikan gambar berdasarkan kontennya, Anda menggunakan model TensorFlow bawaan yang dilatih dan diekspor dari Azure Custom Vision Service. Model, yang berada dalam folder sumber daya sampel yang Anda kloning sebelumnya, mengklasifikasikan gambar berdasarkan apakah berisi anjing atau kucing. Anda kemudian menambahkan beberapa kode dan dependensi pembantu ke proyek Anda.
Untuk membangun model Anda sendiri menggunakan tingkat gratis Custom Vision Service, ikuti instruksi dalam repositori proyek sampel.
Tip
Jika Anda ingin menghosting model TensorFlow yang independen dari aplikasi fungsi, Anda dapat memasang berbagi file yang berisi model Anda ke aplikasi fungsi Linux Anda. Untuk mempelajari selengkapnya, lihat Memasang berbagi file ke aplikasi fungsi Python menggunakan Azure CLI.
Di folder mulai, jalankan perintah berikut untuk menyalin file model ke folder klasifikasi. Pastikan untuk menyertakan
\*
dalam perintah.cp ../resources/model/* classify
Verifikasi bahwa folder klasifikasi berisi file bernama model.pb dan labels.txt. Jika tidak, periksa apakah Anda menjalankan perintah di folder mulai.
Di folder mulai, jalankan perintah berikut ini untuk menyalin file dengan kode pembantu ke dalam folder klasifikasi:
cp ../resources/predict.py classify
Verifikasi bahwa folder klasifikasi sekarang berisi file bernama predict.py.
Buka start/requirements.txt di editor teks dan tambahkan dependensi berikut yang diperlukan oleh kode pembantu:
tensorflow==1.14 Pillow requests
Simpan requirements.txt.
Instal dependensi dengan menjalankan perintah berikut ini di folder mulai. Penginstalan mungkin memakan waktu beberapa menit, selama waktu tersebut Anda dapat melanjutkan dengan memodifikasi fungsi di bagian berikutnya.
pip install --no-cache-dir -r requirements.txt
Di Windows, Anda mungkin mengalami kesalahan, "Tidak dapat menginstal paket karena EnvironmentError: [Errno 2] Tidak ada file atau direktori seperti itu:" diikuti dengan nama jalur panjang ke file seperti sharded_mutable_dense_hashtable.cpython-37.pyc. Biasanya, kesalahan ini terjadi karena kedalaman jalur folder menjadi terlalu panjang. Dalam hal ini, atur kunci registri
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabled
ke1
untuk mengaktifkan jalur panjang. Selain itu, periksa di mana penerjemah Python Anda diinstal. Jika lokasi tersebut memiliki jalur panjang, coba instal ulang di folder dengan jalur yang lebih singkat.
Tip
Ketika memanggil predict.py untuk membuat prediksi pertamanya, fungsi bernama _initialize
memuat model TensorFlow dari disk dan cache dalam variabel global. Penembolokan ini mempercepat prediksi berikutnya. Untuk informasi selengkapnya tentang menggunakan variabel global, lihat panduan pengembang Azure Functions Python.
Memperbarui fungsi untuk menjalankan prediksi
Buka classify/__init__.py di editor teks kemudian tambahkan baris berikut setelah pernyataan
import
yang sudah ada untuk mengimpor pustaka JSON standar dan pembantu prediksi:import logging import azure.functions as func import json # Import helper script from .predict import predict_image_from_url
Ganti seluruh konten fungsi
main
dengan kode berikut:def main(req: func.HttpRequest) -> func.HttpResponse: image_url = req.params.get('img') logging.info('Image URL received: ' + image_url) results = predict_image_from_url(image_url) headers = { "Content-type": "application/json", "Access-Control-Allow-Origin": "*" } return func.HttpResponse(json.dumps(results), headers = headers)
Fungsi ini menerima URL gambar dalam parameter string kueri bernama
img
. Kemudian memanggilpredict_image_from_url
dari pustaka pembantu untuk mengunduh dan mengklasifikasikan gambar menggunakan model TensorFlow. Fungsi ini kemudian mengembalikan respons HTTP dengan hasilnya.Penting
Karena titik akhir HTTP ini dipanggil oleh halaman web yang dihosting di domain lain, respons menyertakan header
Access-Control-Allow-Origin
untuk memenuhi persyaratan Berbagi Sumber Daya Lintas Asal (CORS) browser.Dalam aplikasi produksi, ubah
*
ke asal spesifik halaman web untuk keamanan tambahan.Simpan perubahan Anda, lalu asumsikan bahwa dependensi telah selesai diinstal, mulai host fungsi lokal lagi dengan
func start
. Pastikan untuk menjalankan host di folder mulai dengan lingkungan virtual diaktifkan. Jika tidak, host akan memulai, tetapi Anda akan melihat kesalahan saat memanggil fungsi.func start
Di browser, buka URL berikut untuk memanggil fungsi dengan URL gambar kucing dan mengonfirmasi bahwa JSON yang dikembalikan mengklasifikasikan gambar sebagai kucing.
http://localhost:7071/api/classify?img=https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat1.png
Jaga agar host tetap berjalan karena Anda menggunakannya dalam langkah berikutnya.
Jalankan frontend aplikasi web lokal untuk menguji fungsi
Untuk menguji pemanggilan titik akhir fungsi dari aplikasi web lain, ada aplikasi sederhana di folder frontend repositori.
Buka terminal atau perintah baru dan aktifkan lingkungan virtual (seperti yang dijelaskan sebelumnya di bawah Membuat dan mengaktifkan lingkungan virtual Python).
Navigasi ke folder frontend repositori.
Mulai server HTTP dengan Python:
python -m http.server
Di browser, navigasi ke
localhost:8000
, lalu masukkan salah satu URL foto berikut ke dalam kotak teks, atau gunakan URL gambar yang dapat diakses publik.https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat1.png
https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat2.png
https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/dog1.png
https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/dog2.png
Pilih Kirim untuk memanggil titik akhir fungsi untuk mengklasifikasikan gambar.
Jika browser melaporkan kesalahan saat Anda mengirimkan URL gambar, periksa terminal tempat Anda menjalankan aplikasi fungsi. Jika Anda melihat kesalahan seperti "Tidak ada modul yang ditemukan 'PIL'", Anda mungkin telah memulai aplikasi fungsi di folder mulai tanpa terlebih dahulu mengaktifkan lingkungan virtual yang Anda buat sebelumnya. Jika Anda masih melihat kesalahan, jalankan
pip install -r requirements.txt
lagi dengan lingkungan virtual diaktifkan dan cari kesalahan.
Catatan
Model selalu mengklasifikasikan konten gambar sebagai kucing atau anjing, terlepas dari apakah gambar berisi salah satunya, default ke anjing. Gambar harimau dan panter, misalnya, biasanya diklasifikasi sebagai kucing, tetapi gambar gajah, wortel, atau pesawat terbang diklasifikasikan sebagai anjing.
Bersihkan sumber daya
Karena keseluruhan tutorial ini berjalan secara lokal di komputer Anda, tidak ada sumber daya atau layanan Azure untuk dibersihkan.
Langkah berikutnya
Dalam tutorial ini, Anda mempelajari cara membuat dan mengkustomisasi titik akhir API HTTP dengan Azure Functions untuk mengklasifikasikan gambar menggunakan model TensorFlow. Anda juga mempelajari cara memanggil API dari aplikasi web. Anda dapat menggunakan teknik dalam tutorial ini untuk membangun API dari kompleksitas apa pun, sambil berjalan pada model komputasi tanpa server yang disediakan oleh Azure Functions.
Lihat juga: