Nhận dạng văn bản và các đặc điểm trên khuôn mặt bằng Bộ công cụ học máy: Android

1. Giới thiệu

Bộ công cụ học máy là một SDK di động mang chuyên môn về học máy của Google vào các ứng dụng Android và iOS trong một gói mạnh mẽ nhưng dễ sử dụng. Cho dù là người mới bắt đầu hay đã có kinh nghiệm về học máy, bạn đều có thể dễ dàng triển khai chức năng cần thiết chỉ bằng một vài dòng mã. Bạn không cần có kiến thức chuyên sâu về mạng nơ-ron hoặc việc tối ưu hoá mô hình để bắt đầu.

Nếu bạn gặp vấn đề (lỗi trong đoạn mã, lỗi ngữ pháp, từ ngữ không rõ ràng, v.v.) khi thực hành theo lớp học lập trình này, vui lòng báo cáo vấn đề thông qua đường liên kết Báo cáo lỗi ở góc dưới bên trái lớp học lập trình.

Tính năng này hoạt động ra sao?

Nhờ bộ công cụ học máy, bạn dễ dàng áp dụng các kỹ thuật học máy trong ứng dụng của mình bằng cách tích hợp các công nghệ học máy của Google như Mobile VisionTensorFlow Lite vào một SDK duy nhất. Cho dù bạn cần các chức năng theo thời gian thực của các mô hình trên thiết bị của Mobile Vision hay sự linh hoạt của các mô hình TensorFlow Lite tuỳ chỉnh, thì Bộ công cụ học máy đều đáp ứng được.

Lớp học lập trình này sẽ hướng dẫn bạn cách tạo ứng dụng Android của riêng mình có thể tự động phát hiện văn bản và các đặc điểm trên khuôn mặt trong một hình ảnh.

Sản phẩm bạn sẽ tạo ra

Trong lớp học lập trình này, bạn sẽ xây dựng một ứng dụng Android bằng Bộ công cụ học máy. Ứng dụng này sẽ:

  • Sử dụng API Nhận dạng văn bản của Bộ công cụ học máy để phát hiện văn bản trong hình ảnh
  • Sử dụng API Đường nét khuôn mặt của Bộ công cụ học máy để xác định các đặc điểm trên khuôn mặt trong hình ảnh

Kiến thức bạn sẽ học được

  • Cách sử dụng SDK Bộ công cụ học máy để dễ dàng thêm các chức năng nâng cao về Học máy, chẳng hạn như nhận dạng văn bản và phát hiện đặc điểm khuôn mặt

Bạn cần có

  • Một phiên bản Android Studio gần đây (phiên bản 3.0 trở lên)
  • Trình mô phỏng Android Studio hoặc thiết bị Android thực
  • Mã mẫu
  • Kiến thức cơ bản về cách phát triển Android bằng Java
  • Hiểu biết cơ bản về các mô hình học máy

Lớp học lập trình này tập trung vào Bộ công cụ học máy. Các khái niệm và khối mã không liên quan được tinh chỉnh và cung cấp cho bạn, chỉ cần sao chép và dán.

2. Chuẩn bị

Tải mã nguồn xuống

Nhấp vào đường liên kết sau đây để tải toàn bộ mã nguồn cho lớp học lập trình này:

Giải nén tệp zip đã tải xuống. Thao tác này sẽ giải nén một thư mục gốc (mlkit-android-master) chứa tất cả tài nguyên bạn cần. Trong lớp học lập trình này, bạn sẽ chỉ cần các tài nguyên trong thư mục con vision.

Thư mục con vision trong kho lưu trữ mlkit-android-master có 2 thư mục:

  • android_studio_folder.pngstarter – Mã khởi đầu mà bạn sẽ xây dựng trong lớp học lập trình này.
  • android_studio_folder.pngfinal – Mã hoàn chỉnh cho ứng dụng mẫu đã hoàn tất.

3. Kiểm tra các phần phụ thuộc của Bộ công cụ học máy

Xác minh các phần phụ thuộc cho Bộ công cụ học máy

Các dòng sau đây phải được thêm vào cuối tệp build.gradle trong thư mục app của dự án (hãy kiểm tra để xác nhận):

build.gradle

dependencies {
  // Face features
  implementation 'com.google.mlkit:face-detection:16.0.0'

  // Text features
  implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
}

Đây là các phần phụ thuộc cụ thể của Bộ công cụ học máy mà bạn cần triển khai các tính năng trong lớp học lập trình này.

4. Chạy ứng dụng khởi đầu

Giờ đây, bạn đã nhập dự án vào Android Studio và kiểm tra các phần phụ thuộc cho Bộ công cụ học máy, bạn đã sẵn sàng chạy ứng dụng lần đầu tiên. Khởi động trình mô phỏng Android Studio rồi nhấp vào Chạy ( execute.png) trong thanh công cụ của Android Studio.

Ứng dụng sẽ chạy trên trình mô phỏng. Tại thời điểm này, bạn sẽ thấy một bố cục cơ bản có trường thả xuống cho phép bạn chọn trong số 3 hình ảnh. Trong phần tiếp theo, bạn sẽ thêm tính năng nhận dạng văn bản vào ứng dụng để xác định văn bản trong hình ảnh.

5. Thêm tính năng nhận dạng văn bản trên thiết bị

Trong bước này, chúng ta sẽ thêm chức năng nhận dạng văn bản trong hình ảnh vào ứng dụng.

Thiết lập và chạy tính năng nhận dạng văn bản trên thiết bị đối với một hình ảnh

Thêm nội dung sau vào phương thức runTextRecognition của lớp MainActivity:

MainActivity.java

private void runTextRecognition() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   TextRecognizer recognizer = TextRecognition.getClient();
   mTextButton.setEnabled(false);
   recognizer.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<Text>() {
                       @Override
                       public void onSuccess(Text texts) {
                           mTextButton.setEnabled(true);
                           processTextRecognitionResult(texts);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mTextButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });
}

Đoạn mã trên định cấu hình trình phát hiện nhận dạng văn bản và gọi hàm processTextRecognitionResult bằng phản hồi.

Xử lý phản hồi nhận dạng văn bản

Thêm đoạn mã sau vào processTextRecognitionResult trong lớp MainActivity để phân tích cú pháp kết quả và hiển thị kết quả đó trong ứng dụng của bạn.

MainActivity.java

private void processTextRecognitionResult(Text texts) {
   List<Text.TextBlock> blocks = texts.getTextBlocks();
   if (blocks.size() == 0) {
       showToast("No text found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < blocks.size(); i++) {
       List<Text.Line> lines = blocks.get(i).getLines();
       for (int j = 0; j < lines.size(); j++) {
           List<Text.Element> elements = lines.get(j).getElements();
           for (int k = 0; k < elements.size(); k++) {
               Graphic textGraphic = new TextGraphic(mGraphicOverlay, elements.get(k));
               mGraphicOverlay.add(textGraphic);

           }
       }
   }
}

Chạy ứng dụng trên trình mô phỏng

Bây giờ, hãy nhấp vào Chạy ( execute.png) trong thanh công cụ của Android Studio. Sau khi ứng dụng tải xong, hãy nhớ chọn Test Image 1(Text) trong trường thả xuống rồi nhấp vào nút FIND TEXT.

Giờ đây, ứng dụng của bạn sẽ có dạng như hình ảnh bên dưới, cho thấy kết quả nhận dạng văn bản và các hộp giới hạn được phủ lên trên hình ảnh gốc.

10b12d0e8822eaf5.png

Ảnh: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0

Chúc mừng bạn đã thêm tính năng nhận dạng văn bản trên thiết bị vào ứng dụng của mình bằng Bộ công cụ học máy! Tính năng nhận dạng văn bản trên thiết bị rất phù hợp với nhiều trường hợp sử dụng vì tính năng này hoạt động ngay cả khi ứng dụng của bạn không có kết nối Internet và đủ nhanh để sử dụng trên cả hình ảnh tĩnh cũng như khung hình video trực tiếp.

6. Thêm tính năng phát hiện đường nét khuôn mặt trên thiết bị

Trong bước này, chúng ta sẽ thêm chức năng vào ứng dụng để nhận dạng đường nét khuôn mặt trong hình ảnh.

Thiết lập và chạy tính năng phát hiện đường viền khuôn mặt trên thiết bị đối với một hình ảnh

Thêm nội dung sau vào phương thức runFaceContourDetection của lớp MainActivity:

MainActivity.java

private void runFaceContourDetection() {
   InputImage image = InputImage.fromBitmap(mSelectedImage, 0);
   FaceDetectorOptions options =
           new FaceDetectorOptions.Builder()
                   .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_FAST)
                   .setContourMode(FaceDetectorOptions.CONTOUR_MODE_ALL)
                   .build();

   mFaceButton.setEnabled(false);
   FaceDetector detector = FaceDetection.getClient(options);
   detector.process(image)
           .addOnSuccessListener(
                   new OnSuccessListener<List<Face>>() {
                       @Override
                       public void onSuccess(List<Face> faces) {
                           mFaceButton.setEnabled(true);
                           processFaceContourDetectionResult(faces);
                       }
                   })
           .addOnFailureListener(
                   new OnFailureListener() {
                       @Override
                       public void onFailure(@NonNull Exception e) {
                           // Task failed with an exception
                           mFaceButton.setEnabled(true);
                           e.printStackTrace();
                       }
                   });

}

Đoạn mã trên định cấu hình trình phát hiện đường viền khuôn mặt và gọi hàm processFaceContourDetectionResult bằng phản hồi.

Xử lý phản hồi phát hiện đường nét khuôn mặt

Thêm đoạn mã sau vào processFaceContourDetectionResult trong lớp MainActivity để phân tích cú pháp kết quả và hiển thị kết quả đó trong ứng dụng của bạn.

MainActivity.java

private void processFaceContourDetectionResult(List<Face> faces) {
   // Task completed successfully
   if (faces.size() == 0) {
       showToast("No face found");
       return;
   }
   mGraphicOverlay.clear();
   for (int i = 0; i < faces.size(); ++i) {
       Face face = faces.get(i);
       FaceContourGraphic faceGraphic = new FaceContourGraphic(mGraphicOverlay);
       mGraphicOverlay.add(faceGraphic);
       faceGraphic.updateFace(face);
   }
}

Chạy ứng dụng trên trình mô phỏng

Bây giờ, hãy nhấp vào Chạy ( execute.png) trong thanh công cụ của Android Studio. Sau khi ứng dụng tải xong, hãy nhớ chọn Test Image 2 (Face) trong trường thả xuống rồi nhấp vào nút FIND FACE CONTOUR.

Bây giờ, ứng dụng của bạn sẽ trông giống như hình ảnh bên dưới, cho thấy kết quả phát hiện đường viền khuôn mặt và cho thấy đường viền khuôn mặt dưới dạng các điểm được phủ lên trên hình ảnh gốc.

f9ff2fcbf63f0f3b.png

Chúc mừng bạn đã thêm tính năng phát hiện đường viền khuôn mặt trên thiết bị vào ứng dụng của mình bằng Bộ công cụ học máy! Tính năng phát hiện đường nét khuôn mặt trên thiết bị rất phù hợp với nhiều trường hợp sử dụng vì tính năng này hoạt động ngay cả khi ứng dụng của bạn không có kết nối Internet và đủ nhanh để sử dụng trên cả ảnh tĩnh cũng như khung hình video trực tiếp.

7. Xin chúc mừng!

Bạn đã sử dụng thành công Bộ công cụ học máy để dễ dàng thêm các chức năng học máy nâng cao vào ứng dụng của mình.

Nội dung đã đề cập

  • Cách thêm Bộ công cụ học máy vào ứng dụng Android
  • Cách sử dụng tính năng nhận dạng văn bản trên thiết bị trong Bộ công cụ học máy để tìm văn bản trong hình ảnh
  • Cách sử dụng đường viền khuôn mặt trên thiết bị trong Bộ công cụ học máy để xác định các đặc điểm khuôn mặt trong hình ảnh

Các bước tiếp theo

  • Sử dụng Bộ công cụ học máy trong ứng dụng Android của riêng bạn!

Tìm hiểu thêm