คู่มือการตรวจหาภาษาสำหรับ 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 เพิ่มรายการนี้ จะขึ้นอยู่กับไฟล์ build.gradle ของโปรเจ็กต์การพัฒนาแอป Android ของคุณ คุณสามารถนำเข้าทรัพยากร Dependency ที่จำเป็นด้วยโค้ดต่อไปนี้

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

รุ่น

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

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

<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 ฟังก์ชันคลาส 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