کیت ML Google APIهای Vision یادگیری ماشینی روی دستگاه را برای شناسایی چهرهها، اسکن بارکدها، برچسبگذاری تصاویر و موارد دیگر ارائه میکند. ML Kit Analyzer ادغام ML Kit با برنامه CameraX را آسان تر می کند.
ML Kit Analyzer پیاده سازی رابط ImageAnalysis.Analyzer
است. برای بهینهسازی استفاده از کیت ML ، وضوح هدف پیشفرض (در صورت نیاز) را لغو میکند، تبدیل مختصات را مدیریت میکند و فریمها را به کیت ML میدهد، که نتایج تجزیه و تحلیل انبوه را برمیگرداند.
پیاده سازی ML Kit Analyzer
برای پیاده سازی ML Kit Analyzer، توصیه می کنیم از کلاس CameraController
استفاده کنید که با PreviewView
برای نمایش عناصر UI کار می کند. هنگامی که با استفاده از CameraController
اجرا می شود، ML Kit Analyzer تبدیل مختصات بین جریان اصلی ImageAnalysis
و PreviewView
را برای شما انجام می دهد. این سیستم مختصات هدف را از CameraX دریافت می کند، تبدیل مختصات را محاسبه می کند و آن را برای تجزیه و تحلیل به کلاس Detector
ML Kit ارسال می کند.
برای استفاده از ML Kit Analyzer با CameraController
، setImageAnalysisAnalyzer()
را فراخوانی کنید و یک شی ML Kit Analyzer جدید با موارد زیر در سازنده آن ارسال کنید:
- فهرستی از ML Kit
Detector
که CameraX به ترتیب آنها را فراخوانی می کند. سیستم مختصات هدف که مختصات خروجی کیت ML را تعیین می کند:
-
COORDINATE_SYSTEM_VIEW_REFERENCED
: مختصاتPreviewView
تبدیل شده. -
COORDINATE_SYSTEM_ORIGINAL
: مختصات اصلی جریانImageAnalysis
.
-
Executor
که فراخوانی Consumer را فراخوانی می کند وMlKitAnalyzer.Result
یا نتیجه کیت ML جمع آوری شده از یک قاب دوربین را به برنامه تحویل می دهد.یک
Consumer
، که CameraX زمانی که خروجی کیت ML جدید وجود دارد، آن را فراخوانی می کند.
کد زیر ML Kit Analyzer را با استفاده از CameraController
برای راه اندازی BarcodeScanner
برای شناسایی کدهای QR پیاده سازی می کند:
کاتلین
// 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 Analyzer را با استفاده از کلاس ImageAnalysis
که بخشی از camera-core
است پیاده سازی کنید. با این حال، به دلیل اینکه ImageAnalysis
با PreviewView
ادغام نشده است، باید به صورت دستی تبدیل مختصات را مدیریت کنید. برای اطلاعات بیشتر، به مستندات مرجع ML Kit Analyzer مراجعه کنید.
منابع اضافی
برای یک برنامه دوربین کار با عملکرد ML Kit Analyzer، به نمونه CameraX-MLKit مراجعه کنید.