如何基于webRTC实现人脸识别功能

 更新时间:2022年12月14日 11:03:10   作者:小满zs  
WebRTC技术包含了音视频编解码技术、传输技术、流媒体服务器技术等,涵盖了音视频处理和传输的方方面面,下面这篇文章主要给大家介绍了关于如何基于webRTC实现人脸识别的相关资料,需要的朋友可以参考下

前言

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

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

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

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

详细对比

安装rust

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

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

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

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

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

cargo build 可以构建项目

cargo run 可以运行项目

cargo test 可以测试项目

cargo doc 可以为项目构建文档

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

构建tauri应用

pnpm create tauri-app |  

选择对应的模板即可

构建完成之后 执行

pnpm tauri dev

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>

添加人脸识别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>

总结

到此这篇关于如何基于webRTC实现人脸识别的文章就介绍到这了,更多相关webRTC人脸识别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript实现的商品抢购倒计时功能示例

    JavaScript实现的商品抢购倒计时功能示例

    这篇文章主要介绍了JavaScript实现的商品抢购倒计时功能,可实现分秒级别的实时显示倒计时效果,涉及js日期时间计算与页面元素动态操作相关技巧,需要的朋友可以参考下
    2017-04-04
  • javascript bom是什么及bom和dom的区别

    javascript bom是什么及bom和dom的区别

    BOM是浏览器对象模型,DOM是文档对象模型,前者是对浏览器本身进行操作,而后者是对浏览器(可看成容器)内的内容进行操作。这篇文章给大家介绍javascript bom是什么及bom和dom的区别,感兴趣的朋友一起学习吧
    2015-11-11
  • JS实现往下不断流动网页背景的方法

    JS实现往下不断流动网页背景的方法

    这篇文章主要介绍了JS实现往下不断流动网页背景的方法,实例分析了递归调用自定义函数scrollBG实现动态背景特效的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 小程序:授权、登录、session_key、unionId的详解

    小程序:授权、登录、session_key、unionId的详解

    这篇文章主要介绍了小程序:授权、登录、session_key、unionId的详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • JavaScript 调试器简介

    JavaScript 调试器简介

    JavaScript 调试器其实有很多。当然这些仅仅是调试器而已,与流行的 Java IDE 是没有办法相提并论的。
    2009-02-02
  • Javascript 自定义类型方法小结

    Javascript 自定义类型方法小结

    Javascript 常用自定义类型方法整理,需要的朋友可以参考下。
    2010-03-03
  • js获得网页背景色和字体色的方法

    js获得网页背景色和字体色的方法

    这篇文章主要介绍了js获得网页背景色和字体色的方法,需要的朋友可以参考下
    2014-03-03
  • 微信小程序模板消息推送的两种实现方式

    微信小程序模板消息推送的两种实现方式

    这篇文章主要介绍了微信小程序模板消息推送的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 微信小程序实现授权登录

    微信小程序实现授权登录

    这篇文章主要为大家详细介绍了微信小程序实现授权登录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • JS实现的模仿QQ头像资料卡显示与隐藏效果

    JS实现的模仿QQ头像资料卡显示与隐藏效果

    这篇文章主要介绍了JS实现的模仿QQ头像资料卡显示与隐藏效果,涉及javascript鼠标事件响应及页面元素属性动态操作相关技巧,需要的朋友可以参考下
    2017-04-04

最新评论