pengantar
Core ML adalah pustaka pembelajaran mesin yang dirilis oleh Apple di WWDC 2017.
Hal ini memungkinkan pengembang iOS untuk menambahkan pengalaman yang dipersonalisasi secara real-time ke aplikasi mereka menggunakan model pembelajaran mesin lokal lanjutan menggunakan Neural Engine.
A11 Bionic Chip Review
A11 Pengisian Chip Bionik
Transistor: 4,3 miliar
Core: 6 core ARM (64 bit) - 2 frekuensi tinggi (2,4 GHz) - 4
GPU berdaya rendah : 3
Neural Engine - 600 operasi dasar per detik
Pada 12 September 2017 Apple memperkenalkan chip A11 Bionic kepada dunia dengan Neural Engine. Perangkat keras jaringan saraf ini dapat melakukan hingga 600 operasi dasar per detik (BOPS) dan digunakan untuk FaceID, Animoji, dan tugas pembelajaran mesin lainnya. Pengembang dapat menggunakan Neural Engine menggunakan Core ML API.
Core ML mengoptimalkan kinerja pada perangkat dengan memanfaatkan CPU, GPU, dan sumber daya Neural Engine, meminimalkan konsumsi daya dan memori.
Menjalankan model secara lokal di perangkat pengguna menghilangkan kebutuhan akan koneksi jaringan, yang membantu menjaga kerahasiaan data pengguna dan meningkatkan daya respons aplikasi Anda.
Core ML adalah dasar untuk kerangka kerja dan fungsionalitas domain ini. Core ML mendukung Vision untuk analisis gambar, Natural Language untuk pemrosesan kata, Ucapan untuk suara-ke-teks, dan Analisis Suara untuk mengidentifikasi suara dalam audio.
Core ML API
Kami dapat dengan mudah mengotomatiskan tugas membuat model pembelajaran mesin, yang mencakup pelatihan dan pengujian model menggunakan Playground, dan mengintegrasikan file model yang dihasilkan ke dalam proyek iOS kami.
Kiat pemula : Sorot label terpisah untuk tugas klasifikasi.
Diagram blok umum Core ML
Baik. Apa yang akan kita buat?
Dalam tutorial ini, saya akan menunjukkan cara membuat model pengklasifikasi gambar menggunakan Core ML, yang dapat mengklasifikasikan gambar Orange dan Strawberry, dan menambahkan model ini ke aplikasi iOS kita.
Model pengklasifikasi gambar.
Kiat pemula : Klasifikasi gambar mengacu pada masalah pembelajaran yang diawasi di mana kami menggunakan data berlabel (dalam kasus kami, label adalah nama gambar).
Minimum yang dibutuhkan:
- Pengetahuan tentang bahasa Swift
- Dasar-dasar Pengembangan IOS
- Memahami Konsep Pemrograman Berorientasi Objek
Program aplikasi:
- X-code 10 atau lebih baru
- SDK iOS 11.0+
- macOS 10.13+
Pengumpulan data
Saat mengumpulkan data untuk klasifikasi gambar, ikuti pedoman Apple.
- 10 — , .
- , .
- , Create ML UI’s Augmentation: Crop, Rotate, Blur, Expose, Noise Flip.
- : , . , .
- , , .
- , , -.
Setelah Anda mengumpulkan Kumpulan Data Anda, bagi menjadi set Latih dan Pengujian dan letakkan di folder yang sesuai.
CATATAN PENTING: Pastikan Anda mendistribusikan gambar ke folder yang sesuai di dalam folder tes. Karena nama folder berfungsi sebagai label gambar kita.
Dalam kasus kami, kami memiliki dua folder, yang masing-masing berisi gambar yang sesuai.
Pembuatan model
Jangan panik! Apple telah membuat tugas ini jauh lebih mudah dengan mengotomatiskan pencapaiannya.
Dengan Core ML, Anda dapat menggunakan model yang sudah dilatih untuk mengklasifikasikan data masukan, atau membuatnya sendiri. Framework Vision sudah berfungsi dengan Core ML untuk menerapkan model klasifikasi ke gambar dan memproses sebelumnya gambar tersebut, dan untuk membuat tugas pembelajaran mesin lebih sederhana dan lebih kuat.
Ikuti saja langkah-langkah ini.
LANGKAH 1 : Buka kode X Anda.
LANGKAH 2 : Buat Swift Playground yang bersih.
LANGKAH 3 : Hapus kode yang dibuat default, tambahkan program berikut dan jalankan
playground.
import CreateMLUI //
let builder = MLImageClassifierBuilder()
// MLImageClassifierBuilder
builder.showInLiveView()
// Xcode Model builder
Deskripsi:
Di sini kami membuka antarmuka pembuat model default yang disediakan oleh Xcode.
LANGKAH 4 : Tarik folder contoh pelatihan ke area pelatihan.
Tempatkan folder contoh latihan di area latihan yang ditandai dengan garis putus-putus.
Kiat pemula : Kami juga dapat memberikan nama sewenang-wenang untuk model kami dengan mengeklik panah bawah di area tutorial.
Langkah 5 : Xcode akan secara otomatis memproses gambar dan memulai proses pembelajaran. Secara default, dibutuhkan 10 iterasi untuk melatih model, bergantung pada karakteristik Mac Anda dan ukuran kumpulan data. Anda dapat melihat kemajuan pelatihan di jendela terminal Playground.
Saya menunggu sementara model sedang dilatih.
LANGKAH 6 : Setelah menyelesaikan pelatihan, Anda dapat menguji model Anda dengan menyeret dan melepaskan folder Test ke dalam area pengujian. Xcode akan secara otomatis menguji model Anda dan menampilkan hasilnya.
Seperti yang Anda lihat, model kami telah mengklasifikasikan gambar secara akurat.
LANGKAH 7 : Simpan model Anda.
Integrasi ke dalam aplikasi iOS:
LANGKAH 1 : Buka kode X Anda.
LANGKAH 2 : Buat aplikasi iOS Satu Halaman.
LANGKAH 3 : Buka navigator proyek.
LANGKAH 4 : Tarik model terlatih ke navigator proyek.
Tempatkan model Anda di navigator proyek.
LANGKAH 5: Buka
Main.storyboarddan buat antarmuka sederhana seperti yang ditunjukkan di bawah ini, tambahkan IBOutlets dan IBActions untuk masing-masing tampilan.
Tambahkan UIImageView, UIButtons dan UILabels.
LANGKAH 6 : Buka file
ViewController.swiftdan tambahkan kode berikut sebagai ekstensi.
extension ViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func getimage() {
let imagePicker = UIImagePickerController()
// UIImagePickerController()
imagePicker.delegate = self //
imagePicker.sourceType = .photoLibrary //
imagePicker.allowsEditing = true //
present(imagePicker, animated: true) // UIPickerView
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo : [UIImagePickerController.InfoKey: Any]) {
let fimage = info[.editedImage] as!UIImage
// .editedImage info
// UIImage
fruitImageView.image = fimage
// UIImageView
dismiss(animated: true, completion: nil) // ,
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true, completion: nil)
// ,
}
}
Deskripsi: Di sini kami membuat ekstensi untuk kelas ViewController kami dan mengimplementasikan UINavigationControllerDelegate dan UIImagePickerControllerDelegate untuk menampilkan UIImagePickerView saat pengguna mengklik UIButton PickImage. Pastikan Anda mengatur konteks delegasi.
Langkah-langkah yang terkait dengan mengakses model Core ML di aplikasi iOS
LANGKAH 1 : Pastikan Anda telah mengimpor perpustakaan berikut.
import CoreML
import Vision
LANGKAH 2 : Buat instance dari kelas Model Core ML kami.
let modelobj = ImageClassifier()
LANGKAH 3 : Untuk memaksa Core ML melakukan klasifikasi, pertama-tama kita harus membentuk permintaan jenis VNCoreMLRequest (VN singkatan dari Vision)
var myrequest: VNCoreMLRequest?
// VNCoreMLRequest
myrequest = VNCoreMLRequest(model: fruitmodel, completionHandler: { (request, error) in
//
// , Core ML
self.handleResult(request: request, error: error)
//
})
LANGKAH 4: Pastikan Anda memotong gambar agar kompatibel dengan model Core ML. LANGKAH 5: Tempatkan kode di atas dalam fungsi kustom yang mengembalikan objek permintaan.
myrequest!.imageCropAndScaleOption = .centerCrop
func mlrequest() - > VNCoreMLRequest {
var myrequest: VNCoreMLRequest ?
let modelobj = ImageClassifier()
do {
let fruitmodel =
try VNCoreMLModel(
for: modelobj.model)
myrequest = VNCoreMLRequest(model: fruitmodel, completionHandler: {
(request, error) in self.handleResult(request: request, error: error)
})
} catch {
print("Unable to create a request")
}
myrequest!.imageCropAndScaleOption = .centerCrop
return myrequest!
}
LANGKAH 6 : Sekarang kita perlu mengonversi UIImage kita ke CIImage (CI: CoreImage) agar dapat digunakan sebagai masukan untuk model Core ML kita. Ini dapat dengan mudah dilakukan dengan membuat instance CIImage dengan meneruskan UIImage di konstruktor.
guard let ciImage = CIImage(image: image) else {
return
}
LANGKAH 7 : Sekarang kita dapat memproses milik kita
VNCoreMLRequestdengan membuat penangan permintaan dan meneruskan ciImage.
let handler = VNImageRequestHandler(ciImage: ciImage)
LANGKAH 8 : Permintaan dapat dipenuhi dengan memanggil metode
perform()dan meneruskannya sebagai parameter VNCoreMLRequest.
DispatchQueue.global(qos: .userInitiated).async {
let handler = VNImageRequestHandler(ciImage: ciImage)
do {
try handler.perform([self.mlrequest()])
} catch {
print("Failed to get the description")
}
}
Deskripsi : DispatchQueue adalah objek yang mengelola eksekusi tugas secara berurutan (atau bersamaan) di thread utama (atau latar belakang) aplikasi Anda.
LANGKAH 10 : Tempatkan kode di atas dalam fungsi kustom seperti yang ditunjukkan di bawah ini.
func excecuteRequest(image: UIImage) {
guard
let ciImage = CIImage(image: image)
else {
return
}
DispatchQueue.global(qos: .userInitiated).async {
let handler = VNImageRequestHandler(ciImage: ciImage)
do {
try handler.perform([self.mlrequest()])
} catch {
print("Failed to get the description")
}
}
LANGKAH 11 : Buat fungsi kustom bernama
handleResult()yang mengambil objek VNRequestkesalahan dan objek kesalahan sebagai parameter. Fungsi ini akan dipanggil setelah selesai VNCoreMLRequest.
func handleResult(request: VNRequest, error: Error ? ) {
if let classificationresult = request.results as ? [VNClassificationObservation] {// VNClassificationObservation
DispatchQueue.main.async {
self.fruitnamelbl.text = classificationresult.first!.identifier// UILabel prperty
print(classificationresult.first!.identifier)
}
}
else {
print("Unable to get the results")
}
}
Catatan : Ini DispatchQueue.main.asyncdigunakan untuk memperbarui objek UIKit (dalam kasus kami adalah UILabel) menggunakan UI Thread atau Main Thread, karena semua tugas klasifikasi dilakukan di thread latar belakang.
Daftar ViewController.Swift
import UIKit
import CoreML
import Vision
class ViewController: UIViewController {
var name: String = ""
@IBOutlet weak
var fruitnamelbl: UILabel!@IBOutlet weak
var fruitImageView: UIImageView!override func viewDidLoad() {
super.viewDidLoad()
// .
}
@IBAction func classifybtnclicked(_ sender: Any) {
excecuteRequest(image: fruitImageView.image!)
}
@IBAction func piclimage(_ sender: Any) {
getimage()
}
func mlrequest() - > VNCoreMLRequest {
var myrequest: VNCoreMLRequest ?
let modelobj = ImageClassifier()
do {
let fruitmodel =
try VNCoreMLModel(
for: modelobj.model)
myrequest = VNCoreMLRequest(model: fruitmodel, completionHandler: {
(request, error) in self.handleResult(request: request, error: error)
})
} catch {
print("Unable to create a request")
}
myrequest!.imageCropAndScaleOption = .centerCrop
return myrequest!
}
func excecuteRequest(image: UIImage) {
guard
let ciImage = CIImage(image: image)
else {
return
}
DispatchQueue.global(qos: .userInitiated).async {
let handler = VNImageRequestHandler(ciImage: ciImage)
do {
try handler.perform([self.mlrequest()])
} catch {
print("Failed to get the description")
}
}
}
func handleResult(request: VNRequest, error: Error ? ) {
if let classificationresult = request.results as ? [VNClassificationObservation] {
DispatchQueue.main.async {
self.fruitnamelbl.text = classificationresult.first!.identifier
print(classificationresult.first!.identifier)
}
}
else {
print("Unable to get the results")
}
}
}
extension ViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func getimage() {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
imagePicker.allowsEditing = true
present(imagePicker, animated: true)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
let fimage = info[.editedImage] as!UIImage
fruitImageView.image = fimage
dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true, completion: nil)
}
}
Semuanya sudah siap!
Sekarang mulai Simulator Anda dan uji aplikasi Anda.
Catatan : Pastikan Anda memiliki foto jeruk dan stroberi di perpustakaan foto Simulator Anda.
Klik tombol Pilih Gambar
Pilih gambar apa pun
Klik tombol Klasifikasi
Pilih gambar lain dan klik Klasifikasi
Hore:
Anda telah membuat aplikasi iOS pertama Anda menggunakan Core ML.