ML Kit เป็น SDK สําหรับอุปกรณ์เคลื่อนที่ที่นําความเชี่ยวชาญด้านแมชชีนเลิร์นนิงของ Google มาสู่ Android และแอป Android ในแพ็กเกจที่มีประสิทธิภาพแต่ใช้งานง่าย ไม่ว่าคุณจะเพิ่งเริ่มหรือมีประสบการณ์ด้านแมชชีนเลิร์นนิง ก็สามารถใช้ฟังก์ชันการทำงานที่ต้องการได้ง่ายๆ ด้วยโค้ดเพียงไม่กี่บรรทัด คุณไม่จำเป็นต้องมีความรู้เชิงลึกเกี่ยวกับโครงข่ายประสาทหรือการเพิ่มประสิทธิภาพโมเดลเพื่อเริ่มต้นใช้งาน
หลักการทำงาน
ML Kit ช่วยให้การใช้เทคนิค ML ในแอปเป็นเรื่องง่ายด้วยการนำเทคโนโลยี ML ของ Google เช่น Mobile Vision และ TensorFlow Lite มารวมไว้ใน SDK เดียว ไม่ว่าคุณต้องการความสามารถแบบเรียลไทม์ของโมเดลในอุปกรณ์ของ Mobile Vision หรือความยืดหยุ่นของโมเดล TensorFlow Lite ที่กําหนดเอง ML Kit ก็ทําได้โดยใช้โค้ดเพียงไม่กี่บรรทัด
โค้ดแล็บนี้จะแนะนำขั้นตอนง่ายๆ ในการเพิ่มการจดจำข้อความ การระบุภาษา และการแปลจากฟีดกล้องแบบเรียลไทม์ลงในแอป Android ที่มีอยู่ นอกจากนี้ โค้ดแล็บนี้จะไฮไลต์แนวทางปฏิบัติแนะนำเกี่ยวกับการใช้ CameraX กับ ML Kit API ด้วย
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะได้สร้างแอป Android ด้วย ML Kit แอปจะใช้ ML Kit Text Recognition on-device API เพื่อจดจำข้อความจากฟีดกล้องแบบเรียลไทม์ โดยจะใช้ ML Kit Language Identification API เพื่อระบุภาษาของข้อความที่จดจำได้ สุดท้าย แอปจะแปลข้อความนี้เป็นภาษาใดก็ได้จาก 59 ภาษาที่เลือกโดยใช้ ML Kit Translation API
สุดท้าย คุณควรเห็นภาพคล้ายกับด้านล่าง
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ ML Kit SDK เพื่อเพิ่มความสามารถด้านแมชชีนเลิร์นนิงลงในแอป Android ได้อย่างง่ายดาย
- การจดจำข้อความ การระบุภาษา และ Translation API ของ ML Kit รวมถึงความสามารถของ API เหล่านี้
- วิธีใช้ไลบรารี CameraX กับ ML Kit API
สิ่งที่ต้องมี
- Android Studio เวอร์ชันล่าสุด (v4.0 ขึ้นไป)
- อุปกรณ์ Android จริง
- โค้ดตัวอย่าง
- ความรู้พื้นฐานเกี่ยวกับการพัฒนาแอป Android ใน Kotlin
Codelab นี้จะเน้นที่ ML Kit เรามีแนวคิดและบล็อกโค้ดที่ไม่เกี่ยวข้องซึ่งติดตั้งใช้งานให้คุณแล้ว
ดาวน์โหลดโค้ด
คลิกลิงก์ต่อไปนี้เพื่อดาวน์โหลดโค้ดทั้งหมดของ Codelab นี้
แตกไฟล์ ZIP ที่ดาวน์โหลด ซึ่งจะแตกไฟล์โฟลเดอร์รูท (mlkit-android
) ที่มีทรัพยากรทั้งหมดที่คุณต้องการ สําหรับโค้ดแล็บนี้ คุณจะใช้ได้เฉพาะทรัพยากรในไดเรกทอรีย่อย translate
เท่านั้น
ไดเรกทอรีย่อย translate
ในที่เก็บ mlkit-android
มีไดเรกทอรีต่อไปนี้
starter - โค้ดเริ่มต้นที่คุณนำไปต่อยอดใน Codelab นี้ได้
ในไฟล์ app/build.gradle
ให้ตรวจสอบว่ามีไลบรารี ML Kit และ 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'
เมื่อนําเข้าโปรเจ็กต์ไปยัง Android Studio และตรวจสอบรายการที่ต้องใช้ของ ML Kit แล้ว คุณก็พร้อมเรียกใช้แอปเป็นครั้งแรก เริ่มโปรแกรมจำลอง Android Studio แล้วคลิกเรียกใช้ () ในแถบเครื่องมือของ Android Studio
แอปควรเปิดขึ้นในอุปกรณ์และคุณสามารถเล็งกล้องไปที่ข้อความต่างๆ เพื่อดูฟีดสดได้ แต่ยังไม่ได้ติดตั้งใช้งานฟังก์ชันการจดจำข้อความ
ในขั้นตอนนี้ เราจะเพิ่มฟังก์ชันการทำงานลงในแอปเพื่อจดจำข้อความจากกล้องวิดีโอ
สร้างอินสแตนซ์ตัวตรวจจับข้อความ ML Kit
เพิ่มช่องต่อไปนี้ที่ด้านบนของ TextAnalyzer.kt
วิธีนี้ช่วยให้คุณได้รับแฮนเดิลไปยังโปรแกรมจดจำข้อความเพื่อใช้ในขั้นตอนต่อๆ ไป
TextAnalyzer.kt
private val detector = TextRecognition.getClient()
เรียกใช้การจดจําข้อความในอุปกรณ์บนรูปภาพ Vision ( สร้างด้วยบัฟเฟอร์จากกล้อง)
ไลบรารี CameraX จะให้สตรีมรูปภาพจากกล้องที่พร้อมสําหรับการวิเคราะห์รูปภาพ แทนที่เมธอด recognizeTextOnDevice()
ในคลาส TextAnalyzer เพื่อใช้การจดจำข้อความ ML Kit ในเฟรมรูปภาพแต่ละเฟรม
TextAnalyzer.kt
private fun recognizeTextOnDevice(
image: InputImage
): Task<Text> {
// Pass image to an ML Kit Vision API
return detector.process(image)
.addOnSuccessListener { visionText ->
// Task completed successfully
result.value = visionText.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()
}
}
}
บรรทัดต่อไปนี้แสดงวิธีที่เราเรียกใช้เมธอดข้างต้นเพื่อเริ่มการจดจำข้อความ เพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของเมธอด analyze()
โปรดทราบว่าคุณต้องเรียกใช้ imageProxy.close
เมื่อการวิเคราะห์รูปภาพเสร็จสมบูรณ์แล้ว ไม่เช่นนั้นฟีดกล้องสดจะประมวลผลรูปภาพเพิ่มเติมเพื่อการวิเคราะห์ไม่ได้
TextAnalyzer.kt
recognizeTextOnDevice(InputImage.fromBitmap(croppedBitmap, 0)).addOnCompleteListener {
imageProxy.close()
}
เรียกใช้แอปในอุปกรณ์
จากนั้นคลิกเรียกใช้ () ในแถบเครื่องมือของ Android Studio เมื่อโหลดแอปแล้ว แอปจะเริ่มจดจำข้อความจากกล้องแบบเรียลไทม์ เล็งกล้องไปที่ข้อความที่ต้องการเพื่อยืนยัน
สร้างอินสแตนซ์ตัวระบุภาษา ML Kit
เพิ่มช่องต่อไปนี้ลงใน MainViewModel.kt
วิธีนี้จะช่วยให้คุณได้รับแฮนเดิลสำหรับตัวระบุภาษาเพื่อใช้ในขั้นตอนถัดไป
MainViewModel.kt
private val languageIdentification = LanguageIdentification.getClient()
เรียกใช้การระบุภาษาในอุปกรณ์กับข้อความที่ตรวจพบ
ใช้ตัวระบุภาษา ML Kit เพื่อดูภาษาของข้อความที่ตรวจพบจากรูปภาพ
แทนที่ TODO ในคำจำกัดความของช่อง sourceLang
ใน MainViewModel.kt
ด้วยโค้ดต่อไปนี้ ข้อมูลโค้ดนี้เรียกเมธอดการระบุภาษาและกำหนดผลลัพธ์หากไม่ได้กำหนดไว้ ("und")
MainViewModel.kt
languageIdentification.identifyLanguage(text)
.addOnSuccessListener {
if (it != "und")
result.value = Language(it)
}
เรียกใช้แอปในอุปกรณ์
จากนั้นคลิกเรียกใช้ () ในแถบเครื่องมือของ Android Studio เมื่อโหลดแอปแล้ว แอปจะเริ่มจดจำข้อความจากกล้องและระบุภาษาของข้อความแบบเรียลไทม์ เล็งกล้องไปที่ข้อความที่ต้องการเพื่อยืนยัน
แทนที่ฟังก์ชัน translate()
ใน MainViewModel.kt
ด้วยโค้ดต่อไปนี้ ฟังก์ชันนี้จะรับค่าภาษาต้นฉบับ ค่าภาษาเป้าหมาย และข้อความต้นฉบับ แล้วทำการแปล โปรดทราบว่าหากโมเดลภาษาเป้าหมายที่เลือกยังไม่ได้ดาวน์โหลดลงในอุปกรณ์ เราจะเรียกใช้ downloadModelIfNeeded()
เพื่อดาวน์โหลด จากนั้นจึงดำเนินการแปลต่อ
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
}
}
เรียกใช้แอปในโปรแกรมจำลอง
จากนั้นคลิกเรียกใช้ () ในแถบเครื่องมือของ Android Studio เมื่อโหลดแอปแล้ว แอปควรมีลักษณะเหมือนภาพเคลื่อนไหวด้านล่าง ซึ่งแสดงการจดจำข้อความและผลการระบุภาษา รวมถึงข้อความที่แปลเป็นภาษาที่เลือก คุณเลือกภาษาใดก็ได้จาก 59 ภาษา
ขอแสดงความยินดี คุณเพิ่งเพิ่มการจดจำข้อความ การระบุภาษา และการแปลในอุปกรณ์ลงในแอปโดยใช้ ML Kit ตอนนี้คุณสามารถจดจำข้อความและภาษาของข้อความจากฟีดกล้องสด และแปลข้อความเป็นภาษาที่เลือกได้แบบเรียลไทม์
สิ่งที่เราได้พูดถึง
- วิธีเพิ่ม ML Kit ลงในแอป Android
- วิธีใช้การจดจำข้อความบนอุปกรณ์ใน ML Kit เพื่อจดจำข้อความในรูปภาพ
- วิธีใช้การระบุภาษาในอุปกรณ์ใน ML Kit เพื่อระบุภาษาของข้อความ
- วิธีใช้การแปลในอุปกรณ์ใน ML Kit เพื่อแปลข้อความเป็น 59 ภาษาแบบไดนามิก
- วิธีใช้ CameraX ร่วมกับ ML Kit API
ขั้นตอนถัดไป
- ใช้ ML Kit และ CameraX ในแอป Android ของคุณเอง