모든 글

【TECH】손가락이 카메라를 제대로 덮었는지 판단하기

MonoPump가 색상 비율, 밝기 범위, 빨간색 우세도, 연속 프레임 평활화로 측정 시작 시점을 판단하는 방법입니다.

컴퓨터 비전PPG카메라신호 품질
【TECH】손가락이 카메라를 제대로 덮었는지 판단하기

손가락 감지의 첫 버전은 단순했습니다. 화면이 빨개지면 손가락이 있는 것이다. 책상 위에서는 잠깐 잘 동작했지만, 휴대폰 각도가 바뀌자 바로 무너졌습니다. 빨간 물체, 어두운 방, 가장자리로 새는 빛도 단일 조건을 속일 수 있었습니다.

손가락이 덮은 스마트폰 카메라 위에 반투명 샘플링 그리드가 보이는 장면
BPM을 계산하기 전에 가벼운 프레임 지표로 덮임 상태를 확인합니다.

그래서 질문을 좁혔습니다. 측정에 쓸 수 있는 손끝 프레임은 어떤 모습인가. 그리고 단지 붉어 보일 뿐인 프레임은 어떻게 거절할 것인가.

하나의 숫자만 믿지 않는다

손가락으로 덮인 프레임은 여러 특징을 동시에 가집니다. 빨갛기만 해서는 부족합니다. 밝기가 적당해야 하고, 빨간 채널이 초록과 파랑보다 강해야 하며, 빨간색이 우세한 픽셀 비율도 충분해야 합니다.

Flow diagram Preparing diagram
View diagram source
flowchart TD
    A[중앙 영역 샘플링] --> B[평균 RGB 계산]
    B --> C[밝기가 사용 가능한 범위인가]
    C -- no --> D[너무 어둡거나 밝음]
    C -- yes --> E[빨간색 비율이 충분한가]
    E -- no --> F[손가락 없음]
    E -- yes --> G[빨간색 우세가 안정적인가]
    G -- weak --> H[덮임 약함]
    G -- strong --> I[덮임 좋음]

중앙 영역만 보는 데는 이유가 있습니다. 가장자리는 빛샘, 손가락 곡면, 움직임의 영향을 크게 받습니다.

brightness = (avgRed + avgGreen + avgBlue) / 3
redRatio = avgRed / max((avgGreen + avgBlue) / 2, 1)
redDominance = avgRed / max(avgGreen, avgBlue)
dominantRedPixelFraction = redDominantPixels / sampledPixels

밝기는 명백한 실패를 걸러냅니다. 빨간색 비율은 손끝다운 색 변화를 확인합니다. 빨간색 우세 픽셀 비율은 일부 붉은 점만으로 통과하는 일을 막습니다.

State diagram Preparing diagram
View diagram source
stateDiagram-v2
    [*] --> none
    none --> weakCoverage: 빨간색은 보이지만 약함
    weakCoverage --> good: 빨간색 우세가 안정됨
    good --> weakCoverage: 압력이나 위치가 변함
    weakCoverage --> none: 빨간색 비율 하락
    none --> tooDark: 밝기가 하한보다 낮음
    none --> tooBright: 밝기가 상한보다 높음

나쁜 한 프레임 때문에 측정을 리셋하면 안 되고, 좋은 한 프레임 때문에 바로 시작해도 안 됩니다. MonoPump의 목표는 빨간 프레임을 모두 감지하기가 아니라, 다음 몇 초 동안 쓸 만한 파형이 나올 때만 시작하기입니다.

MonoWare에서

MonoPump에는 이 노트의 더 많은 맥락이 있습니다.

제품 사이트를 열거나 MonoPump로 필터된 노트를 계속 읽으세요.

뉴스레터

개인정보와 제품 엔지니어링 노트를 가끔 보내드립니다.