CameraX জটিল Camera2 এর উপর একটি সরল এবং সামঞ্জস্যপূর্ণ API প্রদানকারী Android Jetpack লাইব্রেরি। এটি শত শত Android ডিভাইস মডেলের মধ্যে পার্থক্যগুলোকে অ্যাবস্ট্র্যাক্ট করে এবং বিভিন্ন হার্ডওয়্যারে ক্যামেরার একীভূত আচরণ নিশ্চিত করে। Android Developer CameraX Guide (2026) অনুযায়ী, লাইব্রেরিটি 25,000+ Google Play অ্যাপে ব্যবহৃত হয় এবং API Level 21 ও তার উপরের ডিভাইসে কাজ করে।
মূল বিষয়
CameraX Android Jetpack স্যুটের একটি লাইব্রেরি, যা Google 2019 সালে প্রথম প্রকাশ করে পুরনো Camera API এর প্রতিস্থাপন এবং জটিল Camera2 এর সরলীকৃত বিকল্প হিসেবে। CameraX এর মূল দর্শন হল “একবার লিখুন, সব ডিভাইসে চলবে”। লাইব্রেরিটি স্বয়ংক্রিয়ভাবে হার্ডওয়্যার পার্থক্যগুলো সামলায়: ক্যামেরার অবস্থান, সমর্থিত রেজোলিউশন, সেন্সর ওরিয়েন্টেশন এবং উপলব্ধ ফরম্যাট — ডেভেলপারকে ডিভাইস-নির্দিষ্ট কোড লিখতে হয় না।
CameraX আর্কিটেকচার use cases এর উপর নির্মিত: Preview (Viewfinder এ ক্যামেরা ফিড দেখানো), ImageCapture (ছবি তোলা), ImageAnalysis (ML এর জন্য ফ্রেম স্ট্রিম বিশ্লেষণ) এবং VideoCapture (ভিডিও রেকর্ডিং)। প্রতিটি use case একটি স্বাধীন উপাদান যা একত্রিত করা যেতে পারে: ভিউফাইন্ডারের জন্য Preview এবং ML প্রসেসিংয়ের জন্য ImageAnalysis একসাথে চালানো। Google (2026) অনুযায়ী, CameraX 99% Android ডিভাইসে API 21+ সহ সমর্থিত।
CameraX ফ্রন্ট এবং রিয়ার ক্যামেরার মধ্যে স্বয়ংক্রিয় সুইচিং, সেশন পুনরায় তৈরি না করে স্ক্রিন রোটেশনের জন্য সমর্থন, LifecycleOwner এর মাধ্যমে অন্তর্নির্মিত লাইফসাইকেল ব্যবস্থাপনা, একটি Lifecycle প্রক্রিয়ায় use cases বাইন্ডিং, পোর্ট্রেট, HDR এবং নাইট মোডের জন্য Camera2 Extensions সমর্থন এবং বাস্তব ডিভাইস ছাড়া ইউনিট টেস্টিংয়ের জন্য TestableCameraX প্রদান করে।
CameraX চারটি মানক use case সংজ্ঞায়িত করে, প্রতিটি একটি নির্দিষ্ট ক্যামেরা কাজ সমাধান করে। Use cases একত্রিত করা যেতে পারে: সবচেয়ে জনপ্রিয় কম্বিনেশনগুলি হল ক্যামেরা অ্যাপের জন্য Preview + ImageCapture এবং ML স্ক্যানারের জন্য Preview + ImageAnalysis।
| Use Case | উদ্দেশ্য | ক্লাস |
|---|---|---|
| Preview | রিয়েল-টাইমে ক্যামেরা ফিড প্রদর্শন | PreviewView |
| ImageCapture | ফ্ল্যাশ এবং রেজোলিউশন সেটিংস সহ ছবি তোলা | ImageCapture |
| ImageAnalysis | ML প্রসেসিংয়ের জন্য প্রতিটি ফ্রেম বিশ্লেষণ | ImageAnalysis |
| VideoCapture | মাইক্রোফোন সহ ভিডিও রেকর্ডিং (1.1.0-beta থেকে) | VideoCapture |
Preview use case ক্যামেরার ভিডিও স্ট্রিম PreviewView এ প্রদর্শন করে — CameraX লাইব্রেরির একটি বিশেষ View। PreviewView স্বয়ংক্রিয়ভাবে ক্যামেরার আকৃতি অনুপাতের সাথে খাপ খায়, ScaleType (FillCenter, FitCenter) এবং use case পুনরায় তৈরি না করে স্ক্রিন রোটেশন সমর্থন করে। ডেভেলপারকে শুধু ProcessCameraProvider এর মাধ্যমে Preview কে Lifecycle এ বাইন্ড করতে হয়।
ImageAnalysis use case বিশ্লেষণের জন্য প্রতিটি ক্যামেরা ফ্রেম একটি হ্যান্ডলারে পাঠায়: টেক্সট শনাক্তকরণ, মুখ শনাক্তকরণ, QR কোড স্ক্যানিং। বিশ্লেষক YUV_420_888 ফরম্যাটে ফ্রেম গ্রহণ করে — সার্বজনীন Android রঙের স্থান। অপারেটিং মোড (BLOCKING বা NON_BLOCKING) ফ্রেম কিউ নিয়ন্ত্রণ করে: BLOCKING পূর্ববর্তী বিশ্লেষণ শেষ হওয়া পর্যন্ত অপেক্ষা করে, NON_BLOCKING বিলম্বের সময় ফ্রেম বাদ দেয়।
ImageCapture use case ফ্ল্যাশ, রেজোলিউশন এবং কম্প্রেশন সেটিংস সহ ক্যামেরা থেকে ছবি তোলে। JPEG এবং RAW ফরম্যাট সমর্থিত (সামঞ্জস্যপূর্ণ ডিভাইসে)। ImageCapture OnImageCapturedCallback এর মাধ্যমে অ্যাসিঙ্ক্রোনাসভাবে বা ImageCapture.OutputFileOptions এর মাধ্যমে সরাসরি ফাইলে স্ন্যাপশট সংরক্ষণ করে।
VideoCapture use case CameraX 1.1.0 (beta) এ যুক্ত করা হয়েছে এবং 30 FPS এ 4K পর্যন্ত ভিডিও রেকর্ড করার অনুমতি দেয়। Use case স্বয়ংক্রিয়ভাবে Preview এর সাথে সিঙ্ক্রোনাইজ হয়: ভিউফাইন্ডারে ছবি ফাইলে যা রেকর্ড হচ্ছে তার সাথে মেলে। VideoCapture অভ্যন্তরীণভাবে MediaCodec এবং MediaMuxer ব্যবহার করে, ভিডিও কোডেক এবং MP4 কন্টেইনার কনফিগারেশনের জটিলতা লুকিয়ে রেখে।
CameraX এবং Camera2 Android এ ক্যামেরার সাথে কাজ করার দুটি পদ্ধতি। Camera2 একটি নিম্ন-স্তরের API যা ডিভাইসের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়। CameraX একটি উচ্চ-স্তরের অ্যাবস্ট্র্যাকশন যা সাধারণ পরিস্থিতি স্বয়ংক্রিয় করে। এদের মধ্যে পছন্দ প্রকল্পের প্রয়োজনীয়তার উপর নির্ভর করে।
| বৈশিষ্ট্য | CameraX | Camera2 |
|---|---|---|
| API স্তর | উচ্চ (use case) | নিম্ন (পূর্ণ নিয়ন্ত্রণ) |
| ডিভাইস-নির্দিষ্ট কোড | প্রয়োজন নেই | প্রতি ডিভাইসের জন্য প্রয়োজন |
| Lifecycle বাইন্ডিং | স্বয়ংক্রিয় | ম্যানুয়াল |
| এক্সটেনশন | অন্তর্নির্মিত (HDR, Portrait, Night) | OEM বাস্তবায়ন প্রয়োজন |
| বাস্তবায়ন জটিলতা | 15–30 লাইন কোড | 100–300 লাইন কোড |
| API সমর্থন | API 21+ | API 21+ |
| নমনীয়তা | মানক পরিস্থিতি | যেকোনো পরিস্থিতি |
মানক কাজের জন্য CameraX ব্যবহার করুন: ইন-অ্যাপ ক্যামেরা, QR স্ক্যানার, ML স্ট্রিম প্রসেসিং। Camera2 ব্যবহার করুন যখন ম্যানুয়াল এক্সপোজার নিয়ন্ত্রণ, সম্পূর্ণ প্যারামিটার নিয়ন্ত্রণ সহ RAW শুটিং, বা একসাথে একাধিক ক্যামেরার সাথে কাজ করার প্রয়োজন হয়।
আসুন তিনটি প্রধান use cases: Preview, ImageCapture এবং ImageAnalysis ব্যবহার করে একটি Android অ্যাপ্লিকেশনে CameraX এর সম্পূর্ণ সেটআপ পর্যালোচনা করি।
কোডটি ProcessCameraProvider এর মাধ্যমে CameraX কে Activity Lifecycle এ বাইন্ড করে। প্রথমে প্রোভাইডারের একটি ইনস্ট্যান্স অনুরোধ করা হয়, তারপর use cases তৈরি করা হয় এবং বাইন্ডিং সম্পাদন করা হয়।
val cameraProviderFuture =
ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
// Preview তৈরি করা
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(
binding.viewFinder.surfaceProvider
)
}
// ImageCapture তৈরি করা
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
// Lifecycle এ বাইন্ড করা
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}, ContextCompact.getMainExecutor(this))
Kotlin কোড একটি future এর মাধ্যমে ProcessCameraProvider প্রাপ্ত করে, Preview এবং ImageCapture use cases তৈরি করে এবং সেগুলিকে বর্তমান Activity Lifecycle এ বাইন্ড করে। CameraX স্বয়ংক্রিয়ভাবে স্ক্রিন রোটেশন, ক্যামেরা সুইচিং এবং Activity বন্ধ হলে সম্পদ মুক্তি সামলায়।
আসুন ক্যামেরা স্ট্রিমের প্রতি-ফ্রেম প্রসেসিংয়ের জন্য একটি ImageAnalysis use case যোগ করি, উদাহরণস্বরূপ ML Kit এর সাথে একীকরণের জন্য।
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(
ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
)
.build()
imageAnalysis.setAnalyzer(
ContextCompact.getMainExecutor(this)
) { imageProxy ->
// ML Kit এর জন্য YUV কে Bitmap এ রূপান্তর
val bitmap = ImageUtils.yuvToBitmap(imageProxy)
val inputImage = InputImage.fromBitmap(bitmap)
// ML Kit টেক্সট শনাক্তকরণ শুরু
recognizer.process(inputImage)
.addOnSuccessListener { result ->
// ফলাফল প্রক্রিয়াকরণ
processTextResult(result)
}
.addOnCompleteListener {
imageProxy.close()
}
}
KEEP_ONLY_LATEST কৌশল সহ ImageAnalysis শুধুমাত্র সর্বশেষ উপলব্ধ ফ্রেম প্রক্রিয়া করে, পুরনো ফ্রেমগুলি বাদ দিয়ে যদি বিশ্লেষক গতি রাখতে না পারে। প্রতিটি ফ্রেম ML Kit এর জন্য YUV থেকে Bitmap এ রূপান্তরিত হয়, তারপর টেক্সট শনাক্তকরণ শুরু হয়। imageProxy.close() কল করা বাধ্যতামূলক — অন্যথায় CameraX নতুন ফ্রেম দেওয়া বন্ধ করবে।
CameraX Extensions একটি মডিউল যা উন্নত শুটিং মোড যোগ করে: পোর্ট্রেট (পটভূমি ঝাপসা), HDR (বিস্তৃত গতিশীল পরিসর), নাইট মোড (কম আলোয় শুটিং), অটো-রিটাচ (ত্বক সংশোধন) এবং বিউটি মোড। এক্সটেনশনগুলি কেবল সেই ডিভাইসে সক্রিয় হয় যেখানে ক্যামেরা প্রস্তুতকারক OEM বাস্তবায়ন প্রদান করেছে।
CameraX Extensions ব্যবহার করার আগে, আপনাকে পরীক্ষা করতে হবে যে বর্তমান ডিভাইসে এক্সটেনশন উপলব্ধ কিনা। Google ExtensionsManager.isExtensionAvailable এর মাধ্যমে পরীক্ষা করার পরামর্শ দেয়।
val extensionsManager =
ExtensionsManager.getInstance(this)
if (extensionsManager.isExtensionAvailable(
cameraProvider,
CameraSelector.DEFAULT_BACK_CAMERA,
ExtensionMode.BOKEH
)) {
// পোর্ট্রেট মোড সক্রিয় করা
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}
কোডটি ExtensionsManager এর মাধ্যমে BOKEH (পোর্ট্রেট) এক্সটেনশনের জন্য সমর্থন পরীক্ষা করে এবং এটি সক্রিয় করে যদি OEM বাস্তবায়ন উপলব্ধ থাকে। CameraX স্বয়ংক্রিয়ভাবে পোর্ট্রেট মোডের জন্য ক্যামেরা সেটিংস পরিবর্তন করে। যদি এক্সটেনশন উপলব্ধ না হয়, অ্যাপটি ক্র্যাশ ছাড়াই মানক মোডে কাজ চালিয়ে যায়।
CameraX Extensions Android ডেভেলপমেন্টের প্রধান সমস্যাগুলির একটি সমাধান করে: ক্যামেরা খণ্ডিতকরণ। বিভিন্ন ডিভাইসে, পোর্ট্রেট মোড ভিন্নভাবে বাস্তবায়িত হয় — কিছু দ্বৈত লেন্স ব্যবহার করে, অন্যগুলি সফটওয়্যার ঝাপসা ব্যবহার করে। CameraX এই পার্থক্য অ্যাবস্ট্র্যাক্ট করে: ডেভেলপার BOKEH মোড সক্রিয় করে, এবং লাইব্রেরি নিজেই নির্ধারণ করে কিভাবে এটি একটি নির্দিষ্ট ডিভাইসে বাস্তবায়ন করতে হয়। Google যাচাইকৃত OEM অংশীদারদের একটি তালিকা বজায় রাখে: Samsung, Xiaomi, OPPO, vivo, Google Pixel।
CameraX এর সাথে কাজ করার সময়, একসাথে use cases এর সংখ্যার সীমাবদ্ধতা বিবেচনা করা গুরুত্বপূর্ণ: বেশিরভাগ ডিভাইসে সর্বোচ্চ 3টি use case একসাথে চালানো যায়। উদাহরণস্বরূপ, Preview + ImageCapture + ImageAnalysis সব আধুনিক ডিভাইসে কাজ করে, কিন্তু Preview + ImageCapture + VideoCapture বাজেট মডেলে সমর্থিত নাও হতে পারে। CameraX ProcessCameraProvider.checkAvailability() পদ্ধতি প্রদান করে যা বাইন্ডিংয়ের আগে use case সংমিশ্রণ সামঞ্জস্যতা পরীক্ষা করে, রানটাইম ক্র্যাশ এড়াতে সাহায্য করে।
CameraX CameraXFragment বা Compose-সামঞ্জস্যপূর্ণ PreviewView এর মাধ্যমে Jetpack Navigation এর সাথে একীভূত হয়। Compose এর জন্য, AndroidView উপাদান ব্যবহার করা হয়, যাতে PreviewView এম্বেড করা হয়। CameraX ক্যামেরা সেশন অবস্থা না হারিয়ে স্ক্রিন রোটেশন এবং কনফিগারেশন পরিবর্তন সঠিকভাবে সামলায় — শুধু LifecycleOwner নির্দিষ্ট করুন, এবং লাইব্রেরি ডিভাইস ঘুরলে স্বয়ংক্রিয়ভাবে use case বাইন্ডিং পুনরায় তৈরি করবে।
বাস্তব ডিভাইস ছাড়া CameraX পরীক্ষা করার জন্য, Google TestableCameraX প্রদান করে — একটি লাইব্রেরি যা ইউনিট টেস্টে ক্যামেরা আচরণ অনুকরণ করে। TestableCameraX ক্যামেরা ফ্রেম অনুকরণ, ImageAnalysis কার্যক্রম এবং ImageCapture সঠিকতা পরীক্ষা করার অনুমতি দেয় একটি শারীরিক ডিভাইস ছাড়া। এটি ক্যামেরার সাথে কাজ করা প্রকল্পগুলির জন্য CI/CD পাইপলাইনকে উল্লেখযোগ্যভাবে দ্রুত করে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Android 5.0 (API 21) এবং তার উপরে। CameraX 99% সক্রিয় Android ডিভাইস কভার করে। এক্সটেনশন (Portrait, HDR) এর জন্য API 23+ এবং নির্দিষ্ট মোডের জন্য OEM সমর্থন প্রয়োজন।
হ্যাঁ, ImageAnalysis use case প্রতিটি ফ্রেম বিশ্লেষকের কাছে পাঠায়। ফ্রেমগুলি ML Kit এর জন্য YUV_420_888 থেকে InputImage এ রূপান্তরিত হয়। ML স্ক্যানার তৈরির জন্য এটি মানক প্যাটার্ন।
CameraX use case আর্কিটেকচার, স্বয়ংক্রিয় Lifecycle বাইন্ডিং এবং ডিভাইস-নির্দিষ্ট পার্থক্য ব্যবস্থাপনা সহ একটি উচ্চ-স্তরের API। Camera2 একটি নিম্ন-স্তরের API যা প্রচুর boilerplate কোড সহ পূর্ণ ক্যামেরা নিয়ন্ত্রণ প্রদান করে।
হ্যাঁ, VideoCapture use case CameraX 1.1.0-beta এ যুক্ত করা হয়েছে। এটি মাইক্রোফোন সহ ভিডিও রেকর্ড করে এবং Preview এর সাথে সিঙ্ক্রোনাইজ হয়। আরও জটিল পরিস্থিতির জন্য, সরাসরি Camera2 ব্যবহার করুন।
CameraSelector এর মাধ্যমে: DEFAULT_BACK_CAMERA বা DEFAULT_FRONT_CAMERA। সুইচ করতে, নতুন সিলেক্টর সহ cameraProvider.bindToLifecycle() কল করুন — CameraX স্বয়ংক্রিয়ভাবে সেশন পুনরায় শুরু করবে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন