


Bagaimana untuk melaksanakan sistem pengecaman muka dalam talian menggunakan WebSocket dan JavaScript
Terhad oleh keupayaan pemprosesan visual semula jadi manusia, sistem pengecaman visual manusia tidak boleh dibandingkan dengan komputer dalam banyak aspek Contohnya, kuasa otak manusia tidak mencukupi untuk mengenali sejumlah besar wajah dalam tempoh yang singkat. Walau bagaimanapun, dalam teknologi komputer yang canggih hari ini, teknologi pengecaman muka telah menjadi semakin matang. Menggunakan gabungan penglihatan komputer dan kecerdasan buatan, kami telah dapat membangunkan pelbagai teknologi pengecaman muka, salah satu yang paling penting ialah sistem pengecaman muka dalam talian. Artikel ini bertujuan untuk memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman muka dalam talian.
Mula-mula anda perlu memahami apa itu WebSocket. WebSocket ialah protokol komunikasi rangkaian berdasarkan protokol TCP. Ia menyediakan sambungan berterusan antara penyemak imbas dan pelayan, membolehkan komunikasi dua hala. Dalam artikel ini, kami akan menggunakan WebSocket untuk menghantar maklumat imej dan pengecaman daripada klien ke pelayan, dan untuk menghantar hasil pengecaman daripada pelayan kembali kepada klien.
Langkah pertama ialah membuat sambungan WebSocket. Dalam klien, buat sambungan WebSocket dengan coretan kod berikut:
let socket = new WebSocket("ws://localhost:8080/"); socket.onopen = function() { console.log("WebSocket连接已打开"); }; socket.onmessage = function(event) { console.log(event.data); };
Ini akan membuka sambungan WebSocket pada localhost, menyambung ke port 8080. Apabila sambungan WebSocket dibuka, log "Sambungan WebSocket dibuka" akan dikeluarkan. Apabila mesej diterima daripada pelayan, data mesej dikeluarkan ke konsol.
Kini kita perlu melaksanakan fungsi klien menghantar maklumat imej ke pelayan. Terdapat beberapa kaedah untuk menangkap imej, termasuk elemen "
let video = document.querySelector('video'); navigator.mediaDevices.getUserMedia({video: true}) .then(function (stream) { video.srcObject = stream; });
Imej yang ditangkap kini boleh dilukis ke dalam elemen
let canvas = document.getElementById('canvas'); let context = canvas.getContext('2d'); context.drawImage(video, 0, 0, canvas.width, canvas.height);
Data imej boleh dilukis sebagai Base64 string Ekstrak dan hantar ke pelayan melalui WebSocket:
let dataUrl = canvas.toDataURL('image/jpeg', 1.0); socket.send(dataUrl);
Pelayan akan menggunakan OpenCV dan Python untuk memproses dan mengenali imej yang diterima. Berikut ialah skrip Python mudah yang menggunakan OpenCV untuk memotong muka daripada imej:
import cv2 def detect_faces(image): face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) return faces def extract_faces(image_path): image = cv2.imread(image_path) faces = detect_faces(image) for i, (x, y, w, h) in enumerate(faces): face_image = image[y:y+h, x:x+w] cv2.imwrite('face_{}.jpg'.format(i), face_image)
Seperti yang anda boleh lihat, skrip ini menggunakan pengesan muka dalam OpenCV untuk mengesan wajah dalam imej dan menukar muka menjadi Potong dan simpannya ke fail "face_{}.jpg".
Di bahagian pelayan, anda boleh menulis program WebSocket berikut menggunakan Python.
import asyncio import cv2 import base64 import io from aiohttp import web async def index(request): return web.Response(text="WebSocket服务器已启动!") async def websocket_handler(request): ws = web.WebSocketResponse() await ws.prepare(request) while True: data = await ws.receive() if data.type == web.WSMsgType.TEXT: await ws.send_str("接收到了一张新的图像,请稍候……") img_data = data.data[23:] # 截取“data:image/jpeg;base64,”之后的数据 try: img_bytes = base64.b64decode(img_data) img_stream = io.BytesIO(img_bytes) img_np = cv2.imdecode(np.frombuffer(img_stream.read(), np.uint8), cv2.IMREAD_UNCHANGED) # 图像识别代码 # ... # 向客户端发送识别结果 await ws.send_str("这是一个人脸。") except: await ws.send_str("出错了,无法处理该图像。") elif data.type == web.WSMsgType.ERROR: print("WebSocket连接发生错误! Code:{}".format(ws.exception())) break return ws app = web.Application() app.router.add_get('/', index) app.router.add_get('/ws', websocket_handler) # /ws是WebSocket路径,亦可为其他路径 web.run_app(app, port=8080)
Apabila sambungan WebSocket dibuka, fungsi websocket_handler akan berjalan secara automatik dan terus mendengar mesej daripada klien. Apabila imej baharu diterima, pengekodan Base64 dihuraikan dan diproses menggunakan OpenCV. Selepas data diproses, hasilnya dikembalikan kepada pelanggan.
Pada ketika ini, kami telah berjaya melaksanakan sistem pengecaman muka dalam talian. Kod sisi klien dan sisi pelayan yang lengkap adalah seperti berikut:
Pelanggan:
<html> <head> <meta charset="UTF-8"> <title>人脸识别</title> </head> <body> <h1 id="人脸识别">人脸识别</h1> <video width="320" height="240" autoplay></video> <canvas id="canvas" width="320" height="240"></canvas> <script> let socket = new WebSocket("ws://localhost:8080/"); socket.onopen = function() { console.log("WebSocket连接已打开"); }; socket.onmessage = function(event) { console.log(event.data); }; let video = document.querySelector('video'); navigator.mediaDevices.getUserMedia({video: true}) .then(function (stream) { video.srcObject = stream; }); let canvas = document.getElementById('canvas'); let context = canvas.getContext('2d'); setInterval(function() { context.drawImage(video, 0, 0, canvas.width, canvas.height); let dataUrl = canvas.toDataURL('image/jpeg', 1.0); socket.send(dataUrl); }, 500); </script> </body> </html>
Sisi pelayan:
import asyncio import cv2 import base64 import io from aiohttp import web async def index(request): return web.Response(text="WebSocket服务器已启动!") async def websocket_handler(request): ws = web.WebSocketResponse() await ws.prepare(request) while True: data = await ws.receive() if data.type == web.WSMsgType.TEXT: await ws.send_str("接收到了一张新的图像,请稍候……") img_data = data.data[23:] # 截取“data:image/jpeg;base64,”之后的数据 try: img_bytes = base64.b64decode(img_data) img_stream = io.BytesIO(img_bytes) img_np = cv2.imdecode(np.frombuffer(img_stream.read(), np.uint8), cv2.IMREAD_UNCHANGED) # 图像识别代码 # ... # 向客户端发送识别结果 await ws.send_str("这是一个人脸。") except: await ws.send_str("出错了,无法处理该图像。") elif data.type == web.WSMsgType.ERROR: print("WebSocket连接发生错误! Code:{}".format(ws.exception())) break return ws app = web.Application() app.router.add_get('/', index) app.router.add_get('/ws', websocket_handler) web.run_app(app, port=8080)
Saya harap artikel ini dapat membantu anda memahami cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman muka dalam talian dan cepat membinanya Hadirkan sistem yang boleh dilaksanakan.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan sistem pengecaman muka dalam talian menggunakan WebSocket dan JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

Bagaimana cara menggabungkan elemen array dengan ID yang sama ke dalam satu objek dalam JavaScript? Semasa memproses data, kita sering menghadapi keperluan untuk mempunyai id yang sama ...

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Perbincangan mendalam mengenai punca-punca utama perbezaan dalam output konsol.log. Artikel ini akan menganalisis perbezaan hasil output fungsi Console.log dalam sekeping kod dan menerangkan sebab -sebab di belakangnya. � ...

Sebaik sahaja anda telah menguasai tutorial TypeScript peringkat kemasukan, anda harus dapat menulis kod anda sendiri dalam IDE yang menyokong TypeScript dan menyusunnya ke dalam JavaScript. Tutorial ini akan menyelam ke dalam pelbagai jenis data dalam TypeScript. JavaScript mempunyai tujuh jenis data: null, undefined, boolean, nombor, rentetan, simbol (diperkenalkan oleh ES6) dan objek. Typescript mentakrifkan lebih banyak jenis atas dasar ini, dan tutorial ini akan meliputi semuanya secara terperinci. Jenis data null Seperti JavaScript, Null dalam TypeScript

Perbincangan mengenai realisasi kesan animasi tatal dan elemen Parallax dalam artikel ini akan meneroka bagaimana untuk mencapai yang serupa dengan laman web rasmi Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ... ...

JavaScript boleh dijalankan di PowerPoint, dan boleh dilaksanakan dengan memanggil fail JavaScript luaran atau membenamkan fail HTML melalui VBA. 1. Untuk menggunakan VBA untuk memanggil fail JavaScript, anda perlu mendayakan makro dan mempunyai pengetahuan pengaturcaraan VBA. 2. Benamkan fail HTML yang mengandungi JavaScript, yang mudah dan mudah digunakan tetapi tertakluk kepada sekatan keselamatan. Kelebihan termasuk fungsi lanjutan dan fleksibiliti, sementara kelemahan melibatkan keselamatan, keserasian dan kerumitan. Dalam praktiknya, perhatian harus dibayar kepada keselamatan, keserasian, prestasi dan pengalaman pengguna.
