คู่มือการตรวจหาภาษาสำหรับ Android

งาน MediaPipe Language Detector ให้คุณระบุภาษาของข้อความได้ วิธีการเหล่านี้จะแสดงวิธีใช้ตัวตรวจจับภาษากับแอป Android ตัวอย่างโค้ดที่อธิบายไว้ในวิธีการเหล่านี้จะอยู่ใน GitHub

คุณดูงานนี้ในการใช้งานจริงได้โดยดูการสาธิต ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่าของงานนี้ได้ที่ภาพรวม

ตัวอย่างโค้ด

โค้ดตัวอย่างสำหรับตัวตรวจจับภาษาช่วยให้คุณติดตั้งใช้งานงานนี้ได้ง่ายๆ เพื่อใช้เป็นข้อมูลอ้างอิง โค้ดนี้จะช่วยให้คุณทดสอบงานนี้และเริ่มต้นสร้างฟีเจอร์การตรวจจับภาษาของคุณเอง คุณสามารถเรียกดูโค้ดตัวอย่างตัวตรวจจับภาษาได้ใน GitHub

ดาวน์โหลดโค้ด

วิธีการต่อไปนี้แสดงวิธีสร้างสำเนาโค้ดตัวอย่างในเครื่องโดยใช้เครื่องมือบรรทัดคำสั่งการควบคุมเวอร์ชัน git

วิธีดาวน์โหลดโค้ดตัวอย่าง

  1. โคลนที่เก็บ Git โดยใช้คำสั่งต่อไปนี้
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. กำหนดค่าอินสแตนซ์ Git เพื่อใช้การชำระเงินแบบกะทัดรัด (ไม่บังคับ) เพื่อให้คุณมีเฉพาะไฟล์สำหรับแอปตัวอย่าง Language Detector ดังนี้
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/languagedetector/android
    

ดูวิธีการตั้งค่าและเรียกใช้ตัวอย่างด้วย Android Studio ได้ในตัวอย่างวิธีการตั้งค่าโค้ดในคู่มือการตั้งค่าสำหรับ Android

องค์ประกอบหลัก

ไฟล์ต่อไปนี้มีโค้ดที่สำคัญสำหรับแอปตัวอย่างการจัดประเภทข้อความ

  • LanguageDetectorHelper.kt - เริ่มต้นตัวตรวจจับภาษาและจัดการการเลือกโมเดล
  • ResultsAdapter.kt - จัดการและจัดรูปแบบผลการตรวจหา
  • MainActivity.kt - ใช้งานแอปพลิเคชัน รวมถึงการเรียกใช้ LanguageDetectorHelper และ ResultsAdapter

ตั้งค่า

ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมการพัฒนาและโปรเจ็กต์โค้ดเพื่อใช้ตัวตรวจจับภาษาโดยเฉพาะ ดูข้อมูลทั่วไปเกี่ยวกับการตั้งค่าสภาพแวดล้อมการพัฒนาเพื่อใช้งาน MediaPipe รวมถึงข้อกำหนดเวอร์ชันแพลตฟอร์มได้ที่คำแนะนำการตั้งค่าสำหรับ Android

การอ้างอิง

ตัวตรวจจับภาษาใช้ไลบรารี com.google.mediapipe:tasks-text เพิ่มทรัพยากร Dependency นี้ไปยังไฟล์ build.gradle ของโครงการการพัฒนาแอป Android ของคุณ คุณนำเข้าทรัพยากร Dependency ที่จำเป็นได้ด้วยโค้ดต่อไปนี้

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

รุ่น

งานตัวตรวจจับภาษาของ MediaPipe ต้องใช้โมเดลที่ผ่านการฝึกซึ่งเข้ากันได้กับงานนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ฝึกแล้วที่พร้อมใช้งานสำหรับตัวตรวจจับภาษาได้ในภาพรวมงานส่วนโมเดล

เลือกและดาวน์โหลดโมเดล แล้วจัดเก็บไว้ในไดเรกทอรีโปรเจ็กต์ โดยทำดังนี้

<dev-project-root>/src/main/assets

ระบุเส้นทางของโมเดลภายในพารามิเตอร์ ModelName

สร้างงาน

คุณจะใช้ฟังก์ชันใดฟังก์ชันหนึ่งของ createFrom...() เพื่อสร้างงานได้ ฟังก์ชัน createFromOptions() ยอมรับตัวเลือกการกำหนดค่าสำหรับตัวตรวจจับภาษา นอกจากนี้คุณยังเริ่มต้นงานโดยใช้ฟังก์ชันเริ่มต้นของ createFromFile() ได้ด้วย ฟังก์ชัน createFromFile() ยอมรับเส้นทางแบบสัมพัทธ์หรือสัมบูรณ์ไปยังไฟล์โมเดลที่ฝึกแล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่างานได้ที่ตัวเลือกการกำหนดค่า

โค้ดต่อไปนี้แสดงวิธีการสร้างและกำหนดค่างานนี้

// For creating a language detector instance:
LanguageDetectorOptions options =
       LanguageDetectorOptions.builder()
       .setBaseOptions(
          BaseOptions.builder()
            .setModelAssetPath(modelPath)
            .build()
          )
       .build();
LanguageDetector languageDetector = LanguageDetector.createFromOptions(context, options);

ดูตัวอย่างวิธีสร้างงานได้ในฟังก์ชันตัวอย่างโค้ด LanguageDetectorHelper class initDetector()

ตัวเลือกการกำหนดค่า

งานมีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับแอป Android

ชื่อตัวเลือก คำอธิบาย ช่วงของค่า ค่าเริ่มต้น
maxResults ตั้งค่าจำนวนสูงสุดของการคาดคะเนภาษาที่มีคะแนนสูงสุดที่ไม่บังคับเพื่อแสดงผล หากค่านี้น้อยกว่า 0 ระบบจะแสดงผลผลลัพธ์ที่มีอยู่ทั้งหมด ตัวเลขจำนวนบวกใดก็ได้ -1
scoreThreshold ตั้งค่าเกณฑ์คะแนนการคาดการณ์ที่จะลบล้างเกณฑ์ที่ระบุไว้ในข้อมูลเมตาของโมเดล (หากมี) ผลลัพธ์ที่ต่ำกว่าค่านี้ถูกปฏิเสธ จำนวนลอยตัวใดก็ได้ ไม่ได้ตั้งค่า
categoryAllowlist ตั้งค่ารายการที่ไม่บังคับของรหัสภาษาที่อนุญาต หากไม่เว้นว่างไว้ การคาดคะเนภาษาที่ไม่อยู่ในชุดรหัสนี้จะถูกกรองออก ตัวเลือกนี้ใช้ด้วยกันกับ categoryDenylist ไม่ได้ และการใช้ทั้ง 2 ผลลัพธ์จึงเกิดข้อผิดพลาด สตริงใดก็ได้ ไม่ได้ตั้งค่า
categoryDenylist ตั้งค่ารายการที่ไม่บังคับของรหัสภาษาที่ไม่ได้รับอนุญาต หาก ไม่ว่างเปล่า การคาดคะเนภาษาที่ใช้รหัสภาษาในชุดนี้จะถูกกรองออก ตัวเลือกนี้ใช้ด้วยกันกับ categoryAllowlist ไม่ได้ และการใช้ทั้ง 2 ผลลัพธ์จึงเกิดข้อผิดพลาด สตริงใดก็ได้ ไม่ได้ตั้งค่า

เตรียมข้อมูล

ตัวตรวจจับภาษาใช้งานได้กับข้อมูลข้อความ (String) งานนี้จะจัดการการประมวลผลอินพุตข้อมูลล่วงหน้า ซึ่งรวมถึงการแปลงข้อมูลเป็นโทเค็นและการประมวลผลล่วงหน้าของ tensor การประมวลผลล่วงหน้าทั้งหมดจะได้รับการจัดการภายในฟังก์ชัน detect() โดยไม่จำเป็นต้องประมวลผล ข้อความอินพุตล่วงหน้าเพิ่มเติม

String inputText = "Some input text for the language detector";

เรียกใช้งาน

ตัวตรวจจับภาษาจะใช้เมธอด LanguageDetector.detect() เพื่อประมวลผลข้อความอินพุตและคาดการณ์ภาษาของข้อความ คุณควรใช้เทรดการดำเนินการแยกต่างหากสำหรับการดำเนินการตรวจจับเพื่อหลีกเลี่ยงการบล็อกชุดข้อความอินเทอร์เฟซผู้ใช้ Android กับแอป

โค้ดต่อไปนี้แสดงวิธีดำเนินการประมวลผลด้วยโมเดลงานโดยใช้เทรดการดำเนินการแยกต่างหาก

// Predict the language of the input text.
fun classify(text: String) {
    executor = ScheduledThreadPoolExecutor(1)

    executor.execute {
        val results = languageDetector.detect(text)
        listener.onResult(results)
    }
}

ดูตัวอย่างวิธีเรียกใช้งานได้ในตัวอย่างโค้ด LanguageDetectorHelper ฟังก์ชันคลาส detect()

แฮนเดิลและแสดงผลลัพธ์

ตัวตรวจจับภาษาจะแสดงผล LanguageDetectorResult ซึ่งประกอบด้วยรายการการคาดคะเนภาษา รวมถึงความน่าจะเป็นสำหรับการคาดคะเนเหล่านั้น หมวดหมู่ภาษาจะกำหนดไว้ในโมเดล โปรดดูภาพรวมของงานส่วนโมเดลเพื่อดูรายละเอียดเกี่ยวกับโมเดลที่คุณใช้อยู่

ตัวอย่างต่อไปนี้แสดงตัวอย่างข้อมูลเอาต์พุตจากงานนี้

LanguageDetectorResult:
  LanguagePrediction #0:
    language_code: "fr"
    probability: 0.999781

ผลลัพธ์นี้ได้มาจากการเรียกใช้โมเดลกับข้อความอินพุต: "Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent."

คุณดูตัวอย่างวิธีแสดงผลลัพธ์ได้ในคลาสตัวอย่าง ResultsAdapter และคลาสภายใน ViewHolder คลาส