alpha
Login
or
Join now
nateholland.bsky.social
/
PoseDetection
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
This repository has no description
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
feat: support back camera
author
nathan holland
committer
Tangled
date
1 year ago
(May 2, 2025, 10:33 PM UTC)
commit
540516ee
540516ee273cf6cc5521fe4c92b898cb7773597d
parent
a8f8403f
a8f8403f475b7292cd9b939b616d519f03d9fcc9
+11
-10
4 changed files
Expand all
Collapse all
Unified
Split
posedetection
src
androidMain
kotlin
com.performancecoachlab
posedetection
camera
CameraView.android.kt
commonMain
kotlin
com
performancecoachlab
posedetection
camera
CameraView.kt
iosMain
kotlin
com
performancecoachlab
posedetection
camera
CameraView.ios.kt
sample
composeApp
src
commonMain
kotlin
com
nate
posedetection
App.kt
+3
-2
posedetection/src/androidMain/kotlin/com.performancecoachlab/posedetection/camera/CameraView.android.kt
Reviewed
···
2
2
3
3
import android.graphics.Bitmap
4
4
import androidx.annotation.OptIn
5
5
+
import androidx.camera.core.CameraSelector.DEFAULT_BACK_CAMERA
5
6
import androidx.camera.core.CameraSelector.DEFAULT_FRONT_CAMERA
6
7
import androidx.camera.core.ExperimentalGetImage
7
8
import androidx.camera.view.LifecycleCameraController
···
41
42
@OptIn(ExperimentalGetImage::class)
42
43
@Composable
43
44
actual fun CameraView(
44
44
-
skeletonRepository: SkeletonRepository, drawSkeleton: Boolean, modifier: Modifier
45
45
+
skeletonRepository: SkeletonRepository, drawSkeleton: Boolean, modifier: Modifier, frontCamera: Boolean
45
46
) {
46
47
var bitmap by remember { mutableStateOf<ImageBitmap?>(null) }
47
48
var skeleton by remember { mutableStateOf(Skeleton()) }
···
55
56
val executor = remember { Executors.newSingleThreadExecutor() }
56
57
LaunchedEffect(lifecycleOwner) {
57
58
cameraController.bindToLifecycle(lifecycleOwner)
58
58
-
cameraController.cameraSelector = DEFAULT_FRONT_CAMERA
59
59
+
cameraController.cameraSelector = if(frontCamera)DEFAULT_FRONT_CAMERA else DEFAULT_BACK_CAMERA
59
60
previewView.controller = cameraController
60
61
previewView.scaleType = PreviewView.ScaleType.FIT_CENTER
61
62
cameraController.setImageAnalysisAnalyzer(executor) { imageProxy ->
+2
-1
posedetection/src/commonMain/kotlin/com/performancecoachlab/posedetection/camera/CameraView.kt
Reviewed
···
9
9
expect fun CameraView(
10
10
skeletonRepository: SkeletonRepository,
11
11
drawSkeleton: Boolean = true,
12
12
-
modifier: Modifier = Modifier.fillMaxSize()
12
12
+
modifier: Modifier = Modifier.fillMaxSize(),
13
13
+
frontCamera: Boolean = true,
13
14
)
+5
-6
posedetection/src/iosMain/kotlin/com/performancecoachlab/posedetection/camera/CameraView.ios.kt
Reviewed
···
19
19
actual fun CameraView(
20
20
skeletonRepository: SkeletonRepository,
21
21
drawSkeleton: Boolean,
22
22
-
modifier: Modifier
22
22
+
modifier: Modifier,
23
23
+
frontCamera: Boolean,
23
24
) {
24
25
val cameraEngine = remember { mutableStateOf<CameraEngine?>(null) }
25
25
-
val skeleton by skeletonRepository.skeletonFlow.collectAsState()
26
26
val frameListener = remember { FrameRepository() }
27
27
val frameBitmap by frameListener.frameFlow.collectAsState()
28
28
-
LaunchedEffect(cameraEngine.value){
28
28
+
LaunchedEffect(cameraEngine.value) {
29
29
cameraEngine.value?.apply {
30
30
addSkeletonRepository(skeletonRepository)
31
31
addFrameListener(frameListener)
···
34
34
}
35
35
Box(modifier = Modifier.fillMaxSize()) {
36
36
CameraPreview(
37
37
-
modifier = Modifier.fillMaxSize(),
38
38
-
onCameraControllerReady = { engine ->
39
39
-
cameraEngine.value = engine
37
37
+
modifier = Modifier.fillMaxSize(), onCameraControllerReady = { engine ->
38
38
+
cameraEngine.value = engine.also { if (!frontCamera) it.toggleCameraLens() }
40
39
})
41
40
if (drawSkeleton) {
42
41
frameBitmap?.also {
+1
-1
sample/composeApp/src/commonMain/kotlin/com/nate/posedetection/App.kt
Reviewed
···
30
30
if (permissionGranted) CameraView(
31
31
skeletonRepository = skeletonRepository,
32
32
drawSkeleton = true,
33
33
-
modifier = Modifier.fillMaxSize()
33
33
+
modifier = Modifier.fillMaxSize(),
34
34
)
35
35
else Text("Camera permission not granted")
36
36