人臉辨識已成為社交應用、安防監控、身份驗證的標配功能。本文系統梳理前端、後端、雲端三大技術路線,涵蓋 jQuery 前端實時檢測、PHP OpenCV 擴展、雲端 REST API、Ruby/.NET 封裝,助你根據場景選型最優方案。
| 方案 | 核心技術 | 執行環境 | 優勢 | 劣勢 | 適用場景 |
|---|---|---|---|---|---|
| jQuery 插件 | LiuLiu 算法 + HTML5 Canvas | 瀏覽器端 | 零伺服器成本、實時互動、隱私不出設備 | 受限於客戶端算力、模型精度較低、需現代瀏覽器 | 網頁濾鏡、簡單標記、原型驗證 |
| PHP OpenCV 擴展 | OpenCV Haar/LBP 分類器 | 伺服器端 | 成熟穩定、支援視頻流、可離線部署 | 需編譯 C 擴展、模型較舊、深度學習支援弱 | 傳統 CMS、內部系統、不想依賴雲端 |
| 雲端 API (Face++/AWS/Azure) | 深度學習模型 (ResNet/MobileNet) | 雲端 GPU 集群 | 精度最高、支援屬性分析(年齡/性別/情緒)、免維運 | 需網路、按量付費、數據隱私合規要求高 | 商業級應用、金融級實名、大規模檢索 |
| OpenCVDotNet / Ruby OpenCV | OpenCV C++ 封裝 | .NET / Ruby 環境 | 語言原生整合、效能接近 C++ | 部署複雜、社區相對較小 | 現有 .NET/Ruby 技術棧專案 |
GitHub: liuliu/ccv (C 版) / facedetect (JS 移植版)
{x, y, width, height, confidence}<?php
// 安裝:pecl install opencv (需系統預裝 OpenCV dev 包)
// 或參考 XARG 篇教程手動編譯
$img = 'group_photo.jpg';
$count = face_count($img); // 偵測人臉數量
$faces = face_detect($img); // 返回 [['x'=>,'y'=>,'w'=>,'h'=>], ...]
foreach ($faces as $face) {
// 繪製矩形框、裁剪頭像、存儲特徵向量...
}
?>
遷移建議:OpenCV 4.x 已棄用 Haar 分類器,新專案建議改用 DNN 模組載入 ONNX/TensorRT 模型,或直接呼叫 Python 微服務(FastAPI + insightface/retinaface)。
<?php
// Face++ 範例
$apiKey = 'YOUR_KEY'; $apiSecret = 'YOUR_SECRET';
$url = 'https://api-cn.faceplusplus.com/facepp/v3/detect';
$data = [
'api_key' => $apiKey,
'api_secret' => $apiSecret,
'image_url' => 'https://example.com/photo.jpg',
'return_attributes' => 'gender,age,smiling,headpose,facequality',
];
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
]);
$resp = json_decode(curl_exec($ch), true);
curl_close($ch);
// $resp['faces'] 包含完整屬性
?>