ML Kit Analyzer

ML Kit Google، میاناهای برنامه‌سازی کاربردی Vision یادگیری ماشین درون‌دستگاهی را برای تشخیص چهره، اسکن کردن رمزینه‌ها، برچسب‌گذاری تصاویر، و غیره ارائه می‌دهد. ML Kit Analyzer ادغام ML Kit با برنامه CameraX را آسان‌تر می‌کند.

«تحلیل‌گر کیت یادگیری ماشین» پیاده‌سازی میانای ImageAnalysis.Analyzer است. این کلاس وضوح هدف پیش‌فرض را (درصورت نیاز) برای بهینه‌سازی استفاده از ML Kit لغو می‌کند، تبدیل‌های مختصات را مدیریت می‌کند، و فریم‌ها را به ML Kit ارسال می‌کند که نتایج تحلیل تجمیعی را برمی‌گرداند.

پیاده‌سازی ML Kit Analyzer

برای پیاده‌سازی ML Kit Analyzer، توصیه می‌کنیم از کلاس CameraController استفاده کنید که با PreviewView برای نمایش عناصر میانای کاربر کار می‌کند. وقتی بااستفاده از CameraController پیاده‌سازی شود، ML Kit Analyzer تبدیل‌های مختصات بین جاری‌سازی ImageAnalysis اصلی و PreviewView را برای شما انجام می‌دهد. این کلاس سیستم مختصات هدف را از CameraX دریافت می‌کند، تبدیل مختصات را محاسبه می‌کند، و آن را برای تجزیه‌وتحلیل به کلاس Detector در ML Kit ارسال می‌کند.

برای استفاده از ML Kit Analyzer با CameraController،‏ setImageAnalysisAnalyzer() را فراخوانی کنید و یک شیء ML Kit Analyzer جدید با موارد زیر در سازنده آن ارسال کنید:

  • فهرستی از Detectorهای ML Kit که CameraX به‌ترتیب و به‌صورت متوالی آن‌ها را فراخوانی می‌کند.
  • سیستم مختصات هدف که مختصات خروجی ML Kit را تعیین می‌کند:

  • یک Executor که فراخوانی برگشت مصرف‌کننده را فراخوانی می‌کند و MlKitAnalyzer.Result یا نتیجه تجمیع‌شده ML Kit از یک قاب دوربین را به برنامه ارائه می‌دهد.

  • یک Consumer که CameraX وقتی خروجی جدید ML Kit وجود دارد آن را فراخوانی می‌کند.

کد زیر ML Kit Analyzer را بااستفاده از CameraController برای راه‌اندازی BarcodeScanner جهت شناسایی رمزینه‌های پاسخ‌سریع پیاده‌سازی می‌کند:

کاتلین

// create BarcodeScanner object
val options = BarcodeScannerOptions.Builder()
  .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
  .build()
val barcodeScanner = BarcodeScanning.getClient(options)

cameraController.setImageAnalysisAnalyzer(
            ContextCompat.getMainExecutor(this),
            MlKitAnalyzer(
                listOf(barcodeScanner),
                COORDINATE_SYSTEM_VIEW_REFERENCED,
                ContextCompat.getMainExecutor(this)
            ) { result: MlKitAnalyzer.Result? ->
    // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.
    }
)

جاوا

// create BarcodeScanner object
BarcodeScannerOptions options = new BarcodeScannerOptions.Builder()
   .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
   .build();
BarcodeScanner barcodeScanner = BarcodeScanning.getClient(options);

cameraController.setImageAnalysisAnalyzer(executor,
    new MlKitAnalyzer(List.of(barcodeScanner), COORDINATE_SYSTEM_VIEW_REFERENCED,
    executor, result -> {
   // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.
 });

در نمونه کد بالا، ML Kit Analyzer موارد زیر را به کلاس Detector از BarcodeScanner ارسال می‌کند:

  • ماتریس تبدیل براساس COORDINATE_SYSTEM_VIEW_REFERENCED که سیستم مختصات هدف را نشان می‌دهد.
  • قاب‌های دوربین.

اگر BarcodeScanner با مشکلی مواجه شود، Detector آن خطایی را برمی‌گرداند، و ML Kit Analyzer آن را به برنامه شما منتقل می‌کند. اگر موفقیت‌آمیز باشد، ML Kit Analyzer MLKitAnalyzer.Result#getValue() را برمی‌گرداند، که در این مورد شیء Barcode است.

همچنین می‌توانید «تحلیل‌گر ML Kit» را بااستفاده از کلاس ImageAnalysis که بخشی از camera-core است پیاده‌سازی کنید. اما چون ImageAnalysis با PreviewView ادغام نشده است، باید تبدیل مختصات را به‌صورت دستی انجام دهید. برای اطلاعات بیشتر، به سند مرجع ML Kit Analyzer مراجعه کنید.

منابع بیشتر

برای برنامه دوربین فعال با عملکرد ML Kit Analyzer، نمونه CameraX-MLKit را ببینید.