【要約】スマホのカメラから色を検出したい [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
- ・RGBモデルでは、明るさの変化により同じ色でも数値が大きく変動する。
- ・RGBのままでは「赤っぽい」といった直感的な判定が困難である。
- ・彩度が低い無彩色(白・黒・グレー)を、特定の色として誤検出するリスクがある。
- ・色相環の境界(0°付近)において、単一の範囲指定では判定が漏れる。
// Approach
1.RGBからHSLへの変換。
rgbToHsl関数を用い、H・S・Lを算出する。2.色の定義。
DEFSオブジェクトに各色のhRanges、sMin、lMin/lMaxを保持する。3.2段階判定。
matches関数にて、まず彩度と明度で無彩色を除外する。4.色相判定。残ったピクセルに対し、定義された
hRanges内かを確認する。5.境界対応。赤色のように0°を跨ぐ色は、
hRangesを複数定義して対応する。// Result
- ・HSLモデルの採用により、直感的な色判定を実現。
- ・彩度・明度の閾値設定により、無彩色の誤検出を効果的に抑制。
- ・HTML/JavaScriptのみで動作する、軽量な色検出ロジックを構築。
Senior Engineer Insight
> フロントエンドのみで完結する軽量な実装として非常に優秀。計算コストが低く、リアルタイム処理に適している。ただし、照明条件の影響を強く受ける点は留意が必要だ。実戦投入時は、ホワイトバランス補正や、照明変動への耐性を考慮すべきである。より高度な精度や物体認識を求めるなら、TensorFlow.js等の機械学習モデルの併用を推奨する。