1. 소개
Ambient Light Sensor는 Generic Sensor API [GENERIC-SENSOR]를 확장하여 기기의 주 광 검출기가 감지한 주변광 수준에 대한 정보를 lux 단위로 제공한다.
1.1. 범위
이 문서는 낮은 지연 시간과, 가능하면 높은 빈도로 샘플링되는 세밀한 조도 데이터가 필요한 사용 사례를 위해 설계된 API를 명세한다.
대비 수준이나 선호 색 구성표에 따라 웹페이지를 스타일링하는 것처럼,
기기가 측정한 주변광 수준의 영향을 받을 수 있는 소수의 조도 값에 의존하는
일반적인 사용 사례는 prefers-contrast 및 prefers-color-scheme
CSS 미디어 특성 [MEDIAQUERIES-5]
뿐만 아니라 동반되는 matchMedia API
[CSSOM-VIEW-1]가
더 잘 지원하며, 이 API의 범위 밖이다.
참고: [MEDIAQUERIES-5] 명세에는 과거에
주변광 판독값과 더 직접적으로 연결된 light-level
미디어 특성이 포함되어 있었다. 이후 이 특성은 더 높은 수준의
prefers-color-scheme 및 prefers-contrast 미디어 특성을 위해
명세에서 제거되었다.
2. 예제
const sensor= new AmbientLightSensor(); sensor. onreading= () => console. log( sensor. illuminance); sensor. onerror= event=> console. log( event. error. name, event. error. message); sensor. start();
illuminance
값을 가장 가까운 노출값으로 변환한다.
navigator. permissions. query({ name: 'ambient-light-sensor' }). then( result=> { if ( result. state=== 'denied' ) { console. log( 'Permission to use ambient light sensor is denied.' ); return ; } const als= new AmbientLightSensor({ frequency: 20 }); als. addEventListener( 'activate' , () => console. log( 'Ready to measure EV.' )); als. addEventListener( 'error' , event=> console. log( `Error: ${ event. error. name} ` )); als. addEventListener( 'reading' , () => { // Defaut ISO value. const ISO= 100 ; // Incident-light calibration constant. const C= 250 ; let EV= Math. round( Math. log2(( als. illuminance* ISO) / C)); console. log( `Exposure Value (EV) is: ${ EV} ` ); }); als. start(); });
const als= new AmbientLightSensor(); als. onreading= () => { let str= luxToWorkplaceLevel( als. illuminance); if ( str) { console. log( `Light level is suitable for: ${ str} .` ); } }; als. start(); function luxToWorkplaceLevel( lux) { if ( lux> 20 && lux< 100 ) { return 'public areas, short visits' ; } else if ( lux> 100 && lux< 150 ) { return 'occasionally performed visual tasks' ; } else if ( lux> 150 && lux< 250 ) { return 'easy office work, classes, homes, theaters' ; } else if ( lux> 250 && lux< 500 ) { return 'normal office work, groceries, laboratories' ; } else if ( lux> 500 && lux< 1000 ) { return 'mechanical workshops, drawing, supermarkets' ; } else if ( lux> 1000 && lux< 5000 ) { return 'detailed drawing work, visual tasks of low contrast' ; } return ; }
3. 보안 및 개인정보 고려사항
Ambient Light Sensor는 기기 환경 근처의 조명 조건에 대한 정보를 제공한다. 잠재적인 개인정보 위험은 다음을 포함한다:
-
프로파일링. Ambient Light Sensor는 사용자의 사용 패턴과 주변 환경에 대한 정보를 누출할 수 있다. 이 정보는 사용자 프로파일링과 행동 분석을 강화하는 데 사용될 수 있다.
-
교차 기기 연결. 두 기기가 시간에 따른 조명 수준을 상관시키는 동일한 제3자 스크립트를 포함한 웹 사이트에 접근할 수 있다.
-
교차 기기 통신. 간단한 브로드캐스트 통신 방법은 기기 화면이나 카메라 LED 플래시를 사용하여 가까운 다른 기기의 Ambient Light Sensor로 읽어 들일 메시지를 브로드캐스트할 수 있다.
-
교차 출처 누출. 화면에서 방출된 빛은 근처의 반사 표면에서 센서로 다시 반사될 수 있다. 악의적인 사이트는 다른 출처의 리소스를 임베드하고 특정 픽셀을 표시하도록 콘텐츠를 확대/축소하여 내용을 픽셀 단위로 구별할 수 있게 할 수 있다.
-
브라우징 이력 탈취. 방문한 링크와 방문하지 않은 링크와 관련된 조도 수준을 구별할 수 있도록 방문한 링크를 스타일링한다. 즉, 방문한 링크는 검은 화면 블록으로, 방문하지 않은 링크는 흰색으로 스타일링한다.
[ALSPRIVACYANALYSIS], [PINSKIMMINGVIASENSOR], [STEALINGSENSITIVEDATA], [VIDEORECOGNITIONAMBIENTLIGHT], 및 [IMAGINGPRIVACY]와 같은 작업은 이러한 문제를 더 깊이 다룬다.
Ambient Light Sensor에 특화된 이러한 위협을 완화하기 위해 사용자 에이전트는 센서 판독값의 정확도를 낮춰야 한다. 사용자 에이전트는 최대 샘플링 빈도를 제한할 수도 있다.
이러한 완화 전략은 Generic Sensor API [GENERIC-SENSOR]에 정의된 일반적 완화를 보완한다.
3.1. 센서 판독값 정확도 낮추기
센서 판독값의 정확도를 낮추기 위해, 이 명세는 임계값 검사 알고리즘( 주변광 임계값 검사 알고리즘)과 판독값 양자화 알고리즘( 주변광 판독값 양자화 알고리즘)을 정의한다.
이 알고리즘들은 조도 반올림 배수와 조도 임계값을 사용한다. 구현은 그 값에 대해 다음 요구사항을 준수해야 한다:
참고: 조도 반올림 배수를 선택하려면 너무 정밀한 판독값을 노출하지 않는 것과 API 사용자에게 여전히 유용한 판독값을 제공하는 것 사이의 균형을 맞춰야 한다. 조도 반올림 배수의 최솟값으로서 50 lux 값은 서로 다른 조명 조건에서의 다양한 주변광 수준 측정값이 수집되고 [STEALINGSENSITIVEDATA]에 설명된 공격을 좌절시키는 것으로 나타난 뒤, GitHub 이슈 #13에서 결정되었다. 50 lux는 또한 주변광 센서 판독값을 사용한 비디오 인식 ([VIDEORECOGNITIONAMBIENTLIGHT])을 실행 불가능하게 만드는 데 필요한 5 lux보다도 높다.
참고: 조도 임계값은 판독값이 특정 값 주변에서 맴돌지만 서로 다른 값으로 양자화된다는 사실이 누출되는 것을 방지하는 데 사용된다. 예를 들어, 조도 반올림 배수가 50인 경우, 원시 판독값이 24와 26 사이에서 전환되더라도 조도 값이 0과 50 사이에서 전환되는 것을 방지한다. 보조 지문채취 완화 전략으로서 임계값 검사 알고리즘의 효과는 수학적으로 증명되지 않았지만, 구현 경험에 근거하여 이 명세에 추가되었다. Chromium 버그 1332536 및 Chromium 리뷰 3666917에는 이에 대한 더 많은 정보가 포함되어 있다.
4. 모델
Ambient Light
Sensor 센서 타입의 연결된 Sensor
서브클래스는 AmbientLightSensor
클래스이다.
Ambient Light Sensor에는 기본 센서가 있으며, 이는 기기의 주 광 검출기이다.
Ambient Light
Sensor는 "ambient-light-sensor"라는
이름으로
식별되는
강력한 기능이며,
이는 또한 연결된 센서 권한 이름이기도 하다. 그
권한 철회 알고리즘은
"ambient-light-sensor"로
일반 센서 권한 철회
알고리즘을 호출한 결과이다.
Ambient Light
Sensor는 문자열
"ambient-light-sensor"로 식별되는 정책 제어 기능이다. 그
기본 허용 목록은 'self'이다.
Ambient Light
Sensor에는
"ambient-light"인
가상 센서 타입이 있다.
현재 광 수준 또는 조도는 호스팅 기기 주변의 주변광 수준을 나타내는 값이다. 그 단위는 lux (lx) [SI]이다.
참고: 동일한 빛 아래에서 서로 다른 기기가 보고하는 정확한 lux 값은 검출 방법, 센서 구성 등의 차이로 인해 다를 수 있다.
Ambient Light Sensor에는 lux 단위로 측정되는 조도 반올림 배수가 있으며, 이는 조도 판독값이 올림될 배수를 나타내는 숫자이다.
Ambient Light Sensor에는 lux 단위로 측정되는 조도 임계값이 있으며, 이는 주변광 임계값 검사 알고리즘에서 사용된다.
참고: 위에서 설명한 값들의 최솟값 요구사항은 § 3.1 센서 판독값 정확도 낮추기를 보라.
5. API
5.1. AmbientLightSensor 인터페이스
[SecureContext ,Exposed =Window ]interface :AmbientLightSensor Sensor {(constructor optional SensorOptions = {});sensorOptions readonly attribute double ?; };illuminance
AmbientLightSensor
객체를 구성하려면 사용자 에이전트는
주변광 센서 객체 구성
추상 연산을 호출해야 한다.
5.1.1. illuminance 속성
illuminance
getter 단계는 다음과 같다:
-
this와 "illuminance"를 인자로 사용하여 최신 판독값에서 값 가져오기를 호출한 결과를 illuminance라고 하자.
-
illuminance를 반환한다.
6. 추상 연산
6.1. 주변광 센서 객체 구성
- 입력
-
options,
SensorOptions객체. - 출력
-
AmbientLightSensor로 센서 정책 제어 기능 검사를 호출한 결과를 allowed라고 하자. -
allowed가 false이면:
-
새
AmbientLightSensor객체를 ambient_light_sensor라고 하자. -
ambient_light_sensor와 options로 센서 객체 초기화를 호출한다.
-
ambient_light_sensor를 반환한다.
6.2. 주변광 임계값 검사 알고리즘
Ambient Light Sensor 센서 타입은 다음 임계값 검사 알고리즘을 정의한다:
-
newReading["illuminance"]가 null이면, true를 반환한다.
-
latestReading["illuminance"]가 null이면, true를 반환한다.
-
newReading["illuminance"]를 newIlluminance라고 하자.
-
latestReading["illuminance"]를 latestIlluminance라고 하자.
-
abs(latestIlluminance - newIlluminance) < 조도 임계값이면, false를 반환한다.
-
newIlluminance로 주변광 판독값 양자화 알고리즘 알고리즘을 호출한 결과를 roundedNewReading이라고 하자.
-
latestIlluminance로 주변광 판독값 양자화 알고리즘 알고리즘을 호출한 결과를 roundedLatestReading이라고 하자.
-
roundedNewReading["illuminance"]와 roundedLatestIlluminance["illuminance"]가 같으면, false를 반환한다.
-
그렇지 않으면, true를 반환한다.
참고: 이 알고리즘은 주변광 판독값 양자화 알고리즘을 호출하여 같은 값으로 올림되는 판독값이 주 최신 판독값 업데이트 알고리즘에서 업데이트를 트리거하지 않도록 보장한다. 그렇게 하지 않으면 원시 조도 판독값이 조도 임계값만큼은 차이가 나지만 서로 다른 조도 반올림 배수로 올림되지는 않는 범위 안에 있다는 사실을 사용자에게 나타내게 된다.
6.3. 주변광 판독값 양자화 알고리즘
Ambient Light Sensor 센서 타입은 다음 판독값 양자화 알고리즘을 정의한다:
-
reading을 quantizedReading이라고 하자.
-
quantizedReading["illuminance"]를 reading["illuminance"]에 가장 가까운 조도 반올림 배수의 배수로 설정한다.
-
quantizedReading을 반환한다.
7. 자동화
이 절은 Generic Sensor API § 9 자동화를 확장하여 Ambient Light Sensor에 특화된 가상 센서 메타데이터를 제공한다.
Object
parameters가 주어졌을 때,
조도 판독값
구문 분석 알고리즘은
parameters 및 "illuminance"로
단일 값 숫자 판독값 구문 분석을 호출한 결과를
반환해야 한다.
타입별 가상 센서 메타데이터 map은 다음 항목을 가져야 한다:
- 키
- 값
8. 사용 사례 및 요구사항
-
웹 애플리케이션이 조명을 제어하기 위해 스마트 홈 시스템에 입력을 제공한다.
-
웹 애플리케이션이 작업 공간의 조도 수준이 충분한지 확인한다.
-
웹 애플리케이션이 수동 제어가 가능한 카메라 설정(조리개, 셔터 속도, ISO)을 계산한다.
-
웹 애플리케이션이 현재 조도 수준을 확인하여 카메라 스트림이 그 목적에 충분히 정확한 데이터를 포함할지 판단한다(예: 사람 존재 확인).
일부 사용 사례는 정밀한 주변광 측정값을 얻는 것에서 이점을 얻을 수 있지만, 주변광 수준 변동을 사용자 입력 이벤트로 변환하는 사용 사례는 더 높은 샘플링 빈도에서 이점을 얻을 수 있다.
9. 감사의 말
초기 프로토타입을 만든 Doug Turner와 테스트 모음을 만든 Marcos Caceres에게 감사한다.
LightLevelSensor 아이디어를 제안한 Paul Bakaus에게 감사한다.
사용 사례와 요구사항을 제공한 Mikhail Pozdnyakov와 Alexander Shalamov에게 감사한다.
개인정보 위험 평가를 수행한 Lukasz Olejnik에게 감사한다.