Slide 1

Slide 1 text

$BNFSB9ϥΠϒϥϦͷ 
 ັྗͱ࠷৽ػೳΛඥղ͘ Dai Miyamoto (@dairoid7774) 1

Slide 2

Slide 2 text

ࣗݾ঺հ • ٶຊେ • 5XJUUFS!EBJSPJE • (JUIVC%BJ • גࣜձࣾϚωʔϑΥϫʔυ • "OESPJEΤϯδχΞ • ϚωʔϑΥϫʔυϏδωεΧϯύχʔݸਓࣄۀओຊ෦ϓϩμΫτ։ൃ෦ • ΤϯδχΞϦϯάઓུࣨεϚʔτσόΠεΤΩεύʔτάϧʔϓ ݉຿ 2

Slide 3

Slide 3 text

"HFOEB 3 ຊηογϣϯͷΰʔϧ $BNFSB9ͷ֓ཁઆ໌ جຊతͳΧϝϥػೳͷ࣮૷ͷղઆ WɺWͰ௥Ճ͞Εͨओͳ৽ػೳ౳ͷ঺հ W࣌఺Ͱ௚໘ͨ͠՝୊ʹ͍ͭͯ঺հ ·ͱΊ

Slide 4

Slide 4 text

"HFOEB 4 ຊηογϣϯͷΰʔϧ $BNFSB9ͷ֓ཁઆ໌ جຊతͳΧϝϥػೳͷ࣮૷ͷղઆ WɺWͰ௥Ճ͞Εͨओͳ৽ػೳ౳ͷ঺հ W࣌఺Ͱ௚໘ͨ͠՝୊ʹ͍ͭͯ঺հ ·ͱΊ

Slide 5

Slide 5 text

ຊηογϣϯͷΰʔϧ • $BNFSB9ϥΠϒϥϦͷ֓ཁʹ͍ͭͯཧղͰ͖Δ • جຊతͳΧϝϥػೳͷ࣮૷ํ๏΍ࡉ͔͍UJQTͳͲΛ஌Δ͜ͱ͕Ͱ͖Δ • WɺWͰ௥Ճ͞Εͨ৽ػೳ౳ʹ͍ͭͯ஌Δ͜ͱ͕Ͱ͖Δ 5 $BNFSB9ϥΠϒϥϦͷັྗΛ఻͑ɺ 
 ΧϝϥػೳΛੜ͔ͨ͠৽ͨͳΞΠσΞΛੜΈग़͖͔͚ͬ͢Λ࡞Δ

Slide 6

Slide 6 text

"HFOEB 6 ຊηογϣϯͷΰʔϧ $BNFSB9ϥΠϒϥϦͷ֓ཁઆ໌ جຊతͳΧϝϥػೳͷ࣮૷ͷղઆ WɺWͰ௥Ճ͞Εͨओͳ৽ػೳ౳ͷ঺հ W࣌఺Ͱ௚໘ͨ͠՝୊ʹ͍ͭͯ঺հ ·ͱΊ

Slide 7

Slide 7 text

Χϝϥػೳͷ࣮૷ʹ࢖ΘΕ͖ͯͨ"1*ɾϥΠϒϥϦ 7 Android 4.4Ҏલ Android 5.0Ҏ߱ 2014೥ 2019೥ Camera API 2 
 ϦϦʔε Camera Xൃද v1.0.0 Stable 
 ϦϦʔε 2021೥ 2022೥6݄ v1.1.0 Stable 
 ϦϦʔε 2022೥8݄ v1.2.0 Beta 
 ϦϦʔε Camera API 1 Intentܦ༝

Slide 8

Slide 8 text

Χϝϥػೳͷ࣮૷ʹ࢖ΘΕ͖ͯͨ"1*ɾϥΠϒϥϦ 8 Android 4.4Ҏલ Android 5.0Ҏ߱ 2014೥ 2019೥ Camera API 2 
 ϦϦʔε Camera Xൃද v1.0.0 Stable 
 ϦϦʔε 2021೥ 2022೥6݄ v1.1.0 Stable 
 ϦϦʔε 2022೥8݄ v1.2.0 Beta 
 ϦϦʔε Camera API 1 Intentܦ༝

Slide 9

Slide 9 text

Χϝϥػೳͷ࣮૷ʹ࢖ΘΕ͖ͯͨ"1*ɾϥΠϒϥϦ 9 Android 4.4Ҏલ Android 5.0Ҏ߱ 2014೥ 2019೥ Camera API 2 
 ϦϦʔε Camera Xൃද v1.0.0 Stable 
 ϦϦʔε 2021೥ 2022೥6݄ v1.1.0 Stable 
 ϦϦʔε 2022೥8݄ v1.2.0 Beta 
 ϦϦʔε Camera API 1 Intentܦ༝ Deprecated !

Slide 10

Slide 10 text

Χϝϥػೳͷ࣮૷ʹ࢖ΘΕ͖ͯͨ"1*ɾϥΠϒϥϦ 10 Android 4.4Ҏલ Android 5.0Ҏ߱ 2014೥ 2019೥ Camera API 2 
 ϦϦʔε Camera Xൃද v1.0.0 Stable 
 ϦϦʔε 2021೥ 2022೥6݄ v1.1.0 Stable 
 ϦϦʔε 2022೥8݄ v1.2.0 Beta 
 ϦϦʔε Camera API 1 Intentܦ༝

Slide 11

Slide 11 text

Χϝϥػೳͷ࣮૷ʹ࢖ΘΕ͖ͯͨ"1*ɾϥΠϒϥϦ 11 Android 4.4Ҏલ Android 5.0Ҏ߱ 2014೥ 2019೥ Camera API 2 
 ϦϦʔε Camera Xൃද v1.0.0 Stable 
 ϦϦʔε 2021೥ 2022೥6݄ v1.1.0 Stable 
 ϦϦʔε 2022೥8݄ v1.2.0 Beta 
 ϦϦʔε Camera API 1 Intentܦ༝

Slide 12

Slide 12 text

$BNFSB9ͱ͸ʁ • ΧϝϥΞϓϦΛ༰қʹ࣮૷Ͱ͖Δ+FUQBDLϥΠϒϥϦ • "OESPJE "1*-FWFM Ҏ߱Λαϙʔτ • $BNFSB"1*Λར༻͢ΔΑΓ΋গͳ͍ίʔυྔͰ࣮૷͕Մೳ • ଟ͘ͷσόΠεͰ҆ఆͨ͠ಈ࡞Λอূ͢ΔΑ͏ʹ࠷దԽ͕ଓ͚ΒΕ͍ͯΔ 12

Slide 13

Slide 13 text

"HFOEB 13 ຊηογϣϯͷΰʔϧ $BNFSB9ͷ֓ཁઆ໌ جຊతͳΧϝϥػೳͷ࣮૷ͷղઆ WɺWͰ௥Ճ͞Εͨओͳ৽ػೳ౳ͷ঺հ W࣌఺Ͱ௚໘ͨ͠՝୊ʹ͍ͭͯ঺հ ·ͱΊ

Slide 14

Slide 14 text

$BNFSB9ͷ6TF$BTF w 1SFWJFX ΧϝϥϓϨϏϡʔ  w *NBHF$BQUVSF ࣸਅࡱӨ  w *NBHF"OBMZTJT ը૾ղੳ 14 v1.0.0

Slide 15

Slide 15 text

$BNFSB9ͷ6TF$BTF w 1SFWJFX ΧϝϥϓϨϏϡʔ  w 1SFWJFX7JFXΛ࢖ͬͯΧϝϥͷө૾Λදࣔ w *NBHF$BQUVSF ࣸਅࡱӨ  w *NBHF"OBMZTJT ը૾ղੳ 15 v1.0.0

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

private fun startCamera() { val cameraProviderFuture = ProcessCameraProvider.getInstance(context) cameraProviderFuture.addListener({ val cameraProvider = cameraProviderFuture.get() … }, ContextCompat.getMainExecutor(context)) } 17 $BNFSB1SPWJEFSΛऔಘ͢Δ

Slide 18

Slide 18 text

val preview = Preview.Builder() .setTargetAspectRatio(…) / .setTargetResolution(…) .setTargetRotation(…) .build() .also { it.setSurfaceProvider( binding.previewView.surfaceProvider ) } 18 1SFWJFX6TF$BTFΛ࢖ͬͯετϦʔϛϯάઃఆΛߦ͏

Slide 19

Slide 19 text

try { cameraProvider.unbindAll() cameraProvider.bindToLifecycle( this as LifecycleOwner, CameraSelector.DEFAULT_BACK_CAMERA, preview ) } 19 -JGFDZDMFʹ1SFWJFX6TF$BTFΛCJOE͢Δ

Slide 20

Slide 20 text

20

Slide 21

Slide 21 text

$BNFSB9ͷ6TF$BTF w 1SFWJFX ΧϝϥϓϨϏϡʔ  w *NBHF$BQUVSF ࣸਅࡱӨ  w ࡱӨͯ͠ࢦఆͨ͠৔ॴʹอଘ w *NBHF"OBMZTJT ը૾ղੳ 21 v1.0.0

Slide 22

Slide 22 text

imageCapture = ImageCapture.Builder().build() try { cameraProvider.unbindAll() cameraProvider.bindToLifecycle( this as LifecycleOwner, CameraSelector.DEFAULT_BACK_CAMERA, preview, imageCapture ) } 22 -JGFDZDMFʹ*NBHF$BQUVSF6TF$BTFΛCJOE

Slide 23

Slide 23 text

private fun takePicture() { val photoFile = File(…) val outputFileOptions = ImageCapture.OutputFileOptions.Builder(photoFile) .build() } 23 ࣸਅͷอଘઌͷઃఆ w 'JMF w .FEJB4UPSF w 0VUQVU4USFBN

Slide 24

Slide 24 text

imageCapture.takePicture( outputFileOptions, ContextCompat.getMainExecutor(context), object : ImageCapture.OnImageSavedCallback { override fun onImageSaved( outputFileResults: ImageCapture.OutputFileResults) { outputFileResults.savedUri … } override fun onError(exception: ImageCaptureException) { … } } ) 24 ࣸਅͷࡱӨॲཧ ࢦఆͨ͠อଘઌʹอଘ͢Δ৔߹

Slide 25

Slide 25 text

imageCapture.takePicture( ContextCompat.getMainExecutor(context), object : ImageCapture.OnImageCapturedCallback() { override fun onCaptureSuccess(image: ImageProxy) { … } override fun onError(exception: ImageCaptureException) { … } } ) 25 ࣸਅͷࡱӨॲཧ ը૾όοϑΝΛऔಘ

Slide 26

Slide 26 text

$BNFSB9Ͱ࣮ݱͰ͖Δิॿػೳ • ζʔϜ 
 DBNFSB$POUSPMTFU-JOFBS;PPN GMPBU TFU;PPN3BUJP GMPBU  • τʔν ϑϥογϡ 
 DBNFSB$POUSPMFOBCMF5PSDI CPPMFBO  • λοϓϑΥʔΧε 
 DBNFSB$POUSPMTUBSU'PDVT"OE.FUFSJOH 'PDVT.FUFSJOH"DUJPO  • ࿐ग़ิਖ਼ 
 DBNFSB$POUSPMTFU&YQPTVSF$PNQFOTBUJPO*OEFY JOU 26

Slide 27

Slide 27 text

$BNFSB9ͷ6TF$BTF w 1SFWJFX ΧϝϥϓϨϏϡʔ  w *NBHF$BQUVSF ࣸਅࡱӨ  w *NBHF"OBMZTJT ը૾ղੳ  w Χϝϥͷ͔ΒऔಘͰ͖Δը૾όοϑΝΛ࢖ͬͯɺ 
 ը૾ॲཧ΍ػցֶशͷ࣮ߦ͕Ͱ͖Δ 27 v1.0.0

Slide 28

Slide 28 text

imageAnalysis = ImageAnalysis.Builder() .build() .also { it.setAnalyzer( Executors.newSingleThreadExecutor(), ImageAnalysis.Analyzer { image: ImageProxy -> // ը૾ॲཧͳͲ image.close() } ) } 28 *NBHF"OBMZTJT6TF$BTFͰը૾෼ੳΛߦ͏

Slide 29

Slide 29 text

ΧϝϥͰऔಘͨ͠ը૾ͷ׆༻ྫ w ը૾ॲཧ w #JUNBQʹม׵ͯ͠Ճ޻ w 0QFO$7 w ػցֶश w 5FOTPS'MPX-JUF w 'JSFCBTF.BDIJOF-FBSOJOH w .-,JU 29 https://github.com/android/camera-samples/blob/develop/ CameraXTfLite/screenshots/screenshot-1.jpg

Slide 30

Slide 30 text

/FYU4UFQʜ w ʮ$BNFSB9º.-,JUͰύεϙʔτ0$3ػೳΛ࣮૷ʯ w %BZʙ w ൃදऀ:VUP"LBJLF͞Μ 30

Slide 31

Slide 31 text

"HFOEB 31 ຊηογϣϯͷΰʔϧ $BNFSB9ͷ֓ཁઆ໌ جຊతͳΧϝϥػೳͷ࣮૷ͷ঺հ WɺWͰ௥Ճ͞Εͨओͳ৽ػೳ౳ͷ঺հ W࣌఺Ͱ௚໘ͨ͠՝୊ʹ͍ͭͯ঺հ ·ͱΊ

Slide 32

Slide 32 text

WͰશͯͷόʔδϣϯ͕౷Ұ͞Εͨ 32 ϦϦʔε೔ camera-core camera- camera2 camera- lifecycle camera-video camera-view camera- extensions 2022/01/26 v1.1.0-beta01 2021/12/15 v1.1.0-alpha12 v1.0.0-alpha32 2021/10/13 v1.1.0-alpha10 v1.0.0-alpha30 2021/05/05 v1.0.0-stable v1.0.0-alpha24

Slide 33

Slide 33 text

$BNFSB9ͷ6TF$BTF w 1SFWJFX ΧϝϥϓϨϏϡʔ  w *NBHF$BQUVSF ࣸਅࡱӨ  w *NBHF"OBMZTJT ը૾ղੳ  w 7JEFP$BQUVSF ಈըࡱӨ 33 v1.1.0

Slide 34

Slide 34 text

val recorder = Recorder.Builder().build() videoCapture = VideoCapture.withOutput(recorder) try { cameraProvider.unbindAll() val camera = cameraProvider.bindToLifecycle( this as LifecycleOwner, CameraSelector.DEFAULT_BACK_CAMERA, preview, videoCapture ) } 34 3FDPSEFSͱ7JEFP$BQUVSFΛ࡞੒ͯ͠-JGFDZDMFʹCJOE

Slide 35

Slide 35 text

35 3FDPSEFSͷಈըղ૾౓ͷઃఆ w 4% Q ɺ)% Q ɺ')% Q ɺ6)% Q  Recorder.Builder() .setQualitySelector(QualitySelector.from(Quality.UHD)) w ΧϝϥσόΠεʹΑͬͯରԠ͍ͯ͠Δղ૾౓͕ҟͳΔ 2VBMJUZ4FMFDUPSHFU4VQQPSUFE2VBMJUJFT DBNFSBDBNFSB*OGP  w ղ૾౓Λࢦఆ͠ͳ͍৔߹ɺ')%͔ΒॱʹରԠ͍ͯ͠Δղ૾౓Λ୳͠ઃఆ͞ΕΔ

Slide 36

Slide 36 text

36 ಈըͷอଘઌͷઃఆ private fun startRecording() { val movieFile = File(…) val outputFileOptions = androidx.camera.video.FileOutputOptions .Builder(movieFile) .build() } w 'JMF w .FEJB4UPSF w 1BSDFM'JMF%FTDSJQUPS "OESPJEҎ্

Slide 37

Slide 37 text

37 ࿥ըͷ։࢝ recording = videoCapture.output .prepareRecording(context, outputFileOptions) //࿥Ի͢Δ৔߹͸android.permission.RECORD_AUDIO͕ඞཁ .withAudioEnabled() .start( ContextCompat.getMainExecutor(context), captureListener ) recording.pause() recording.resume() recording.stop() / recording.close()

Slide 38

Slide 38 text

38 ࿥ըঢ়ଶͷϋϯυϦϯά private val captureListener = Consumer { event -> when (event) { is VideoRecordEvent.Start -> {} is VideoRecordEvent.Pause -> {} is VideoRecordEvent.Resume -> {} is VideoRecordEvent.Finalize -> { event.outputResults.outputUri event.error } } }

Slide 39

Slide 39 text

39

Slide 40

Slide 40 text

6TF$BTFͷ૊Έ߹Θͤ 40 LEVEL Ͱ͖Δ͜ͱ LEGACY ԼҐޓ׵Ϟʔυ Preview + Image Capture + Image Analysisɺ 
 Preview + Video Captureͷซ༻Λαϙʔτ LIMITED Preview + Video Capture + Image Captureͷซ༻Λαϙʔτ FULL Camera 2Ͱɺ 
 ߴ଎࿈ࣸػೳɺϚχϡΞϧηϯαʔίϯτϩʔϧͳͲ͕αϙʔτ͞ΕΔ LEVEL_3 Preview + Video Capture + Image Analysisͷซ༻Λαϙʔτ EXTERNAL USB઀ଓ͞Εͨ֎෦ΧϝϥΛද͢

Slide 41

Slide 41 text

ΧϝϥσόΠεͷϨϕϧͷௐ΂ํ $BNFSBؔ࿈ͷΧϝϥ৘ใΛऔಘ͢Δ$BNFSB$BNFSB*OGPΛհͯ͠ 
 */'0@4611035&%@)"3%8"3&@-&7&-Λऔಘ͢Δ 41 val camera = provider.bindToLifecycle(this, cameraSelector) val level = Camera2CameraInfo.from(camera.cameraInfo) .getCameraCharacteristic( CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL ) val isHardwareLevelLimited = level == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED

Slide 42

Slide 42 text

$BNFSBFYUFOTJPOT͕TUBCMFϦϦʔε w ϕϯμʔ͕ಠࣗʹ౥ࡌ͍ͯ͠Δ֦ுػೳΛ૊ΈࠐΊΔ w "VUPपғͷ෩ܠʹ߹Θͤͯࣗಈతʹ࢓্͕ΓΛௐ੔ w ϘέϙʔτϨʔτػೳ w إࣸਅՃ޻إͷഽͷ৭ɺܗঢ়ͳͲΛՃ޻ w )%3ࣗಈ࿐ग़ઃఆΛࡱӨ w ໷ؒϞʔυ҉͍৔ॴͰͷࣸਅࡱӨΛ࠷దԽ 42 v1.1.0

Slide 43

Slide 43 text

&YUFOTJPOTͷαϙʔτঢ়گͷ֬ೝ w &YUFOTJPO.BOBHFSJT&YUFOTJPO"WBJMBCMFͰಛఆͷϞʔυ͕ར༻Մೳ͔֬ೝ w $BNFSB9Ͱ͸αϙʔτ͞Ε͍ͯͳ͍͕ɺ$BNFSBͰ͸αϙʔτ͞Ε͍ͯΔ 
 ৔߹΋͋Δ w 04ͷγεςϜΞοϓσʔτͰରԠ͞ΕΔ͜ͱ΋͋Δ 43

Slide 44

Slide 44 text

DBNFSBWJFX͕TUBCMFϦϦʔε w -JGFDZDMF$BNFSB$POUSPMMFS w ͜ΕͭͰ$BNFSB9ͷओཁͳػೳΛ΄΅શͯఏڙ͢ΔߴϨϕϧ"1* w BMQIB·Ͱ͸$BNFSB7JFXͱ͍͏໊લͩͬͨ 44 v1.1.0

Slide 45

Slide 45 text

-JGFDZDMF$BNFSB$POUSPMMFSͰΑΓ؆୯ʹ࣮૷ 45 val cameraController = LifecycleCameraController(context) binding.previewView.controller = cameraController // σϑΥϧτͰ͸ImageCaputreͱImageAnalysisɺ
 // ϐϯνΠϯɾΞ΢τͷζʔϜػೳͱλοϓ&ϑΥʔΧε͕ࣗಈͰ༗ޮʹͳΔ cameraController.bindToLifecycle(this as LifecycleOwner) cameraController .setEnabledUseCases(CameraController.VIDEO_CAPTURE) cameraController.takePicture(…) cameraController.enableTorch(true)

Slide 46

Slide 46 text

1SPDFTT$BNFSB1SPWJEFSWT-JGFDZDMF$BNFSB$POUSPMMFS w -JGFDZDMF$BNFSB$POUSPMMFSΛ࢖͏৔߹͸6TF$BTFΛࣗ෼Ͱ࡞੒͢Δඞཁ͕ 
 ͳ͘ͳΔଞɺτʔνͳͲิॿػೳ΋શͯઃఆͰ͖Δ w 7JEFP$BQUVSF͸&YQFSJNFOUBMͰɺ࿥ըͷҰ࣌ఀࢭɾ࠶։ػೳ͕ແ͍ w 6TF$BTFͷ#VJMEFSͰ͔͠࢖͑ͳ͍ઃఆ౳͕ͳ͚Ε͹ɺ 
 -JGFDZDMF$BNFSB$POUSPMMFSΛ࢖ͬͨ΄͏͕࣮૷ָ͕ͳ͜ͱ͕ଟ͍͔΋ 46

Slide 47

Slide 47 text

$BNFSB4UBUFͰΧϝϥͷঢ়ଶΛߪಡ͢Δ w $BNFSB*OGPDBNFSB4UBUF͔ΒɺΧϝϥͷঢ়ଶΛߪಡ͢Δ͜ͱ͕Ͱ͖Δ w 6*ͷग़͠෼͚΍Ϣʔβʔ΁ͷϑΟʔυόοΫʹ׆༻ 47 cameraInfo.cameraState.observe(this as LifecycleOwner) { when (it.type) {} when (it.error?.type) {} } v1.1.0

Slide 48

Slide 48 text

Χϝϥͷঢ়ଶભҠ $BNFSB4UBUF5ZQF 48 Closed OPENING OPEN CLOSING PENDING_OPEN Bind UseCase Χϝϥͷىಈ੒ޭ Unbind UseCase Χϝϥऴྃ੒ޭ ΧϝϥىಈͷϦΫΤετ଴ͪ

Slide 49

Slide 49 text

ΧϝϥͷΤϥʔঢ়ଶ $BNFSB4UBUF&SSPS5ZQF w 3&$07&3"#-& w $BNFSB9͕ΧϝϥσόΠεͷ࠶ىಈΛࢼΈΔ w ෮چͷࢼߦճ਺্ݶʹୡͨ͠৔߹ɺ1&/%*/(@01&/ঢ়ଶʹҠߦ͢Δ w ΞϓϦ಺Ͱ։͍͍ͯΔଞͷΧϝϥΛऴྃ͢Δ͔ɺ 
 ଞͷΧϝϥΞϓϦΛऴྃ͢ΔΑ͏ʹϢʔβʔ΁ཁٻ͢Δͱྑ͍ w $3*5*$"- w $BNFSB9͕෮چෆՄೳͳΤϥʔ w $-04*/(ঢ়ଶʹҠߦ͢Δ 49

Slide 50

Slide 50 text

Wͷ৽ػೳ w $BNFSBNMLJUWJTJPOϥΠϒϥϦ͕௥Ճ w .M,JU"OBMZ[FS͕௥Ճ͞Εɺ.-,JUͱͷ࿈ܞ͕؆୯ʹ౷߹Ͱ͖ΔΑ͏ʹͳͬͨ w ;FSP4IVUUFS-BH"1*͕$BNFSB9Ͱ࢖͑ΔΑ͏ʹͳͬͨ w $"1563&@.0%&@;&30@4)655&3@-"(Λઃఆ͢Δͱɺ 
 γϟολʔϘλϯΛԡ͔ͯ͠ΒࡱӨ͞ΕΔ·Ͱͷϥά͕ܰݮͰ͖Δ w อଘͨ͠ಈըͷ.FUB%BUBʹҐஔ৘ใΛ෇༩Ͱ͖ΔΑ͏ʹͳͬͨ w 0VUQVU0QUJPOTʹTFU-PDBUJPO͕௥Ճ 50 v1.2.0-beta

Slide 51

Slide 51 text

"HFOEB 51 ຊηογϣϯͷΰʔϧ $BNFSB9ͷ֓ཁઆ໌ جຊతͳΧϝϥػೳͷ࣮૷ͷ঺հ WɺWͰ௥Ճ͞Εͨओͳ৽ػೳ౳ͷ঺հ W࣌఺Ͱ௚໘ͨ͠՝୊ʹ͍ͭͯ঺հ ·ͱΊ

Slide 52

Slide 52 text

$BNFSB9ͩͱ௿ղ૾౓ͰࡱӨ͞Εͯ͠·͏ʂʁ Ұ෦ͷػछͰ$BNFSB9ͰࡱӨͨ͠ը૾ͷղ૾౓͕ɺϓϦΠϯετʔϧ͞Εͯ 
 ͍ΔΧϝϥΞϓϦ΍$BNFSBͰࡱӨͨ͠ը૾ΑΓ΋௿͘ͳͬͯ͠·ͬͨ 52 Camera XͰࡱӨͨ͠ը૾ ϓϦΠϯετʔϧͷΧϝϥΞϓϦͰࡱӨͨ͠ը૾

Slide 53

Slide 53 text

ΧϝϥσόΠε͕αϙʔτ͍ͯ͠Δղ૾౓ͷऔಘ w ΧϝϥσόΠεͷϋʔυ΢ΣΞϨϕϧ΍ɺࢦఆͨ͠ΞεϖΫτൺɺ 
 ղ૾౓ʹΑͬͯɺ$BNFSB9͕αϙʔτ͢Δ࠷దͳղ૾౓Λࣗಈతʹܾఆ͢Δ w 4USFBN$POGJHVSBUJPO.BQHFU0VUQVU4J[FT ͰσόΠε͕αϙʔτ͢Δ 
 ղ૾౓ͷϦετΛऔಘͰ͖Δ 53 val camera2Info = Camera2CameraInfo.from(cameraInfo) val config = camera2Info.getCameraCharacteristic( CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP ) val supportResolutionSizes = config?.getOutputSizes(ImageFormat.JPEG)

Slide 54

Slide 54 text

HFU0VUQVU4J[FT Y Y Y Y Y Y Y 54 HFU)JHI3FTPMVUJPO0VUQVU4J[FT Y Y Y Y Y

Slide 55

Slide 55 text

HFU0VUQVU4J[FT WTHFU)JHI3FTPMVUJPO0VUQVU4J[FT w HFU)JHI3FTPMVUJPO0VUQVU4J[FT ͰಘΒΕΔղ૾౓͸ɺࡱӨॲཧͷࡍʹ 
 ͕͔͔࣌ؒΔ৔߹͕͋ΔͨΊɺHFU0VUQVU4J[FTͰऔಘͰ͖Δղ૾౓ͷΈ 
 αϙʔτ͍ͯ͠Δ w ͦΕΑΓ΋ߴ͍ղ૾౓Λࢦఆͯ͠΋ɺHFU0VUQVU4J[FT ͷղ૾౓͕ࣗಈతʹ 
 ઃఆ͞ΕΔ 55

Slide 56

Slide 56 text

WͰٹࡁ͞Εͦ͏ʜ w IUUQTJTTVFUSBDLFSHPPHMFDPNJTTVFT w ৽͍͠"1*Λ։ൃதͱͷ͜ͱ w 5BSHFUFE5PBMQIB w $BNFSBʹஔ͖׵͑ͯରԠ͢Δ͜ͱʹͨ͠ 56

Slide 57

Slide 57 text

"HFOEB 57 ຊηογϣϯͷΰʔϧ $BNFSB9ͷ֓ཁઆ໌ جຊతͳΧϝϥػೳͷ࣮૷ͷ঺հ WɺWͰ௥Ճ͞Εͨओͳ৽ػೳ౳ͷ঺հ W࣌఺Ͱ௚໘ͨ͠՝୊ʹ͍ͭͯ঺հ ·ͱΊ

Slide 58

Slide 58 text

·ͱΊ $BNFSB9ʹ͍ͭͯ w ѹ౗తʹগͳ͍ίʔυྔͰҰൠతͳΧϝϥػೳ͕࣮ݱՄೳ w ػցֶशͳͲΛ૊ΈࠐΜͰɺը૾ղੳΛߦ͏ͱԠ༻ͷ෯͕޿͕Δ w W͔Β͸ಈըࡱӨͷDBNFSBWJEFPͳͲ͕ͭTUBCMFʹͳͬͨ w DBNFSBWJFXͷ-JGFDZDMF$BNFSB$POUSPMMFSΛ࢖ͬͨ΄͏ָ͕͔΋ w ΧϝϥσόΠεʹΑͬͯ࢖͑Δػೳ͕ݶΒΕΔ͜ͱ͕͋Δ 58

Slide 59

Slide 59 text

·ͱΊ Χϝϥػೳ࣮૷ʹ͓͚Δٕज़બఆ w ҰൠతͳΧϝϥػೳΛ࣮૷͢ΔͳΒɺ$BNFSB9ϥΠϒϥϦ͕͓͢͢Ί w ΑΓਂ͍ΧϝϥػೳΛ࣮ݱ͍ͨ͠৔߹͸ɺ$BNFSB"1*Λݕ౼ w ·ͩ$BNFSB"1*Λར༻͍ͯ͠Δ৔߹͸ҠߦΛݕ౼͠·͠ΐ͏ w *OUFOUͰΧϝϥΞϓϦΛىಈ͢Δͷ΋खஈͷҰ͕ͭͩɺΧελϚΠζੑ͸ແ͍ 59

Slide 60

Slide 60 text

3FGFSFODF w IUUQTEFWFMPQFSBOESPJEDPNKFUQBDLBOESPJEYSFMFBTFTDBNFSB w "OESPJE%FWFMPQFSTc$BNFSB93FMFBTF/PUF w IUUQTEFWFMPQFSBOESPJEDPNUSBJOJOHDBNFSBY w "OESPJE%FWFMPQFSTc$BNFSB9ͷ֓ཁ w IUUQTHJUIVCDPNBOESPJEDBNFSBTBNQMFT w $BNFSBɺ$BNFSB9Λ࢖ͬͨαϯϓϧίʔυू 60

Slide 61

Slide 61 text

એ఻ 61 https://hrmos.co/pages/moneyforward/jobs/0004337

Slide 62

Slide 62 text

5IBOLZPV 
 GPSMJTUFOJOH Dai Miyamoto (@dairoid7774) 62