Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
一個(gè)Electron項(xiàng)目中需要調(diào)用海康網(wǎng)絡(luò)攝像頭,經(jīng)調(diào)研,攝像頭需要本地安裝相關(guān)驅(qū)動(dòng),并在程序中加載攝像頭提供的SDK,然后通過(guò)SDK提供的方法調(diào)用本地驅(qū)動(dòng)來(lái)執(zhí)行想做的操作。
這里我使用官網(wǎng)提供的 WEB SDK 來(lái)進(jìn)行開(kāi)發(fā)(沒(méi)有直接為Electron或Nodejs提供服務(wù)的SDK)。
工具:WEB3.3控件開(kāi)發(fā)包 V3.3
下載 WEB SDK 文件后,里面有個(gè) demo 網(wǎng)頁(yè)以及相關(guān)的資源。開(kāi)發(fā)需要引用的資源包括以下幾個(gè):
1)HCWebSDKPlugin.exe 海康攝像頭驅(qū)動(dòng)程序,需要事先安裝到電腦上;
2)jsVideoPlugin-1.0.0.min、jquery-1.7.1.min.js、webVideoCtrl.js SDK文件及其依賴文件,需要加載到Electron項(xiàng)目中。
SDK
項(xiàng)目中大部分功能可以參考SDK中的demo文件來(lái)完成,但是在開(kāi)發(fā)過(guò)程中遇到一些似難實(shí)簡(jiǎn)的問(wèn)題。
1)畫(huà)面層級(jí)
攝像頭的畫(huà)面應(yīng)該是調(diào)用本地驅(qū)動(dòng)進(jìn)行實(shí)現(xiàn)的,然后渲染到指定元素在屏幕上的坐標(biāo)上。在頁(yè)面元素中是看不到實(shí)際的圖像元素的。
下方示圖是網(wǎng)絡(luò)攝像頭自帶的管理頁(yè)面,可以看到圖像已經(jīng)躍升到瀏覽器控制臺(tái)上方了。
畫(huà)面層級(jí)
2)畫(huà)面定位
在程序中初始化插件時(shí),會(huì)關(guān)聯(lián)一個(gè)頁(yè)面中的DOM元素,當(dāng)畫(huà)面渲染的時(shí)候會(huì)根據(jù)該dom元素按照“當(dāng)前頁(yè)面中的坐標(biāo)值”進(jìn)行渲染。
在這個(gè)項(xiàng)目中,因?yàn)橐度肴齻€(gè)攝像頭,為了便于開(kāi)發(fā),攝像頭是放在iframe中,然后再定位到程序的指定位置。因?yàn)樵趇frame中的元素是撐滿html的,坐標(biāo)為(0,0);但插件渲染畫(huà)面時(shí),是相對(duì)程序進(jìn)行定位的,但使用的是iframe中得到的坐標(biāo),所以會(huì)導(dǎo)致圖像與iframe位置發(fā)生偏差。
解決辦法:在開(kāi)發(fā)時(shí),iframe中的元素定位需要追加上它在程序中的坐標(biāo)。
畫(huà)面定位
3)多畫(huà)面的層級(jí)關(guān)系
如下圖所示,最初設(shè)計(jì)圖中,輔助鏡頭是浮在主鏡頭上方的,然后點(diǎn)擊輔助鏡頭畫(huà)面可以將其切換為主鏡頭。
但是在實(shí)際開(kāi)發(fā)中,如果初始化時(shí)直接按設(shè)計(jì)圖渲染好,那么這時(shí)如果點(diǎn)擊了主鏡頭(主鏡頭獲得了焦點(diǎn)),那么主鏡頭的層級(jí)就會(huì)上升到輔助鏡頭上方,會(huì)擋住輔助鏡頭。
解決辦法:避免攝像頭畫(huà)面壘疊。
多畫(huà)面堆疊
著HTML5及WebRTC技術(shù)的發(fā)展,前端開(kāi)發(fā)者已經(jīng)可以直接在瀏覽器中調(diào)用用戶的攝像頭設(shè)備,并借助JavaScript庫(kù)進(jìn)行復(fù)雜的人臉識(shí)別操作。本文將詳述這一過(guò)程,包括如何通過(guò)HTML5獲取攝像頭實(shí)時(shí)視頻流以及如何結(jié)合Face Detection/Recognition庫(kù)實(shí)現(xiàn)人臉檢測(cè)與識(shí)別功能。
HTML5中的?MediaDevices.getUserMedia()??方法可以讓我們請(qǐng)求訪問(wèn)用戶的媒體輸入設(shè)備,如攝像頭。下面展示基本代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Face Recognition</title>
</head>
<body>
<video id="video" width="640" height="480" autoplay></video>
<script>
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({ video: true })
.then(function(stream) {
var video = document.getElementById('video');
video.srcObject = stream;
})
.catch(function(error) {
console.error('Error accessing camera:', error);
});
} else {
console.error('getUserMedia is not supported by your browser.');
}
</script>
</body>
</html>
上述代碼首先檢查瀏覽器是否支持??getUserMedia???接口,然后嘗試請(qǐng)求訪問(wèn)用戶的攝像頭。當(dāng)請(qǐng)求成功時(shí),將攝像頭的視頻流賦值給??<video>??標(biāo)簽,使其顯示實(shí)時(shí)畫(huà)面。
雖然HTML5本身不直接提供人臉識(shí)別的功能,但我們可以引入第三方JavaScript庫(kù)如face-api.js或TensorFlow.js來(lái)處理攝像頭視頻流中的圖像數(shù)據(jù),實(shí)現(xiàn)人臉識(shí)別。
例如,使用face-api.js的基本流程:
<!-- 引入face-api.js -->
<script src="https://cdn.jsdelivr.net/npm/@vladmandic/face-api@latest/dist/face-api.min.js"></script>
<!-- ... 上面獲取攝像頭流的HTML和JS代碼 ... -->
<script>
async function setupCamera() {
const video = document.getElementById('video');
// 加載模型
await faceapi.nets.ssdMobilenetv1.loadFromUri('/models');
await faceapi.nets.faceLandmark68Net.loadFromUri('/models');
await faceapi.nets.faceRecognitionNet.loadFromUri('/models');
// 在視頻播放后開(kāi)始處理每一幀
video.addEventListener('play', () => {
const canvas = document.createElement('canvas');
const displaySize = { width: video.width, height: video.height };
faceapi.matchDimensions(canvas, displaySize);
setInterval(async () => {
const detections = await faceapi.detectAllFaces(video, new faceapi.SsdMobilenetv1Options()).withFaceLandmarks().withFaceDescriptors();
canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height);
faceapi.draw.drawDetections(canvas, detections);
faceapi.draw.drawFaceLandmarks(canvas, detections);
// 進(jìn)行人臉識(shí)別等更復(fù)雜的操作...
}, 100);
});
}
setupCamera();
</script>
在此示例中,我們首先加載face-api.js提供的預(yù)訓(xùn)練模型,然后在視頻播放過(guò)程中周期性地從每一幀中檢測(cè)人臉、提取面部特征點(diǎn)并進(jìn)行進(jìn)一步的人臉識(shí)別處理。實(shí)際的人臉識(shí)別邏輯可以根據(jù)需求編寫(xiě),例如對(duì)比已知人臉庫(kù)、計(jì)算相似度等。
注意,上述代碼片段僅展示了人臉識(shí)別框架的集成,實(shí)際應(yīng)用前需要將模型文件下載到服務(wù)器,并正確指定模型加載路徑。此外,對(duì)于大規(guī)模部署或高精度要求的應(yīng)用場(chǎng)景,還需要考慮性能優(yōu)化和隱私保護(hù)等問(wèn)題。
總結(jié)起來(lái),通過(guò)HTML5和強(qiáng)大的JavaScript庫(kù)相結(jié)合,現(xiàn)代web應(yīng)用能夠方便快捷地實(shí)現(xiàn)調(diào)用手機(jī)攝像頭并進(jìn)行人臉識(shí)別功能,這極大地豐富了Web應(yīng)用程序的交互性和實(shí)用性。
win7筆記本如何打開(kāi)攝像頭
工具/原料
amcap(僅138KB )
筆記本電腦
方法1:建立電腦自身的攝像頭
由于不少人直接使用電腦中的設(shè)備管理中查看攝像頭位置,將其復(fù)制出來(lái)粘貼到系統(tǒng)的快捷方式文件夾中,不少人反應(yīng)這是無(wú)效的,本人操作確實(shí)是無(wú)效的,因?yàn)楹芏嗳藳](méi)找不到“amcap.exe”。因此按照以下方式簡(jiǎn)單搞定,在瀏覽器中輸入引號(hào)內(nèi)內(nèi)容“amcap”,點(diǎn)擊搜索,然后下載“amcap win7 v9.11 漢化版”。
下載之后,將其解壓,然后點(diǎn)擊解壓后的文件夾,進(jìn)去。
找到引號(hào)內(nèi)內(nèi)容“amcap.exe”文件,等會(huì)而回來(lái)復(fù)制這個(gè)應(yīng)用程序。
現(xiàn)在復(fù)制引號(hào)內(nèi)內(nèi)容“Network Shortcuts”,然后在桌面點(diǎn)擊“計(jì)算機(jī)”。
進(jìn)入計(jì)算機(jī)根目錄,在上方的地址欄點(diǎn)擊一下,,粘貼剛才復(fù)制的引號(hào)內(nèi)內(nèi)容“Network Shortcuts”,然后點(diǎn)擊“回車鍵”。
這樣就進(jìn)入了電腦系統(tǒng)的應(yīng)用程序快捷方式菜單欄,這個(gè)快捷方式創(chuàng)建之后,會(huì)留在計(jì)算機(jī)根目錄,這里將攝像頭留在這里,平時(shí)使用就很方便了。回到第三步,復(fù)制“amcap.exe”,然后在這個(gè)文件目錄下單機(jī)鼠標(biāo)右鍵,然后點(diǎn)擊“粘貼”。
這是粘貼后的結(jié)果,這個(gè)程序粘貼到這里。
這時(shí)候點(diǎn)擊計(jì)算機(jī),進(jìn)入計(jì)算機(jī),這里就像xp系統(tǒng)一樣,有了攝像頭,點(diǎn)擊這個(gè)攝像頭,就可以打開(kāi)可。
進(jìn)入攝像頭,點(diǎn)擊“選項(xiàng)”。然后在彈出的確定窗口中,點(diǎn)擊“確定”。
當(dāng)然這里就打開(kāi)了,可以看見(jiàn)圖像了,你沒(méi)看見(jiàn),是因?yàn)樾【帪榱吮Wo(hù)隱私,已經(jīng)使用將攝像頭遮住,所以是這個(gè)顏色。
END
方法2:使用360安全衛(wèi)士打開(kāi)攝像頭
由于這個(gè)軟件大部分人都裝有,所以使用起來(lái)是最簡(jiǎn)單的,點(diǎn)擊電腦桌面右下角的安全衛(wèi)士圖標(biāo)。
進(jìn)入到安全衛(wèi)士主界面,這里點(diǎn)擊右方的“更多”,添加攝像頭功能。
一般來(lái)說(shuō),大家都沒(méi)有添加攝像頭的,所以,在未添加功能區(qū)域中,點(diǎn)擊“魔法攝像頭”進(jìn)行添加。
等待一會(huì)兒 ,自動(dòng)安裝完畢,點(diǎn)擊一下,就打開(kāi)了。
當(dāng)然,小編人就暫時(shí)不給大家看了,所以遮住了攝像頭;不過(guò)欣喜的是,你可以在這里自由自在地玩自拍了。
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。