Machine Learning thực sự là một lĩnh vực rất hot trong CNTT hiện nay, hầu hết các công ty, doanh nghiệp lớn như Apple, Google.. đều đầu tư rất nhiều nguồn lực cũng như tiền bạc để tham gia vào lĩnh vực của tương lai này . Hàng loạt các ứng dụng , sản phẩm Machine Learning được giới thiệu, tiêu biểu là “bot” đánh cờ vây AlphaGo của Google. AlphaGo với khả năng tự học, ghi nhớ các bước đi của đối thủ và cho đến nay đã trải qua số trận đấu tương đương với hơn 80 năm kinh nghiệm của một kiện tướng bình thường đã dễ dàng đánh bại kiện tướng từng 18 lần vô địch cờ vây thế giới - Lee Sedol, và chắc chắn sẽ có rất nhiều bộ máy thông minh hơn nửa được ra đời nhờ ML.
Đối với Apple thì tại hội nghị WWDC 2017 họ đã cho ra mắt CoreML - frameworks hỗ trợ cho việc tích hợp Machine Learning vào trong các ứng dụng iOS. CoreML cung cấp các API để làm việc với các CoreML Data Model - đây là các model data đã được training trước, chúng ta có thể tạo ra các model bằng các tập dữ liệu hoặc sử dụng các model có sẵn, Apple cung cấp khá nhiều model cho các developer các bạn có thể xem thêm tại đây
Sau đây mình xin làm một demo detect chữ số với CoreML.
1 . Màu sắc và height của line khi vẽ. 2 . Biến UIBezierPath sẽ được dùng để draw line tương ứng với startingPoint và touchPoint khi người dùng vẽ cho đến khi dừng lại. 3 . Disable multiple touch. 4 . Gán startingPoint tại vị trí người dùng bắt đầu vẽ (touchesBegan). 5 . Khi draw thì tiến hành vẽ từ startingPoint cho đến vị trí hiện tại và gán lại startingPoint bằng vị trí hiện tại để tiếp tục vẽ. 6 . Xoá đi các line đã vẽ
CoreML Model
Để làm việc với CoreML ta cần một data model đã được trainning sẵn. Với demo này thì chúng dùng model MNIST các bạn dowload MNISTtại đây
Sau khi dowload bạn drag file MNIST.mlmodel vào project.
Click chọn vào MNIST.mlmodel ta sẽ thấy:
Input: là 1 image tỉ lệ 28x28 có chứa digit cần nhận diện
Output: là một mảng các digit được dự đoán với digit được nhận diện từ input.
1 . Tại viewDidload mình sẽ tạo ra 1 classificationRequest từ MNIST model request này sẽ trả về result khi nhận được yêu cầu perform từ một requestHandler nào đó. 2 . Sau khi nhận được completionHandler từ request ta sẽ filter ra một mảng các digit với độ tin cậy > 0.9 được model dự đoán, và set cho resultLabel với digit có độ tin cậy cao nhất. 3 . Lưu ý khi đã draw xong ta sẽ tạo ra một UIImage từ view đã draw và scale với tỉ lệ 28x28 tương ứng với yêu cầu input của model thì mới đạt được kết quả chính xác.
Bài viết của mình đến đây là hết. Tương tự các bạn có thể tạo ra các example CoreML tương tự với các CoreML Model khác. Hi vọng bài viết sẽ giúp ích các bạn. Cảm ơn các bạn đã theo dói.