1. 序論
Ambient Light Sensor は Generic Sensor API [GENERIC-SENSOR] を拡張し、デバイスの主たる光検出器により検出される環境光レベルについて、 ルクス単位で情報を提供する。
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 は、ユーザーの利用 パターンおよび周囲に関する情報を漏えいさせる可能性がある。この情報は、 ユーザープロファイリングおよび行動分析を強化するために使用され得る。
-
デバイス間リンク。2 つのデバイスが、時間経過に伴う照明レベルを相関させる 同じ第三者スクリプトを含むウェブサイトにアクセスできる。
-
デバイス間通信。単純なブロードキャスト通信方法は、 デバイス画面またはカメラ LED の点滅を用いて、近くのデバイスの Ambient Light Sensor で読み取られるメッセージをブロードキャストできる。
-
クロスオリジン漏えい。画面から発せられた光は、近くの反射面から センサーへ反射して戻る可能性がある。悪意あるサイトは、異なるオリジンの リソースを埋め込み、そのコンテンツを拡大縮小して特定のピクセルを表示し、 コンテンツをピクセル単位で識別可能にできる。
-
閲覧履歴の乗っ取り。訪問済みリンクと未訪問リンクに関連付けられた 光レベルを識別できるように訪問済みリンクをスタイル付けする。すなわち、 訪問済みリンクを黒い画面のブロックとして、未訪問リンクを白としてスタイル付けする。
[ALSPRIVACYANALYSIS]、[PINSKIMMINGVIASENSOR]、 [STEALINGSENSITIVEDATA]、 [VIDEORECOGNITIONAMBIENTLIGHT]、および [IMAGINGPRIVACY] などの著作は、 これらの問題をさらに掘り下げている。
Ambient Light Sensor に固有のこれらの脅威を軽減するため、ユーザーエージェントは センサー読み取り値の精度を低減しなければならない。ユーザーエージェントは 最大サンプリング周波数を制限してもよい。
これらの軽減戦略は、Generic Sensor API [GENERIC-SENSOR] で定義される 一般的な 軽減策 を補完する。
3.1. センサー読み取り値の精度を低減する
センサー読み取り値の精度を低減するため、この仕様は しきい値チェックアルゴリズム (環境光しきい値チェックアルゴリズム) および 読み取り値量子化アルゴリズム (環境光読み取り値量子化 アルゴリズム) を定義する。
これらのアルゴリズムは、照度丸め倍数および 照度しきい値を使用する。実装は、 それらの値について以下の要件に従わなければならない:
注: 照度丸め 倍数を選択するには、過度に精密な読み取り値を公開しないことと、API 利用者にとって なお有用な読み取り値を提供することとの均衡を取る必要がある。 照度丸め倍数の最小値としての 50 lux という値は、 異なる照明条件下での異なる環境光レベル測定値が収集 され、[STEALINGSENSITIVEDATA] で説明された攻撃を阻止することが示された後、 GitHub issue #13 で決定された。50 lux はまた、環境光センサー読み取り値を用いた 動画認識 ([VIDEORECOGNITIONAMBIENTLIGHT]) を実行不可能にするために必要な 5 lux よりも高い。
注: 照度しきい値は、 読み取り値が特定の値の周辺を行き来しているが、異なる値に量子化されるという事実を漏えいしないようにするために 使用される。たとえば、照度丸め倍数が 50 の場合、 生の読み取り値が 24 と 26 の間で切り替わっても、照度値が 0 と 50 の間で切り替わることを防ぐ。 補助的なフィンガープリンティング軽減戦略としての しきい値チェックアルゴリズムの有効性は 数学的には証明されていないが、実装経験に基づいてこの仕様に追加された。 Chromium bug 1332536 および Chromium review 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"
である。
現在の光 レベルまたは 照度 は、ホストデバイスの周囲の環境光レベルを表す値である。 その単位はルクス (lx) [SI] である。
注: 同じ光の下で異なるデバイスにより報告される 正確なルクス値は、検出方法、センサー構造などの違いにより、 異なることがある。
Ambient Light Sensor は、ルクスで測定される 照度丸め 倍数を持つ。これは、照度読み取り値が丸められる先の 倍数となる数を表す。
Ambient Light Sensor は、ルクスで測定される 照度しきい値を持ち、 これは環境光しきい値チェックアルゴリズムで使用される。
注: 上述の値の最小要件については、§ 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オブジェクト。
-
AmbientLightSensorを用いて センサーポリシー制御機能をチェックする を呼び出した結果を allowed とする。 -
allowed が false なら、次を実行する:
-
新しい
AmbientLightSensorオブジェクトを ambient_light_sensor とする。 -
ambient_light_sensor および options を用いて センサーオブジェクトを初期化するを呼び出す。
-
ambient_light_sensor を返す。
6.2. 環境 光しきい値チェックアルゴリズム
Ambient Light Sensor センサー型は、次のしきい値チェックアルゴリズムを定義する:
- 入力
-
newReading、センサー 読み取り値
latestReading、センサー 読み取り値
- 出力
-
読み取り値の差が十分に重要であるかを示す 真偽値。
-
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、センサー 読み取り値
- 出力
-
reading を quantizedReading とする。
-
quantizedReading["illuminance"] を、reading["illuminance"] が最も近い 照度丸め倍数の倍数に設定する。
-
quantizedReading を返す。
7. 自動化
この節は、Generic Sensor API § 9 Automation を拡張し、Ambient Light Sensor 固有の仮想センサーメタデータを提供する。
Object
parameters が与えられた場合、照度読み取り値解析アルゴリズムは、
parameters および "illuminance" を用いて
単一値数値読み取り値を解析するを呼び出した結果を
返さなければならない。
型ごとの仮想センサーメタデータ マップ は、次のエントリを持たなければならない:
- キー
- 値
-
仮想センサーメタデータであって、その 読み取り値解析アルゴリズムが 照度読み取り値解析アルゴリズム であるもの。
8. ユースケースおよび要件
-
Web アプリケーションが、照明を制御するためにスマートホームシステムへ入力を提供する。
-
Web アプリケーションが、作業空間の光レベルが十分であるかを確認する。
-
Web アプリケーションが、手動制御 (絞り、シャッター速度、ISO) を備えるカメラの設定を計算する。
-
Web アプリケーションが、カメラストリームにその目的に十分な精度のデータが含まれるかを判断するために、 現在の光レベルを確認する (例: 人の存在確認)。
一部のユースケースは精密な環境光測定値を取得することから恩恵を受ける可能性がある一方、 環境光レベルの変動をユーザー入力イベントへ変換するユースケースは、より高い サンプリング周波数から恩恵を受ける。
9. 謝辞
初期プロトタイプについて Doug Turner に、 テストスイートについて Marcos Caceres に感謝する。
LightLevelSensor のアイデアについて Paul Bakaus に感謝する。
ユースケースおよび要件について Mikhail Pozdnyakov と Alexander Shalamov に感謝する。
プライバシーリスク評価について Lukasz Olejnik に感謝する。