CameraX: คืออะไร, CameraX API และกล้องทำงานอย่างไร

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-03-26 เวลาอ่าน: 8 นาที

CameraX คือไลบรารี Android Jetpack สำหรับทำงานกับกล้อง โดยมี API ที่เรียบง่ายและสอดคล้องกันบน Camera2 ที่ซับซ้อน มันทำการ abstraction ความแตกต่างระหว่างอุปกรณ์ Android หลายร้อยรุ่น และรับประกันพฤติกรรมของกล้องที่เหมือนกันบนฮาร์ดแวร์ต่าง ๆ ตาม Android Developer CameraX Guide (2026) ไลบรารีนี้ถูกใช้ในแอป Google Play กว่า 25,000 รายการและทำงานบนอุปกรณ์ที่มี API Level 21 ขึ้นไป

ประเด็นสำคัญ

  • CameraX คือไลบรารี Jetpack สำหรับกล้อง Android ที่มี use case API: Preview, ImageCapture และ ImageAnalysis
  • สถาปัตยกรรม use case ช่วยให้นักพัฒนาไม่ต้องจัดการเซสชันและสถานะกล้องด้วยตนเอง
  • CameraX Extensions เพิ่มโหมดภาพบุคคล, HDR และการถ่ายภาพกลางคืนบนอุปกรณ์ที่รองรับ
  • ความปลอดภัยของชนิด — CameraX ตรวจสอบความเข้ากันได้ของ use cases ผ่าน ProcessCameraProvider
  • ความเข้ากันได้ กับ 99% ของอุปกรณ์ Android ตั้งแต่ Android 5.0 (API 21)

CameraX คืออะไร?

CameraX คือไลบรารีในชุด Android Jetpack ซึ่งเปิดตัวครั้งแรกโดย Google ในปี 2019 เพื่อแทนที่ Camera API ที่เลิกใช้งานแล้วและเป็นทางเลือกที่เรียบง่ายกว่า Camera2 ที่ซับซ้อน ปรัชญาหลักของ CameraX คือ “เขียนครั้งเดียว ทำงานได้บนทุกอุปกรณ์” ไลบรารีจัดการความแตกต่างของฮาร์ดแวร์โดยอัตโนมัติ: ตำแหน่งกล้อง, ความละเอียดที่รองรับ, ทิศทางเซนเซอร์ และรูปแบบที่มีให้ — นักพัฒนาไม่จำเป็นต้องเขียนโค้ดเฉพาะอุปกรณ์

สถาปัตยกรรมของ CameraX สร้างขึ้นบน use cases: Preview (แสดงฟีดกล้องใน Viewfinder), ImageCapture (ถ่ายภาพ), ImageAnalysis (วิเคราะห์สตรีมเฟรมสำหรับ ML) และ VideoCapture (บันทึกวิดีโอ) แต่ละ use case เป็นคอมโพเนนต์อิสระที่สามารถรวมกันได้: เรียกใช้ Preview สำหรับช่องมองภาพและ ImageAnalysis สำหรับการประมวลผล ML พร้อมกัน ตามข้อมูลของ Google (2026) CameraX รองรับบน 99% ของอุปกรณ์ Android ที่มี API 21+

คุณสมบัติหลัก

CameraX มีการสลับระหว่างกล้องหน้าและหลังโดยอัตโนมัติ, รองรับการหมุนหน้าจอโดยไม่ต้องสร้างเซสชันใหม่, การจัดการวงจรชีวิตในตัวผ่าน LifecycleOwner, การผูก use cases กับกระบวนการ Lifecycle เดียว, รองรับ Camera2 Extensions สำหรับภาพบุคคล, HDR และโหมดกลางคืน, และ TestableCameraX สำหรับการทดสอบหน่วยโดยไม่ต้องใช้อุปกรณ์จริง

Use cases ของ CameraX

CameraX กำหนด use case มาตรฐานสี่แบบ โดยแต่ละแบบแก้ปัญหาเฉพาะของกล้อง Use cases สามารถรวมกันได้: การรวมที่นิยมที่สุดคือ Preview + ImageCapture สำหรับแอปกล้องและ Preview + ImageAnalysis สำหรับสแกนเนอร์ ML

Use Caseวัตถุประสงค์คลาส
Previewแสดงฟีดกล้องแบบเรียลไทม์PreviewView
ImageCaptureถ่ายภาพด้วยการตั้งค่าแฟลชและความละเอียดImageCapture
ImageAnalysisวิเคราะห์แต่ละเฟรมสำหรับการประมวลผล MLImageAnalysis
VideoCaptureบันทึกวิดีโอด้วยไมโครโฟน (ตั้งแต่ 1.1.0-beta)VideoCapture

Preview

Use case Preview แสดงสตรีมวิดีโอจากกล้องใน PreviewView — View พิเศษจากไลบรารี CameraX PreviewView ปรับให้เข้ากับอัตราส่วนภาพของกล้องโดยอัตโนมัติ, รองรับ ScaleType (FillCenter, FitCenter) และการหมุนหน้าจอโดยไม่ต้องสร้าง use case ใหม่ นักพัฒนาเพียงแค่ผูก Preview กับ Lifecycle ผ่าน ProcessCameraProvider

ImageAnalysis

Use case ImageAnalysis ส่งแต่ละเฟรมจากกล้องไปยังตัวจัดการเพื่อวิเคราะห์: การรู้จำข้อความ, การตรวจจับใบหน้า, การสแกน QR โค้ด ตัววิเคราะห์รับเฟรมในรูปแบบ YUV_420_888 — พื้นที่สีสากลของ Android โหมดการทำงาน (BLOCKING หรือ NON_BLOCKING) ควบคุมคิวเฟรม: BLOCKING รอให้การวิเคราะห์ก่อนหน้าเสร็จสิ้น, NON_BLOCKING ข้ามเฟรมเมื่อเกิดความล่าช้า

ImageCapture

Use case ImageCapture ถ่ายภาพจากกล้องด้วยการตั้งค่าแฟลช, ความละเอียดและการบีบอัด รองรับรูปแบบ JPEG และ RAW (บนอุปกรณ์ที่เข้ากันได้) ImageCapture บันทึกภาพแบบอะซิงโครนัสผ่าน OnImageCapturedCallback หรือโดยตรงไปยังไฟล์ผ่าน ImageCapture.OutputFileOptions

VideoCapture — การบันทึกวิดีโอ

Use case VideoCapture ถูกเพิ่มใน CameraX 1.1.0 (เบต้า) และอนุญาตให้บันทึกวิดีโอสูงถึง 4K ที่ 30 FPS Use case จะซิงโครไนซ์กับ Preview โดยอัตโนมัติ: ภาพในช่องมองภาพตรงกับสิ่งที่กำลังบันทึกลงในไฟล์ VideoCapture ใช้ MediaCodec และ MediaMuxer ภายใน ซ่อนความซับซ้อนของการกำหนดค่าโคเดกวิดีโอและคอนเทนเนอร์ MP4

CameraX เทียบกับ Camera2

CameraX และ Camera2 เป็นสองแนวทางในการทำงานกับกล้องใน Android Camera2 เป็น API ระดับต่ำที่ให้การควบคุมอุปกรณ์อย่างสมบูรณ์ CameraX เป็น abstraction ระดับสูงที่ทำให้สถานการณ์ทั่วไปเป็นอัตโนมัติ การเลือกระหว่างพวกเขาขึ้นอยู่กับความต้องการของโปรเจกต์

คุณลักษณะCameraXCamera2
ระดับ APIสูง (use case)ต่ำ (ควบคุมสมบูรณ์)
โค้ดเฉพาะอุปกรณ์ไม่จำเป็นจำเป็นสำหรับแต่ละอุปกรณ์
การผูกวงจรชีวิตอัตโนมัติด้วยตนเอง
ส่วนขยายในตัว (HDR, Portrait, Night)ต้องมีการimplement OEM
ความซับซ้อนในการimplement15–30 บรรทัดโค้ด100–300 บรรทัดโค้ด
การรองรับ APIAPI 21+API 21+
ความยืดหยุ่นสถานการณ์มาตรฐานทุกสถานการณ์

ใช้ CameraX สำหรับงานมาตรฐาน: กล้องในแอป, สแกนเนอร์ QR, การประมวลผลสตรีม ML ใช้ Camera2 เมื่อต้องการการควบคุมค่าแสงด้วยตนเอง, การถ่าย RAW ด้วยการควบคุมพารามิเตอร์อย่างสมบูรณ์, หรือการทำงานกับกล้องหลายตัวพร้อมกัน

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

มาดูการตั้งค่า CameraX ในแอปพลิเคชัน Android โดยใช้ use case หลักทั้งสาม: Preview, ImageCapture และ ImageAnalysis

การตั้งค่า ProcessCameraProvider

โค้ดผูก CameraX กับวงจรชีวิตของ Activity ผ่าน ProcessCameraProvider ก่อนอื่นจะขออินสแตนซ์ของ provider จากนั้นสร้าง use cases และดำเนินการผูก

kotlin
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 รับ ProcessCameraProvider ผ่าน future, สร้าง use cases Preview และ ImageCapture และผูกกับวงจรชีวิตของ Activity ปัจจุบัน CameraX จัดการการหมุนหน้าจอ, การสลับกล้อง และการปล่อยทรัพยากรเมื่อปิด Activity โดยอัตโนมัติ

ImageAnalysis สำหรับการประมวลผล ML

มาเพิ่ม use case ImageAnalysis สำหรับการประมวลผลแต่ละเฟรมของสตรีมกล้อง เช่น เพื่อรวมกับ ML Kit

kotlin
val imageAnalysis = ImageAnalysis.Builder()
    .setBackpressureStrategy(
        ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
    )
    .build()

imageAnalysis.setAnalyzer(
    ContextCompact.getMainExecutor(this)
) { imageProxy ->
    // การแปลง YUV เป็น Bitmap สำหรับ ML Kit
    val bitmap = ImageUtils.yuvToBitmap(imageProxy)
    val inputImage = InputImage.fromBitmap(bitmap)

    // เริ่มการรู้จำข้อความ ML Kit
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // การประมวลผลผลลัพธ์
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

ImageAnalysis ด้วย กลยุทธ์ KEEP_ONLY_LATEST ประมวลผลเฉพาะเฟรมล่าสุดที่พร้อมใช้งาน ข้ามเฟรมที่ล้าสมัยหากตัววิเคราะห์ตามไม่ทัน แต่ละเฟรมถูกแปลงจาก YUV เป็น Bitmap สำหรับ ML Kit หลังจากนั้นเริ่มการรู้จำข้อความ การเรียก imageProxy.close() เป็นสิ่งจำเป็น — มิฉะนั้น CameraX จะหยุดส่งเฟรมใหม่

CameraX Extensions

CameraX Extensions คือโมดูลที่เพิ่มโหมดการถ่ายภาพขั้นสูง: ภาพบุคคล (เบลอพื้นหลัง), HDR (ช่วงไดนามิกที่ขยาย), โหมดกลางคืน (ถ่ายในที่แสงน้อย), รีทัชอัตโนมัติ (ปรับผิว) และโหมดความงาม ส่วนขยายจะเปิดใช้งานเฉพาะบนอุปกรณ์ที่ผู้ผลิตกล้องมีการimplement OEM

การตรวจสอบและเปิดใช้งานส่วนขยาย

ก่อนใช้ CameraX Extensions คุณต้องตรวจสอบว่าส่วนขยายพร้อมใช้งานบนอุปกรณ์ปัจจุบันหรือไม่ Google แนะนำให้ตรวจสอบผ่าน ExtensionsManager.isExtensionAvailable

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // การเปิดใช้งานโหมดภาพบุคคล
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

โค้ดตรวจสอบการรองรับส่วนขยาย BOKEH (ภาพบุคคล) ผ่าน ExtensionsManager และเปิดใช้งานหากมีการimplement OEM CameraX จะเปลี่ยนการตั้งค่ากล้องสำหรับโหมดภาพบุคคลโดยอัตโนมัติ หากส่วนขยายไม่พร้อมใช้งาน แอปจะทำงานต่อในโหมดมาตรฐานโดยไม่หยุดทำงาน

CameraX Extensions แก้ปัญหาหลักอย่างหนึ่งของการพัฒนา Android: การแตกแยกของกล้อง บนอุปกรณ์ต่าง ๆ โหมดภาพบุคคลถูกimplement แตกต่างกัน — บางรุ่นใช้เลนส์คู่ บางรุ่นใช้การเบลอด้วยซอฟต์แวร์ CameraX abstraction ความแตกต่างนี้: นักพัฒนาเปิดโหมด BOKEH และไลบรารีจะกำหนดวิธีimplement บนอุปกรณ์เฉพาะ Google ดูแลรักษารายชื่อพันธมิตร OEM ที่ผ่านการตรวจสอบ: Samsung, Xiaomi, OPPO, vivo, Google Pixel

เมื่อทำงานกับ CameraX สิ่งสำคัญคือต้องพิจารณาข้อจำกัดเกี่ยวกับจำนวน use cases พร้อมกัน: บนอุปกรณ์ส่วนใหญ่สามารถเรียกใช้ use case ได้สูงสุด 3 รายการพร้อมกัน ตัวอย่างเช่น Preview + ImageCapture + ImageAnalysis ทำงานบนอุปกรณ์สมัยใหม่ทั้งหมด แต่ Preview + ImageCapture + VideoCapture อาจไม่รองรับบนรุ่นประหยัด CameraX มีเมธอด ProcessCameraProvider.checkAvailability() ซึ่งตรวจสอบความเข้ากันได้ของชุด use case ก่อนผูก ช่วยหลีกเลี่ยงการหยุดทำงานขณะรันไทม์

CameraX รวมกับ Jetpack Navigation ผ่าน CameraXFragment หรือ PreviewView ที่เข้ากันได้กับ Compose สำหรับ Compose จะใช้องค์ประกอบ AndroidView ซึ่ง PreviewView ถูกฝังอยู่ CameraX จัดการการหมุนหน้าจอและการเปลี่ยนแปลงการกำหนดค่าได้อย่างถูกต้องโดยไม่สูญเสียสถานะเซสชันกล้อง — เพียงระบุ LifecycleOwner ไลบรารีจะสร้างการผูก use case ใหม่โดยอัตโนมัติเมื่อหมุนอุปกรณ์

สำหรับการทดสอบ CameraX โดยไม่ต้องใช้อุปกรณ์จริง Google มี TestableCameraX — ไลบรารีที่จำลองพฤติกรรมกล้องในการทดสอบหน่วย TestableCameraX อนุญาตให้จำลองเฟรมกล้อง, ทดสอบการทำงานของ ImageAnalysis และความถูกต้องของ ImageCapture โดยไม่ต้องใช้อุปกรณ์จริง สิ่งนี้ช่วยเร่งไปป์ไลน์ CI/CD สำหรับโปรเจกต์ที่ทำงานกับกล้องได้อย่างมาก

คำถามที่พบบ่อย

CameraX ทำงานบน Android เวอร์ชันใดบ้าง?

Android 5.0 (API 21) ขึ้นไป CameraX ครอบคลุม 99% ของอุปกรณ์ Android ที่ใช้งานอยู่ ส่วนขยาย (Portrait, HDR) ต้องการ API 23+ และการรองรับ OEM สำหรับโหมดเฉพาะ

สามารถใช้ CameraX กับ ML Kit ได้หรือไม่?

ได้, use case ImageAnalysis ส่งแต่ละเฟรมไปยังตัววิเคราะห์ เฟรมถูกแปลงจาก YUV_420_888 เป็น InputImage สำหรับ ML Kit นี่คือรูปแบบมาตรฐานสำหรับการสร้างสแกนเนอร์ ML

CameraX แตกต่างจาก Camera2 อย่างไร?

CameraX คือ API ระดับสูงที่มีสถาปัตยกรรม use case, การผูกวงจรชีวิตอัตโนมัติ และการจัดการความแตกต่างเฉพาะอุปกรณ์ Camera2 คือ API ระดับต่ำที่ให้การควบคุมกล้องอย่างสมบูรณ์ด้วยโค้ด boilerplate จำนวนมาก

CameraX รองรับการบันทึกวิดีโอหรือไม่?

ได้, use case VideoCapture ถูกเพิ่มใน CameraX 1.1.0-beta บันทึกวิดีโอด้วยไมโครโฟนและซิงโครไนซ์กับ Preview สำหรับสถานการณ์ที่ซับซ้อนกว่านี้ ให้ใช้ Camera2 โดยตรง

จะสลับระหว่างกล้องหน้าและหลังได้อย่างไร?

ผ่าน CameraSelector: DEFAULT_BACK_CAMERA หรือ DEFAULT_FRONT_CAMERA ในการสลับ ให้เรียก cameraProvider.bindToLifecycle() ด้วยตัวเลือกใหม่ — CameraX จะเริ่มเซสชันใหม่โดยอัตโนมัติ

สรุป

  • CameraX คือไลบรารี Jetpack สำหรับกล้อง Android ที่มีสถาปัตยกรรม use case (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Use cases สามารถรวมกันในเซสชันเดียว: Preview + ImageAnalysis สำหรับ ML หรือ Preview + ImageCapture สำหรับภาพถ่าย
  • การผูกวงจรชีวิต จัดการทรัพยากรกล้องโดยอัตโนมัติเมื่อหมุนหน้าจอและเปลี่ยนสถานะ Activity
  • CameraX Extensions เพิ่มโหมดภาพบุคคล, HDR และการถ่ายกลางคืนบนอุปกรณ์ที่เข้ากันได้
  • ความเข้ากันได้ กับ 99% ของอุปกรณ์ Android ตั้งแต่ API 21 โดยไม่ต้องใช้โค้ดเฉพาะอุปกรณ์
  • การรวมกับ ML Kit ผ่าน ImageAnalysis อนุญาตให้วิเคราะห์แต่ละเฟรมแบบเรียลไทม์
  • สำหรับงานมาตรฐาน CameraX เป็นตัวเลือกที่เหมาะสมที่สุด สำหรับการควบคุมอย่างสมบูรณ์ให้ใช้ Camera2

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม