Pada artikel ini saya ingin berbicara tentang menggunakan layanan Custom Vision untuk mengenali foto label ramah lingkungan dari aplikasi seluler.
CustomVision adalah bagian dari Layanan Kognitif berbasis cloud Azure.
Tentang teknologi apa yang harus dipelajari, cara bekerja dengan CustomVision, apa itu, dan apa yang memungkinkan untuk dicapai - selanjutnya.

Tugas mengenali label ramah lingkungan muncul tiga tahun lalu ketika saya dan istri saya mulai membahas aplikasi seluler yang ingin dibuat oleh organisasinya (sebuah LSM di bidang ekologi) untuk menyebarluaskan informasi tentang label lingkungan.
Apa itu label lingkungan?
Pelabelan ramah lingkungan adalah sertifikat dan logo yang sesuai yang dikeluarkan oleh organisasi sertifikasi yang memeriksa produk atau layanan dari pabrikan-pemasok untuk kepatuhan dengan kriteria tertentu yang terkait dengan siklus hidup dari layanan-produk dan berfokus pada keramahan lingkungannya. Setelah sertifikasi, produsen dapat menempatkan label lingkungan pada produk mereka.
Juga, pelabelan ramah lingkungan dapat dikaitkan dengan penandaan plastik dengan komposisinya untuk menyederhanakan ukuran dan pemrosesan dan tanda-tanda serupa lainnya.
Sebagai contoh, ini tandanya:

Proses pemilihan teknologi pengakuan
Dua fitur utama aplikasi seharusnya adalah pencarian toko dengan produk ramah lingkungan dan pengakuan label ramah lingkungan. Jika secara teknologi semuanya relatif sederhana dengan pencarian toko, maka dengan pengakuan itu tidak terlalu sederhana. Kata itu fashionable, tetapi bagaimana membuatnya tidak jelas. Dan saya mulai mempelajari masalah ini.
Logo penandaan terstandarisasi dan merupakan objek yang ideal untuk pengakuan - ia menunjuk ponsel pada gambar pada paket barang, mengambil gambar dan aplikasi memberikan tanda seperti apa artinya dan apakah harus dipercaya.
Saya mulai berpikir tentang cara membuat pengakuan dan menganalisis berbagai opsi - saya mencoba OpenCV dengan algoritme pengenalnya (kaskade Haar, SWIFT, pencocokan Templat, dll.) Tetapi kualitas pengenalannya tidak terlalu baik - tidak lebih dari 70% dengan serangkaian pelatihan beberapa puluh gambar .
Mungkin di suatu tempat saya salah memahami sesuatu dan melakukan sesuatu yang salah, tetapi kami juga meminta teman lain untuk menyelidiki topik ini dan dia juga mengatakan bahwa 70% kaskade Haar adalah maksimum pada dataset tersebut.
Sejalan dengan ini, materi tentang berbagai kerangka kerja jaringan saraf dan keberhasilan penggunaan jaringan saraf untuk memecahkan masalah seperti itu mulai muncul lebih sering. Tetapi di mana-mana, beberapa ukuran dataset yang mengerikan muncul (ratusan atau ribuan gambar untuk setiap kelas), tidak asing bagi saya Python, TensorFlow, kebutuhan akan backend saya - semua ini sedikit menakutkan.
Sebagai pengembang .NET, saya melihat Accord.NET tetapi juga tidak dengan cepat menemukan sesuatu yang akan langsung cocok.
Pada saat ini, kami sedang sibuk menyelesaikan aplikasi dan meluncurkannya di prod, dan saya menunda prosesnya dengan pengakuan.
Sekitar setahun yang lalu, saya menemukan artikel yang menggambarkan pratinjau awal Microsoft Custom Vision, layanan klasifikasi gambar cloud. Saya mengujinya pada 3 karakter dan saya menyukainya - sebuah portal yang dapat dimengerti di mana Anda dapat melatih dan menguji classifier tanpa pengetahuan teknis, melatih satu set 100 gambar dalam 10-20 detik, kualitas klasifikasi di atas 90% bahkan pada 30 gambar setiap karakter - apa yang dibutuhkan.
Saya membagikan temuan itu dengan istri saya dan kami mulai membuat versi internasional aplikasi yang kurang berfungsi, yang tidak mengandung informasi tentang barang dan toko, tetapi mampu mengenali label ramah lingkungan.
Mari kita beralih ke detail teknis dari aplikasi pengenalan berjalan.
Visi khusus
CV adalah bagian dari Layanan Kognitif di Azure. Sekarang dapat diterbitkan secara resmi, dan itu akan membayar dengan berlangganan Azure, meskipun masih terdaftar di Pratinjau.
Dengan demikian, seperti produk Azure lainnya, CognitiveServices ditampilkan dan dikelola di portal Azure.
CV menyediakan dua API REST, satu untuk Pelatihan dan satu untuk Prediksi. Secara lebih rinci saya akan menjelaskan interaksi dengan Prediksi lebih lanjut
Selain portal dan API Azure, pengguna CV memiliki akses ke portal customvision.ai, di mana mereka dapat dengan sangat mudah dan secara visual mengunggah gambar, memberi tanda pada mereka, dan melihat gambar dan hasil pengenalan yang melewati API.
Portal dan API customvision.ai dapat mulai digunakan tanpa mengikat Azure - untuk tujuan pengujian, proyek dibuat bahkan tanpa Berlangganan Azure. Tetapi jika Anda ingin membuat proyek produksi dari proyek pengujian Anda di masa mendatang, maka lebih baik segera melakukannya, jika tidak kita harus menyalin gambar-gambar dari proyek pengujian secara manual dan menandainya kembali menjadi produksi.
Untuk membuat proyek di Azure, Anda harus mendaftar di sana dan membuat langganan. Ini relatif mudah, masalahnya hanya bisa dengan input dan validasi data dari kartu kredit - kadang-kadang ini terjadi.
Setelah mendaftar, Anda perlu membuat instance ComputerVision melalui portal Azure

Setelah membuat sumber daya di Azure, mereka akan tersedia di customvision.ai
Di portal customvision.ai, Anda dapat mengunggah gambar dan memberi tag - ada beberapa tag pada satu gambar, tetapi tanpa menyorot area. Yaitu, gambar tersebut milik beberapa kelas, tetapi pada tahap pengembangan layanan ini, tidak mungkin untuk memilih fragmen tertentu dalam gambar dan menugaskannya ke kelas.
Setelah menandai, Anda harus memulai pelatihan dengan menekan tombol Train - pelatihan model 70 tag dan 3 ribu gambar berlangsung sekitar 30 detik.
Hasil pelatihan disimpan di entitas Iteration. Bahkan, Iterasi mengimplementasikan versi.
Setiap Iterasi dapat digunakan secara independen - yaitu, Anda dapat membuat Iterasi, menguji hasilnya dan menghapusnya jika tidak cocok atau mentransfer ke default dan mengganti Iterasi default saat ini dan kemudian semua pengakuan dari aplikasi akan datang ke model dari Iterasi ini.
Kualitas model ditampilkan dalam bentuk Precision dan Recall (lebih detail di sini ) baik untuk semua kelas sekaligus, dan secara terpisah.

Seperti inilah proyek dengan gambar yang sudah diunggah dan melewati pelatihan.

Di portal, Anda dapat menjalankan pengenalan gambar dari disk atau URL menggunakan Uji Cepat dan uji pengenalan oleh satu gambar.
Pada tab Prediksi, Anda dapat melihat hasil dari semua pengakuan terbaru - persentase pemberian tag ditampilkan secara langsung dalam gambar.

Kemampuan untuk melihat semua hasil pengenalan dan menambahkannya ke set pelatihan hanya dengan beberapa klik mouse sangat membantu - siapa pun dapat melakukan ini tanpa sepengetahuan AI atau pemrograman.
Penggunaan API
Layanan Custom Vision memiliki REST API yang sangat sederhana dan intuitif untuk pelatihan dan pengakuan.
Aplikasi kami hanya menggunakan API pengenalan dan saya akan berbicara tentang penggunaannya
Url untuk pengakuan jenis ini:
https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/ { GUID proyek Anda} / image
dimana
southcentralus ** - nama wilayah Azure tempat layanan berada. Sejauh ini, layanan ini hanya tersedia di wilayah AS Tengah Selatan. Ini tidak berarti bahwa hanya di sana Anda dapat menggunakannya! Dia hanya tinggal di sana - Anda dapat menggunakannya dari mana saja di mana ada Internet.
{GUID proyek Anda} ** - pengidentifikasi proyek Anda. Anda dapat melihatnya di customvision.ai portal
Untuk pengakuan, perlu untuk mengirim gambar melalui POST. Anda juga dapat mengirim url gambar yang dapat diakses publik dan layanan akan mengunduhnya sendiri.
Selain itu, Anda perlu menambahkan tajuk "Tombol-Prediksi" ke Header tempat Anda dapat mentransfer salah satu Kunci Akses yang akan dikeluarkan pada saat pendaftaran - mereka tersedia baik di portal customvision.ai dan di portal Azure.
Hasilnya berisi bidang berikut:
"Predictions":[ {"TagId":"35ac2ad0-e3ef-4e60-b81f-052a1057a1ca","Tag":"dog","Probability":0.102716163}, {"TagId":"28e1a872-3776-434c-8cf0-b612dd1a953c","Tag":"cat","Probability":0.02037274} ]
Di mana Probabilitas menunjukkan probabilitas bahwa gambar tersebut milik tag yang ditentukan (kelas).
Di C #, sepertinya ini
var client = new HttpClient(); client.DefaultRequestHeaders.Add("Prediction-Key", "{Acess key}"); string url = "https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/{Your project GUID}/image"; HttpResponseMessage response; List<RecognitionResult> recognitions = new List<RecognitionResult>(); using (var content = new ByteArrayContent(imageBytes)) { content.Headers.ContentType = new MediaTypeHeaderValue ("application/octet-stream"); response = await client.PostAsync(url, content); if (response.IsSuccessStatusCode) { string strRes = await response.Content.ReadAsStringAsync(); dynamic res = (dynamic) JsonConvert.DeserializeObject(strRes); foreach (var pr in res.predictions) { recognitions.Add( new RecognitionResult() { Tag = pr.tagName, RecognPercent = pr.probability }); } } else { Debug.WriteLine( "Non successful response. " + response.ToString()); } }
Seperti yang Anda lihat - sama sekali tidak ada yang rumit. Semua keajaiban terjadi di sisi layanan.
Aplikasi dan beberapa parameter yang dipilih.
Aplikasi ini cukup sederhana dan terdiri dari daftar eco-label, informasi tentang apa eco-label itu, bagaimana mereka dibagi dan pemindai itu sendiri.
Bagian utama ditulis dalam Xamarin. Bentuk, tetapi jendela pemindai bekerja dengan kamera dan itu harus dilakukan sebagai merender dan diimplementasikan untuk setiap platform secara terpisah
Tingkat ketika aplikasi memutuskan bahwa label lingkungan dikenali dengan tepat> = 90%, sementara hampir semua gambar dikenali jika kualitasnya kurang lebih dapat diterima dan tidak ada tanda-tanda lain dalam gambar.
Angka ini diturunkan secara empiris - kami mulai dengan 80, tetapi menyadari bahwa 90 mengurangi positif palsu. Dan ada cukup banyak dari mereka - banyak tanda yang serupa dan mengandung elemen yang sama dan skema warna digeser menjadi hijau.
Misalnya, ini bukan gambar kualitas tertinggi yang dikenali dengan benar dengan akurasi 91%

B pada saat yang sama, kelas ini dilatih pada 45 gambar.
Saya harap artikel ini bermanfaat dan akan memungkinkan pembaca yang tertarik untuk melihat alat AI dan ML baru.