顔枠と特徴点の描画コード詳細解説
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,
face.box.yMin,
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. 信頼度スコアを表示(背景付きテキスト)