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 đến các ứng dụng Android và Android 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.
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 Vision và TensorFlow Lite vào một SDK duy nhất. Cho dù bạn cần sức mạnh của 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 có thể đáp ứng chỉ bằng một vài dòng mã.
Lớp học lập trình này sẽ hướng dẫn bạn các bước đơn giản để thêm tính năng Nhận dạng văn bản, Nhận dạng ngôn ngữ và Dịch từ nguồn cấp dữ liệu từ camera theo thời gian thực vào ứng dụng Android hiện có. Lớp học lập trình này cũng sẽ nêu bật các phương pháp hay nhất khi sử dụng CameraX với các API của Bộ công cụ học máy.
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 của bạn sẽ sử dụng API Nhận dạng văn bản trên thiết bị của Bộ công cụ học máy để nhận dạng văn bản từ nguồn cấp dữ liệu từ camera theo thời gian thực. Ứng dụng này sẽ sử dụng API Nhận dạng ngôn ngữ của Bộ công cụ học máy để xác định ngôn ngữ của văn bản được nhận dạng. Cuối cùng, ứng dụng của bạn sẽ dịch văn bản này sang bất kỳ ngôn ngữ nào trong số 59 ngôn ngữ được hỗ trợ bằng cách sử dụng Translation API của Bộ công cụ học máy.
Cuối cùng, bạn sẽ thấy một hình ảnh tương tự như hình bên dưới.

Kiến thức bạn sẽ học được
- Cách sử dụng Bộ công cụ học máy ML Kit để dễ dàng thêm các chức năng học máy vào mọi ứng dụng Android.
- API Nhận dạng văn bản, Nhận dạng ngôn ngữ, Dịch của Bộ công cụ học máy và các chức năng của chúng.
- Cách sử dụng thư viện CameraX với các API của Bộ công cụ học máy.
Bạn cần có
- Một phiên bản Android Studio gần đây (phiên bản 4.0 trở lên)
- Một thiết bị Android thực
- Mã mẫu
- Có kiến thức cơ bản về phát triển Android bằng Kotlin
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 cung cấp và triển khai cho bạ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) 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 translate.
Thư mục con translate trong kho lưu trữ mlkit-android chứa thư mục sau:
starter – Mã khởi đầu mà bạn sẽ xây dựng trong lớp học lập trình này.
3. Nhập dự án và xác minh các phần phụ thuộc của Bộ công cụ học máy và CameraX
Nhập dự án khởi đầu vào Android Studio. Trong tệp app/build.gradle, hãy xác minh rằng bạn đã thêm các phần phụ thuộc cần thiết của Bộ công cụ học máy và CameraX:
// CameraX dependencies
def camerax_version = "1.0.0-beta05"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-view:1.0.0-alpha12"
// ML Kit dependencies
implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.0.0'
implementation 'com.google.mlkit:language-id:16.0.0'
implementation 'com.google.mlkit:translate:16.0.0'
4. Chạy ứng dụng khởi đầu
Giờ đây, sau khi nhập dự án vào Android Studio và kiểm tra các phần phụ thuộc của Bộ công cụ học máy, bạn đã sẵn sàng chạy ứng dụng lần đầu tiên! Nhấp vào Run (Chạy) (
) trong thanh công cụ của Android Studio.
Ứng dụng sẽ khởi chạy trên thiết bị của bạn và bạn có thể hướng camera vào nhiều văn bản để xem nguồn cấp dữ liệu trực tiếp, nhưng chức năng nhận dạng văn bản chưa được triển khai.

5. Thêm tính năng nhận dạng văn bản
Trong bước này, chúng ta sẽ thêm chức năng vào ứng dụng để nhận dạng văn bản từ camera video.
Tạo thực thể cho Trình nhận dạng văn bản của Bộ công cụ học máy
Thay thế TODO ở đầu TextAnalyzer.kt để khởi tạo TextRecognition. Đây là cách bạn lấy một đối tượng xử lý cho trình nhận dạng văn bản để sử dụng trong các bước sau. Chúng ta cũng cần thêm trình phát hiện làm trình quan sát vòng đời để đóng trình phát hiện đúng cách khi không còn cần đến.
TextAnalyzer.kt
private val detector = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
init {
lifecycle.addObserver(detector)
}
Chạy tính năng nhận dạng văn bản trên một Hình ảnh đầu vào (được tạo bằng vùng đệm từ camera)
Thư viện CameraX cung cấp một luồng hình ảnh từ camera, sẵn sàng cho việc phân tích hình ảnh. Thay thế phương thức recognizeText() trong lớp TextAnalyzer để sử dụng tính năng nhận dạng văn bản của Bộ công cụ học máy trên mỗi khung hình.
TextAnalyzer.kt
private fun recognizeText(
image: InputImage
): Task<Text> {
// Pass image to an ML Kit Vision API
return detector.process(image)
.addOnSuccessListener { text ->
// Task completed successfully
result.value = text.text
}
.addOnFailureListener { exception ->
// Task failed with an exception
Log.e(TAG, "Text recognition error", exception)
val message = getErrorMessage(exception)
message?.let {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
}
}
}
Dòng sau đây cho biết cách chúng ta gọi phương thức trên để bắt đầu thực hiện hoạt động nhận dạng văn bản. Thêm dòng sau vào cuối phương thức analyze(). Xin lưu ý rằng bạn phải gọi imageProxy.close sau khi phân tích xong hình ảnh, nếu không, nguồn cấp dữ liệu trực tiếp từ camera sẽ không thể xử lý thêm hình ảnh để phân tích.
TextAnalyzer.kt
recognizeText(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
Chạy ứng dụng trên thiết bị
Bây giờ, hãy nhấp vào Chạy (
) trong thanh công cụ của Android Studio. Sau khi tải, ứng dụng sẽ bắt đầu nhận dạng văn bản từ camera theo thời gian thực. Hướng camera vào một đoạn văn bản bất kỳ để xác nhận. Nếu ứng dụng không nhận dạng được văn bản nào, hãy thử "đặt lại" tính năng phát hiện bằng cách hướng camera vào một khoảng trống trước khi hướng camera vào văn bản.
6. Thêm tính năng nhận dạng ngôn ngữ
Tạo thực thể Trình nhận dạng ngôn ngữ của Bộ công cụ học máy
MainViewModel.kt nằm trong thư mục chính. Chuyển đến tệp đó rồi thêm trường sau vào MainViewModel.kt. Đây là cách bạn lấy một giá trị nhận dạng ngôn ngữ để dùng trong bước tiếp theo.
MainViewModel.kt
private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
Ngoài ra, bạn cũng cần đảm bảo rằng các ứng dụng khách được tắt đúng cách khi không còn cần thiết. Để làm việc này, hãy ghi đè phương thức onCleared() của ViewModel.
MainViewModel.kt
override fun onCleared() {
languageIdentifier.close()
translators.evictAll()
}
Chạy tính năng nhận dạng ngôn ngữ trên thiết bị đối với văn bản được phát hiện
Sử dụng Trình nhận dạng ngôn ngữ của Bộ công cụ học máy để lấy ngôn ngữ của văn bản được phát hiện trong hình ảnh.
Thay thế TODO trong định nghĩa trường sourceLang trong MainViewModel.kt bằng mã sau. Đoạn mã này gọi phương thức nhận dạng ngôn ngữ và chỉ định kết quả nếu kết quả đó không phải là "không xác định" ("und"). Ngôn ngữ không xác định có nghĩa là API không thể xác định ngôn ngữ dựa trên danh sách ngôn ngữ được hỗ trợ.
MainViewModel.kt
val sourceLang = Transformations.switchMap(sourceText) { text ->
val result = MutableLiveData<Language>()
languageIdentifier.identifyLanguage(text)
.addOnSuccessListener { languageCode ->
if (languageCode != "und")
result.value = Language(languageCode)
}
result
}
Chạy ứng dụng trên thiết bị
Bây giờ, hãy nhấp vào Chạy (
) trong thanh công cụ của Android Studio. Sau khi tải, ứng dụng sẽ bắt đầu nhận dạng văn bản từ camera và xác định ngôn ngữ của văn bản theo thời gian thực. Hướng camera vào một đoạn văn bản bất kỳ để xác nhận.
7. Thêm bản dịch
Thay thế hàm translate() trong MainViewModel.kt bằng mã sau. Hàm này lấy giá trị ngôn ngữ gốc, giá trị ngôn ngữ đích và văn bản nguồn rồi thực hiện bản dịch. Lưu ý rằng nếu mô hình ngôn ngữ đích đã chọn chưa được tải xuống thiết bị, chúng ta sẽ gọi downloadModelIfNeeded() để tải xuống, sau đó tiến hành dịch.
MainViewModel.kt
private fun translate(): Task<String> {
val text = sourceText.value
val source = sourceLang.value
val target = targetLang.value
if (modelDownloading.value != false || translating.value != false) {
return Tasks.forCanceled()
}
if (source == null || target == null || text == null || text.isEmpty()) {
return Tasks.forResult("")
}
val sourceLangCode = TranslateLanguage.fromLanguageTag(source.code)
val targetLangCode = TranslateLanguage.fromLanguageTag(target.code)
if (sourceLangCode == null || targetLangCode == null) {
return Tasks.forCanceled()
}
val options = TranslatorOptions.Builder()
.setSourceLanguage(sourceLangCode)
.setTargetLanguage(targetLangCode)
.build()
val translator = translators[options]
modelDownloading.setValue(true)
// Register watchdog to unblock long running downloads
Handler().postDelayed({ modelDownloading.setValue(false) }, 15000)
modelDownloadTask = translator.downloadModelIfNeeded().addOnCompleteListener {
modelDownloading.setValue(false)
}
translating.value = true
return modelDownloadTask.onSuccessTask {
translator.translate(text)
}.addOnCompleteListener {
translating.value = false
}
}
Chạy ứng dụng trên trình mô phỏng
Bây giờ, hãy nhấp vào Chạy (
) trong thanh công cụ của Android Studio. Sau khi tải, ứng dụng sẽ có dạng như hình ảnh động bên dưới, cho thấy kết quả nhận dạng văn bản và ngôn ngữ đã xác định, cũng như văn bản được dịch sang ngôn ngữ đã chọn. Bạn có thể chọn bất kỳ ngôn ngữ nào trong số 59 ngôn ngữ.

8. Xin chúc mừng!
Chúc mừng bạn đã thêm tính năng nhận dạng văn bản, nhận dạng ngôn ngữ và dịch trên thiết bị vào ứng dụng của mình bằng Bộ công cụ học máy! Giờ đây, bạn có thể nhận dạng văn bản và ngôn ngữ của văn bản đó trong nguồn cấp dữ liệu từ camera trực tiếp, đồng thời dịch văn bản này sang ngôn ngữ bạn chọn, tất cả đều theo thời gian thực.
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 để nhận dạng văn bản trong hình ảnh
- Cách sử dụng tính năng nhận dạng ngôn ngữ trên thiết bị trong Bộ công cụ học máy để xác định ngôn ngữ của văn bản
- Cách sử dụng tính năng dịch trên thiết bị trong Bộ công cụ học máy để dịch văn bản linh hoạt sang 59 ngôn ngữ
- Cách sử dụng CameraX kết hợp với các API của Bộ công cụ học máy
Các bước tiếp theo
- Sử dụng Bộ công cụ học máy và CameraX trong ứng dụng Android của riêng bạn!