FastAPI — Membuat dan Menyebarkan Detektor Hot Dog — Menuju AI — Teknologi, Sains, dan Teknik Terbaik

Penulis (s): Sayar Banerjee

Visi Komputer

FastAPI — Membuat dan Menyebarkan Detektor Hot Dog

Dan pelajari cara menyimpannya menggunakan Docker

Foto oleh Mateusz Feliksik di Unsplash

Saya tidak merokok, kecuali untuk acara khusus — Jian Yang

Bagi Anda yang akrab dengan sequential television terkenal Silicon Valley, Anda pasti sudah bisa menebak inspirasi artikel ini.

Karakter Jimmy O. Yang di Silicon Valley mengembangkan aplikasi yang menggunakan Computer Vision untuk mendeteksi apakah foto itu sexy puppy atau tidak.

Hari ini, kita akan melihat cara mereplikasi dan menerapkan API semacam itu menggunakan FastAPI dan Docker.

FastAPI adalah salah satu kerangka kerja internet dengan pertumbuhan tercepat yang digunakan untuk membangun API dengan Python.

TL; DR: Repositori Github

Kumpulan information

Dataset yang akan saya gunakan berasal dari Kaggle. Anda dapat menemukannya di sini.

Melatih Model

Untuk melatih version Computer Vision kami, saya memutuskan untuk menggunakan perpustakaan Fastai Jeremy Howard yang terkenal.

Singkatnya, Fastai adalah pembungkus di atas perpustakaan Pytorch yang memberdayakan pengembang untuk mengembangkan version pembelajaran mesin dengan cepat.

Untuk melatih pengklasifikasi hotdog kami, kami menggunakan version Resnet34 yang telah dilatih sebelumnya.

Untuk mendapatkan pemahaman yang lebih baik tentang pilihan lain yang diambil selama proses pelatihan, Anda dapat merujuk ke laptop Google Colab yang dapat ditemukan di sini.

Seperti yang Anda lihat, setelah pelatihan hanya pada satu epoch, model kami mencapai akurasi 95 percent pada put validasi.

Kami melihat bahwa version kami bekerja cukup baik untuk gambar sampel yang diambil dari place pengujian kami.

Membuat API

Di bagian ini, kami akan membangun API untuk menerapkan version detektor hotdog terlatih kami ke dalam produksi.

Struktur Proyek

.
LISENSI
README.md
aplikasi
__init__. py
json_models
__init__. Py
request.py
main.py
version
__init__. py
│ │ └── model.pkl
utils.py
buku catatan
HotDogOrNot.ipynb
persyaratan.txt

Sebagian besar kode yang relevan berada di direktori program. Perhatikan bahwa kami telah membuat direktori bernama version yang menyimpan file version terlatih kami.

Sebelum kita mulai, pastikan untuk menginstal semua persyaratan dengan menjalankan perintah berikut dari direktori induk:

$ pip3 set up -r requirements.txt

Mari kita lihat kode kita.

utils.py

Utils.pyfile kami berisi tiga fungsi. Masing-masing dari tiga fungsi memiliki tujuan yang berbeda:

https://medium.com/media/cb6e4f2e6288d426f7f90d4ab7fde60d/href

read_image cukup jelas. Fungsi ini membantu membaca information gambar sebagai byte dari permintaan dan mengubahnya menjadi format yang sesuai untuk dimasukkan ke dalam version untuk prediksi.

is_hotdog adalah fungsi yang sedikit lebih bernuansa. Fungsi ini sebenarnya digunakan oleh Fastai DataLoader kami untuk menyajikan information dengan tepat ke version kami.

Meskipun version kami disimpan dalam file. pkl setelah pelatihan, model ini tidak menyimpan fungsi is_hotdog secara keseluruhan.

Sebagai gantinya, ia menyimpan referensi ke fungsi dalam file. Oleh karena itu, kami menulis fungsi di dalam document utils kami sehingga ketika version dimuat, ia dapat berhasil mencari fungsi is_hotdog dan akan dapat beroperasi sebagaimana dimaksud.

Untuk informasi lebih lanjut tentang ini dan ImageDataLoaders, Anda dapat membaca dokumen Fastai resmi dan utas discussion ini.

Terakhir, fungsi predict_hotdog kami memuat version kami yang akan memanfaatkan fungsi is_hotdog dan menyajikan prediksi. Fungsi mengembalikan kamus yang akan berfungsi sebagai respons untuk API kami.

respon.py

File yang berada di dalam direktori json_models ini berisi kelas aPydantic untuk version respons API kami.

Singkatnya, Pydantic adalah pustaka fantastis yang menyediakan validasi information menggunakan anotasi tipe python saat runtime.

Pustaka ini sangat berguna untuk membangun API dan memiliki interoperabilitas yang luar biasa dengan FastAPI.

https://medium.com/media/451755b15712a8c9221e9dd99c44f969/href

Seperti yang bisa kita lihat, atribut dari kelas Response kita memiliki nama yang sama dengan kunci dari fungsi predict_hotdog kita.

main.py

Akhirnya, ini adalah file yang akan dijalankan oleh aplikasi kita dalam produksi.

https://medium.com/media/1cd7dfe1e308d1305fa8ead7b687bfb3/href

Pertama, kita membuat objek kelas FastAPI. Kemudian, kami menghias fungsi prediksi kami menggunakan objek kelas ini. @app. Article menunjukkan bahwa permintaan kami akan menjadi permintaan posting diikuti oleh jalur untuk API kami /forecast /.

Kami juga memiliki parameter yang disebut response_model di sini yang menerima version Pydantic kami sebagai input. Parameter ini untuk memvalidasi respons kami saat runtime.

Terakhir, fungsi prediksi kami memiliki parameter kueri yang disebut myfile dari tipe UploadFile yang akan digunakan untuk membaca document gambar kami di API.

Variabel ini diteruskan ke fungsi read_image yang kita lihat sebelumnya yang akan mengonversi information gambar kita dalam byte ke objek PILImage yang dapat kita gunakan dengan mudah untuk memberi makan version FastAI kita.

Akhirnya, gambar diteruskan ke fungsi predict_hotdog kami yang menyajikan prediksi dan mengembalikan objek kamus sebagai respons.

Pengujian

Untuk menguji API secara guide, Anda harus menjalankannya terlebih dahulu.

Buka direktori aplikasi di Retailer Anda dan ketik perintah berikut:

$ uvicorn chief:program –reload

Catatan: Kutipan berikut diambil langsung dari dokumen FastAPI.

Perintah uvicorn chief:program mengacu pada:

Primary: document main.py (“modul” Python). Program: objek yang dibuat di dalam main.py dengan baris program = FastAPI(). –reload: membuat server resume setelah perubahan kode. Hanya digunakan untuk pengembangan.

Di terminal Anda, Anda akan melihat baris berikut:

INFO: Uvicorn berjalan di http://127.0.0.1:8000 (Tekan CTRL+C untuk keluar

Buka http://127.0.0.1:8000/docs di browser pilihan Anda.

Anda akan melihat sesuatu seperti ini yang merupakan UI dokumentasi Swagger.

Jika Anda mengklik dropdown untuk POST, Anda seharusnya dapat melihat yang berikut:

Klik Coba setelah itu Anda akan diminta untuk mengunggah gambar Anda. Setelah Anda melakukannya, klik eksekusi dan Anda akan mendapatkan yang berikut:

Perhatikan bahwa selain respons, UI juga menghasilkan perintah curl khusus untuk Anda gunakan dari terminal Anda. Cukup rapi bukan?

Dockerize

Sejauh ini, kami telah melihat cara berhasil menerapkan version detektor hotdog kami secara lokal. Namun, dalam praktiknya, seseorang ingin dapat menerapkan aplikasi semacam itu di mesin apa pun.

Oleh karena itu, cara terbaik untuk melakukannya adalah dengan menyimpan aplikasi Anda menggunakan Docker.

Pastikan Anda telah menginstal Docker di sistem Anda sebelum melanjutkan. Anda dapat menginstalnya dari sini.

Kita dapat memanfaatkan picture Docker resmi yang dibuat oleh pembuat FastAPI untuk membangun picture lokal kita. Mari kita lihat Dockerfile kami:

DARI tiangolo/uvicorn-gunicorn-fastapi:python3.7 COPY . /program /program COPY requirements.txt requirements.txt RUN pip3 set up -r requirements.txt

Jalankan perintah berikut di terminal untuk membuat gambar:

$ docker construct -t fastimage.

Setelah ini, Anda dapat menjalankan gambar dalam wadah sebagai berikut:

$ docker operate -p –title fastcontainer -de 80:80 fastimage

Jika Anda membuka localhost/docs di browser, Anda seharusnya dapat melihat UI Swagger.

Jadi, sekarang kami telah membuat gambar Docker kami yang sekarang dapat didorong ke Docker Hub atau registri wadah lainnya untuk digunakan dalam produksi.

Selamat! Anda telah mencapai akhir artikel ini. Saya harap Anda menikmati membacanya. Saya akan meninggalkan beberapa sumber daya untuk mempelajari lebih lanjut tentang FastAPI, FastAI, dan Docker. Sampai Lain waktu! ✋

Sumber daya

FastAPI — Create and Deploy Sexy Dog Detector awalnya diterbitkan di Limit AI on Moderate, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI