顔枠と特徴点の描画コード詳細解説

Canvas 2D APIを使用して、リアルタイムで顔枠と特徴点を描画します。グロー効果(発光効果)で視認性を向上させています。
// キャンバスのコンテキストを取得
const canvas = document.getElementById('overlay');
const ctx = canvas.getContext('2d');
// キャンバスをクリア(前のフレームを消去)
ctx.clearRect(0, 0, canvas.width, canvas.height);
1 キャンバスの準備: オーバーレイ用のCanvas要素を取得し、2Dコンテキストを取得します。毎フレーム開始時に`clearRect()`で前のフレームを消去します。
// 顔の周りに枠を描画(グラデーション効果)
ctx.strokeStyle = '#00ff00'; // 緑色
ctx.lineWidth = 3; // 線の太さ
ctx.shadowColor = '#00ff00'; // 影の色
ctx.shadowBlur = 10; // 影のぼかし(グロー効果)
ctx.strokeRect(
    face.box.xMin, // 左上のX座標
    face.box.yMin, // 左上のY座標
    face.box.width, // 幅
    face.box.height // 高さ
);
ctx.shadowBlur = 0; // 影をリセット
2 顔枠の描画: `strokeRect()`で顔の周りに緑色の枠を描画します。`shadowBlur: 10`でグロー効果(発光効果)を追加し、視認性を向上させています。
// 特徴点(目・鼻・口・耳)を描画
ctx.fillStyle = '#ff0000'; // 赤色
ctx.shadowColor = '#ff0000';
ctx.shadowBlur = 5;
face.keypoints.forEach(keypoint => {
    ctx.beginPath();
    ctx.arc(keypoint.x, keypoint.y, 4, 0, 2 * Math.PI);
    ctx.fill();
});
ctx.shadowBlur = 0;
3 特徴点の描画: `arc()`で円を描画し、`fill()`で塗りつぶします。半径4ピクセルの赤い点で、目・鼻・口・耳の位置を表示します。
// 信頼度スコアを表示(背景付き)
const scoreText = `信頼度: ${Math.round(face.score * 100)}%`;
ctx.font = 'bold 16px Arial';
const textMetrics = ctx.measureText(scoreText);
const textWidth = textMetrics.width;
// 背景の矩形
ctx.fillStyle = 'rgba(0, 255, 0, 0.8)'; // 半透明の緑
ctx.fillRect(
    face.box.xMin - 2,
    face.box.yMin - 25,
    textWidth + 10,
    22
);
// テキスト
ctx.fillStyle = '#000'; // 黒色
ctx.fillText(scoreText, face.box.xMin + 3, face.box.yMin - 8);
4 信頼度スコアの表示: `measureText()`でテキスト幅を取得し、半透明の緑色の背景を描画してから、黒色のテキストを表示します。読みやすさを重視した設計です。
上記のコードで描画される結果のプレビュー
描画の順序:
1. キャンバスをクリア(前のフレームを消去)
2. 顔枠を描画(緑色、グロー効果付き)
3. 特徴点を描画(赤色、6個の点)
4. 信頼度スコアを表示(背景付きテキスト)