1. Giới thiệu
Bộ công cụ học máy là một SDK di động mang kiến thức 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ẽ và dễ sử dụng. Cho dù mới làm quen hay đã có kinh nghiệm về công nghệ học máy, bạn đều có thể dễ dàng triển khai chức năng mình cần 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 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 tính linh hoạt của các mô hình TensorFlow Lite tuỳ chỉnh, Bộ công cụ học máy đều có thể đáp ứng nhu cầu của bạn chỉ với một vài dòng mã.
Trong lớp học lập trình này, bạn sẽ được hướng dẫn từng 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 máy ảnh 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 để sử dụng CameraX với API Bộ công cụ máy học.
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 máy ảnh 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 ngôn ngữ bất kỳ được chọn trong số 59 lựa chọn, bằng cách sử dụng ML Kit Translation API.
Cuối cùng, bạn sẽ thấy nội dung tương tự như hình ảnh bên dưới.
Kiến thức bạn sẽ học được
- Cách sử dụng SDK Bộ công cụ máy học để dễ dàng thêm các tính năng Máy học vào bất kỳ ứng dụng Android nào.
- 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 các API này.
- Cách sử dụng thư viện CameraX với các API 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
- Kiến thức cơ bản về cách phát triển cho 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ả tài nguyên bạn cần. Đối với lớp học lập trình này, bạn 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
có 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 động 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 động
Giờ đây, 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 biểu tượng 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. Tuy nhiên, 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
Ở bước này, chúng ta sẽ thêm chức năng vào ứng dụng của bạn để nhận dạng văn bản trên máy quay video.
Tạo thực thể cho 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 bản sao TextRecognition
. Đây là cách bạn xử lý 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 thiết 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ừ máy ảnh)
Thư viện CameraX cung cấp luồng hình ảnh từ máy ảnh để sẵn sàng 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 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 hoàn tất quá trình phân tích hình ảnh, nếu không, nguồn cấp dữ liệu máy ảnh 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 biểu tượng Run (Chạy) () trên thanh công cụ Android Studio. Sau khi tải, ứng dụng sẽ bắt đầu nhận dạng văn bản từ máy ảnh theo thời gian thực. Hướng máy ảnh 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 máy ảnh vào một khoảng trống trước khi hướng máy ảnh 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ể cho 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 và thêm trường sau vào MainViewModel.kt
. Đây là cách bạn lấy tên xử lý cho giá trị nhận dạng ngôn ngữ để sử 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. Để 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 nhận dạng ngôn ngữ trên thiết bị trên văn bản đã phát hiện
Sử dụng Giá trị 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 từ hình ảnh.
Thay thế TODO
trong phần khai báo 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à gán kết quả nếu kết quả không được 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ị của bạn
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ừ máy ảnh và xác định ngôn ngữ của văn bản theo thời gian thực. Hướng máy ảnh 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ữ nguồn, giá trị ngôn ngữ đích và văn bản nguồn rồi thực hiện việc 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ếp tục 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ẽ 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 vừa 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 đó thông qua nguồn cấp dữ liệu camera trực tiếp, đồng thời dịch văn bản này sang ngôn ngữ 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 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ụ máy học để dịch văn bản một cách linh động sang 59 ngôn ngữ
- Cách sử dụng CameraX kết hợp với các API 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!