webRTC 实现人脸识别

简介: webRTC主要是帮我们处理多媒体应用,如音视频通话,屏幕共享都可以实现,主要基于浏览器API调用,其底层浏览器会调用native C++ 等一些库帮我们实现的,而我们在应用层掉API 即可。

image.png


首先我们需要先了解一下什么是webRTC 他能做什么


webRTC主要是帮我们处理多媒体应用,如音视频通话,屏幕共享都可以实现,主要基于浏览器API调用,其底层浏览器会调用native C++ 等一些库帮我们实现的,而我们在应用层掉API 即可。


桌面程序我们选择 tauri 而不是 electron


  1. 体积更小 electron 的 架构是 将 Node.js 集成到 Chromium 中 因此啥也不写打包完之后体积也有40-50MB 而 tauri 不在嵌入 nodejs + Chromium 前端使用 webview2 渲染,后端和操作系统集成这块使用rust实现,打包只有3MB。
  2. 安全方面,tauri 最终在打包之后会生成二进制文件,会增加破解难度,而electron 打包 会把node_modules打进去,增加了体积,而且没有加密。
  3. 自动更新 electron 和 tauir 都内置了自动更新 但是electron还是使用electron-updater 多一些,tauri 相比electron 就简单了tauri.app/zh-cn/v1/gu…


详细对比


image.png

image.png


安装rust


tauri 是基于 rust 的 我们需要先安装rust

下载rust www.rust-lang.org/learn/get-s…


根据自己的操作系统选择下载方式即可


image.png


安装完成之后会有 cargo 和 rustc 两个命令


image.png


cargo 就是 rust 的包管理工具 类似于npm


cargo build 可以构建项目


cargo run 可以运行项目


cargo test 可以测试项目


cargo doc 可以为项目构建文档


cargo publish 可以将库发布到 crates.io。


构建tauri应用


pnpm create tauri-app |  


选择对应的模板即可


image.png


构建完成之后 执行


pnpm tauri dev


image.png


App.vue


<template>
    <div>
        <video controls ref="video" src=""></video>
       <button @click="openVideo">开启摄像头</button>
    </div>
</template>
<script lang="ts" setup>
import { ref, reactive } from 'vue'
const video = ref<HTMLVideoElement>()
const openVideo = () => {
    //调用摄像头以及音频
    navigator.mediaDevices.getUserMedia({video:true,audio:true}).then(s=>{
        video.value!.srcObject = s
    })
}
</script>
<style lang="less" scoped>
</style>


tips:如果读不到 mediaDevices 需要增加plist 文件


info.plist 跟 tauri.conf.json 平级即可


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>NSCameraUsageDescription</key>
    <string>请允许本程序访问您的摄像头</string>
  </dict>
</plist>


image.png


加人脸识别API

模型下载地址github.com/justadudewh…

face-api 下载地址


npm i face-api.js 
<template>
    <div>
        <video autoplay controls ref="video" src=""></video>
        <canvas width="400" height="400" ref="canvas"></canvas>
        <button @click="openVideo">开启摄像头</button>
    </div>
</template>
<script lang="ts" setup>
import { ref, onMounted } from 'vue'
import * as faceapi from 'face-api.js';
const video = ref<HTMLVideoElement>()
const canvas = ref<HTMLCanvasElement>()
const models = './models';
(async () => {
    await Promise.all([
        faceapi.loadAgeGenderModel(models), //加载训练模型
        faceapi.loadFaceDetectionModel(models),//加载训练模型
        faceapi.loadFaceExpressionModel(models),//加载训练模型
        faceapi.loadTinyFaceDetectorModel(models),//加载训练模型
        faceapi.loadFaceRecognitionModel(models)//加载训练模型
    ])
})()
const openVideo = () => {
    navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(async s => {
        video.value!.srcObject = s
    })
    const context = canvas.value?.getContext('2d')
    setInterval(async ()=>{
        context?.drawImage(video.value as any, 0, 0, 400, 400);
        //获取分析人脸的数据
        const detections = await faceapi.detectAllFaces(video.value as any, new faceapi.TinyFaceDetectorOptions())
        const resizedDetections = faceapi.resizeResults(detections, {width:400,height:400});
        //将人脸边框绘制到canvas上
        faceapi.draw.drawDetections(canvas.value as any, resizedDetections)
    },100)
}
</script>
<style lang="less" scoped>
</style>


image.png

目录
相关文章
|
Web App开发 JavaScript 前端开发
使用 HTML5, javascript, webrtc, websockets, Jetty 和 OpenCV 实现基于 Web 的人脸识别
这是一篇国外的文章,介绍如何通过 WebRTC、OpenCV 和 WebSocket 技术实现在 Web 浏览器上的人脸识别,架构在 Jetty 之上。 实现的效果包括: 还能识别眼睛 人脸识别的核心代码: 页面: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15...
1812 0
|
5月前
|
弹性计算 Java PHP
新手用户注册阿里云账号、实名认证、购买云服务器图文教程参考
对于初次购买阿里云产品的用户来说,第一步要做的是注册账号并完成实名认证,然后才是购买阿里云服务器或者其他云产品,本文为大家以图文形式展示一下新手用户从注册阿里云账号、实名认证到购买云服务器完整详细教程,以供参考。
新手用户注册阿里云账号、实名认证、购买云服务器图文教程参考
|
4月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之uniapp框架如何使用阿里云金融级人脸识别
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
机器学习/深度学习 搜索推荐 计算机视觉
【阿里云OpenVI-人脸感知理解系列之人脸识别】基于Transformer的人脸识别新框架TransFace ICCV-2023论文深入解读
本文介绍 阿里云开放视觉智能团队 被计算机视觉顶级国际会议ICCV 2023接收的论文 &quot;TransFace: Calibrating Transformer Training for Face Recognition from a Data-Centric Perspective&quot;。TransFace旨在探索ViT在人脸识别任务上表现不佳的原因,并从data-centric的角度去提升ViT在人脸识别任务上的性能。
2057 341
|
5月前
对于阿里云OpenAPI的域名实名认证
【1月更文挑战第5天】【1月更文挑战第22篇】对于阿里云OpenAPI的域名实名认证
72 1
|
安全 数据安全/隐私保护
阿里云账号注册、实名认证、账号信息管理、密码找回及账号注销流程及常见问题
本文为大家详细介绍我们在注册阿里云账号,完成账号实名认证,管理账号信息,账号密码找回以及注销账号的详细流程及常见问题。
阿里云账号注册、实名认证、账号信息管理、密码找回及账号注销流程及常见问题
|
人工智能 计算机视觉
阿里云产品体系分为6大分类——人工智能——分为10种模块——人脸识别
阿里云产品体系分为6大分类——人工智能——分为10种模块——人脸识别自制脑图
115 1
|
弹性计算 Java PHP
新手用户注册阿里云账号、实名认证、购买云服务器详细教程(图文教程)
在我们购买阿里云服务器等云产品之前,首先要做的就是注册账号并完成实名认证,之后才能购买阿里云服务器等各种云产品,购买之前如果碰到有最新优惠券或代金券可以领取,在购买过程中还可以使用优惠券或者代金券抵扣订单金额,减少购买成本。下面为大家以图文形式展示一下新手用户注册阿里云账号、实名认证、购买云服务器详细教程。
2510 0
新手用户注册阿里云账号、实名认证、购买云服务器详细教程(图文教程)
|
存储 前端开发 Serverless
阿里云视觉智能平台提供了人脸识别和图像搜索的API接口
阿里云视觉智能平台提供了人脸识别和图像搜索的API接口
1601 0
下一篇
无影云桌面