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à Android trong một gói mạnh mẽ nhưng dễ sử dụng. Dù mới làm quen 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ỉ trong vài dòng mã. Bạn không cần có kiến thức sâu về mạng nơ-ron hoặ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. Dù bạn cần sức mạnh của các tính năng theo thời gian thực của mô hình trên thiết bị Mobile Vision hay tính 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ể thực hiện được chỉ với 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, Xác định 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 về cách 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 Xác định 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ữ bằng API Dịch 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 SDK của Bộ công cụ học máy để dễ dàng thêm các tính năng Học máy vào bất kỳ ứng dụng Android nào.
- API Nhận dạng văn bản, Xác định ngôn ngữ, Dịch của Bộ công cụ học máy và các tính 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 (v4.0+)
- Một thiết bị Android thực
- Mã mẫu
- 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) có tất cả các tài nguyên bạn cần. Đối với 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 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 các phần phụ thuộc cần thiết của Bộ công cụ học máy và CameraX đã được đưa vào:
// 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, bạn đã 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 (
) 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 vẫ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ể Trình phát hiện văn bản của Bộ công cụ học máy
Thay thế TODO ở đầu TextAnalyzer.kt để tạo thực thể TextRecognition. Đây là cách bạn lấy một 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ữa.
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 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 quá trình 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 ả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 tính nă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 từ camera trực tiếp 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 Run (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 bất kỳ văn bản nào để xác nhận. Nếu ứng dụng của bạn 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 xác định ngôn ngữ
Tạo thực thể Trình xác định 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 và thêm trường sau vào MainViewModel.kt. Đây là cách bạn lấy một trình xác định ngôn ngữ để sử dụng trong bước sau.
MainViewModel.kt
private val languageIdentifier = LanguageIdentification.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
Ngoài ra, bạn cũng muố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 nữa. Để thực hiện 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 xác định 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 xác định 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 từ 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 xác định ngôn ngữ và gán 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 các 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 Run (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 bất kỳ văn bản nào để 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 ý cách 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() để thực hiện việc này, sau đó tiến hành bản 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 Run (Chạy) (
) trong thanh công cụ của Android Studio. Sau khi tải, ứng dụng sẽ trông giố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ữ được 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!
Xin chúc mừng! Bạn vừa thêm tính năng nhận dạng văn bản, xác định 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 đó từ nguồn cấp dữ liệu từ camera trực tiếp và dịch văn bản này sang một ngôn ngữ mà bạn chọn 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 xác định 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 một cách 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!