基于webrtc的音视频通话,实现相机流识别人脸的功能

这篇具有很好参考价值的文章主要介绍了基于webrtc的音视频通话,实现相机流识别人脸的功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这几天研究了一下webRTC的基础能力,在此基础之上能实现的视频通话,互动等更多实用功能。项目中使用的是阿里的rtc,我研究的是声网的是否符合功能,后续会总结和记录一下应用到的几个功能实现方法。

今天要记录的功能是项目流识别人脸的功能,其实类似功能很常见了,人脸登录,身份证识别等,大都使用的是阿里api,百度api或者其他软件,我在研究这个功能期间,也查看了第三方的sdk的接入,大致流程是注册->创建功能项目->得到key,secret->接入sdk->合理调用->返回识别的结果。需要注意的是价格是否符合你的预算,而sdk的接入,最好还是后端来实现,避免前端的安全性问题。

除此之外还有什么方法呢,前端能实现吗?答案当然可以,使用face-api.js。

face-api.js:JavaScript人脸识别API的浏览器和nodejs实现在tensorflow.js核心之上的。tensorflow.js我们或许不陌生。TensorFlow是一个由Google开源的适用于人工智能(Artificial Intelligence, AI)和机器学习(Machine Learning, ML)的数据流图计算神器。这些框架的开发和使用让我们可以使用训练好的模型来实现我们的功能,也可以自己进行训练,这里不多讲。

face-api.js github代码链接。readme,api文档,demo都很完善,而且使用十分方便,我们不需要知道底层是如何实现的,我们只要会使用就可以了。实例代码如下:

const results = await faceapi
  .detectAllFaces(queryImage2)
  .withFaceLandmarks()
  .withFaceDescriptors()

results.forEach(fd => {
  const bestMatch = faceMatcher.findBestMatch(fd.descriptor)
  console.log(bestMatch.toString())
})

就是这么简单,具体的算法和训练模型都不需要知道,根据功能选择方法调用,注意参数格式,返回结果,链式调用也十分方便。

我们了解了以上,就可以在音视频中进行使用了。以下是我开发demo的过程,不涉及到具体业务代码。

首先html部分,img是一张人脸的图片,video是后续开启摄像头,识别相机流所需要的,canvas则是结果可视化的输出,能讲人脸部分标出。

<div>
      <img ref="image" src="./assets/bbt1.jpg" style="width: 640px;height:480px;">
      <video ref="video" autoplay></video>
      <canvas ref="canvas" width='640px' height='480px'></canvas>
      <button @click="detectPic">检测图片</button>
      <button @click="startVideo">开启摄像头</button>
</div>

先实现图片的人脸检测,因为视频可以认为是每一帧图片进行人脸检测,频率自己可以控制,所以实现图片的人脸检测,接入视频流就可以了。

1,引入faceapi,可以使用cdn,也可以在项目中安装 npm i face-api.js 来加载。

<script src="https://cdn.jsdelivr.net/npm/@vladmandic/face-api/dist/face-api.js"></script>
  <!-- <script src="https://unpkg.dev/@vladmandic/face-api/dist/face-api.js"></script> -->
import * as faceapi from 'face-api.js'

2,在使用faceapi的模型之前,要加载模型,以 tinyFaceDetector 为例

Promise.all([
        faceapi.nets.tinyFaceDetector.loadFromUri('./assets'),
        // faceapi.nets.faceLandmark68Net.loadFromUri('/models'),
        // faceapi.nets.faceRecognitionNet.loadFromUri('/models')
 ])

或者

Promise.all([
    faceapi.nets.tinyFaceDetector.loadFromUri('https://raw.githubusercontent.com/
    justadudewhohacks/face-api.js/master/weights')     
]).then(this.startVideo);

这里有一点要注意!!!我在项目中使用时,模型一直引入不成功,模型下载到本地,用相对路径是无法生效的,使用网络资源 https://raw.githubusercontent.com/justadudewhohacks/face-api.js/master/weights 是可以的,这里也包括了所有功能所需的模型,可是github资源国内实在是访问的慢,所以尝试访问本地,发现了,不能使用相对路径,必须是域名下可公开访问的绝对路径,比如public下,/models 下。

3,实现图片的人脸识别

async detectPic() {
        const canvas = this.$refs.canvas;
        const image = this.$refs.image;
        const context = canvas.getContext('2d')
        const displaySize = { width: 640, height: 480 };
        context.drawImage(image, 0, 0, 640, 480);
        // debugger
        //获取分析人脸的数据
        const detections = await faceapi.detectAllFaces(image, new faceapi.TinyFaceDetectorOptions())
        const resizedDetections = faceapi.resizeResults(detections, displaySize);
        //将人脸边框绘制到canvas上
        faceapi.draw.drawDetections(canvas, resizedDetections)
      }

传入image和识别的算法,需要标点或者识别性别等功能,就链式调用其他算法,返回识别的结果和坐标等信息,faceapi.draw可以绘制识别的结果在canvas上,一眼得到结果。

4,传入视频流实现人脸识别

async startVideo() {
        const video = this.$refs.video;
        const canvas = this.$refs.canvas;
        const context = canvas.getContext('2d')
        navigator.mediaDevices.getUserMedia({ video: true}).then(async s => {
            video.srcObject = s
            this.stream = s
        })
        const displaySize = { width: 640, height: 480 };
        faceapi.matchDimensions(canvas, displaySize); // 维度
        this.timer = setInterval(async () => {
          //获取分析人脸的数据
          const detections = await faceapi.detectAllFaces(video, new faceapi.TinyFaceDetectorOptions({scoreThreshold:0.1}));
          const resizedDetections = faceapi.resizeResults(detections, displaySize);
          context.clearRect(0, 0, 640, 480);
          context.drawImage(video, 0, 0, 640, 480);
          debugger
          //将人脸边框绘制到canvas上
          faceapi.draw.drawDetections(canvas, resizedDetections);
        }, 20000);
      }

navigator.mediaDevices.getUserMedia({ video: true}) 会返回摄像头的视频流,也可以 {audio:true,video:true}来得到音视频流,这里音频无用,所以没加。传入video,可以得到当前帧的人脸检测结果,但是实现视频人脸识别追踪,是需要使用setInterval或者递归调用来实现,setInterval可以自己控制调用的频率。文章来源地址https://www.toymoban.com/news/detail-860825.html

到了这里,关于基于webrtc的音视频通话,实现相机流识别人脸的功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WebRTC音视频通话-实现GPUImage视频美颜滤镜效果iOS

    WebRTC音视频通话-实现GPUImage视频美颜滤镜效果 在WebRTC音视频通话的GPUImage美颜效果图如下 可以看下 之前搭建ossrs服务,可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话,可以查看:https://blog.csdn.net/gloryFlow/article/details/132262724 之前WebR

    2024年02月12日
    浏览(39)
  • WebRTC音视频通话(二)简单音视频通话

    本篇不详细介绍websocket,只针对websocket整合rtc。 webrtc是P2P通信,也就是实际交流的 只有两个人 ,而要建立通信,这两个人需要 交换一些信息来保证通信安全 。而且, webrtc必须通过ssh加密 ,也就是使用https协议、wss协议。 借用一幅图 1.1 创建端点的解析 以下解析不包括we

    2023年04月09日
    浏览(46)
  • WebRTC音视频通话-WebRTC本地视频通话使用ossrs服务搭建

    iOS开发-ossrs服务WebRTC本地视频通话服务搭建 之前开发中使用到了ossrs,这里记录一下ossrs支持的WebRTC本地服务搭建。 ossrs是什么呢? SRS(Simple Realtime Server)是一个简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT等多种实时流媒体协议。 官网地址:https://ossrs.net/lt

    2024年02月12日
    浏览(29)
  • WebRTC音视频通话-RTC直播本地视频及相册视频文件

    WebRTC音视频通话-RTC直播本地视频及相册视频文件 WebRTC音视频通话-RTC直播本地视频文件效果图如下 WebRTC音视频通话-RTC直播本地视频文件时候,用到了AVPlayer、CADisplayLink。 AVPlayer是什么? AVPlayer是基于AVFoundation框架的一个类,很接近底层,灵活性强,可以自定义视频播放样式

    2024年02月13日
    浏览(30)
  • WebRTC音视频通话-WebRTC推拉流过程中日志log输出

    WebRTC音视频通话-WebRTC推拉流过程中日志log输出 之前实现iOS端调用ossrs服务实现推拉流流程。 推流:https://blog.csdn.net/gloryFlow/article/details/132262724 拉流:https://blog.csdn.net/gloryFlow/article/details/132417602 在推拉流过程中的WebRTC的相关日志log输出可以看到一些相关描述信息。在WebRTC日志

    2024年02月10日
    浏览(37)
  • WebRTC音视频通话-iOS端调用ossrs直播拉流

    WebRTC音视频通话-iOS端调用ossrs直播拉流 之前实现iOS端调用ossrs服务,文中提到了推流。没有写拉流流程,所以会用到文中的WebRTCClient。请详细查看:https://blog.csdn.net/gloryFlow/article/details/132262724 最近有朋友问过,我发现之前少了一块拉流流程,这里补充一下。 2.1、拉流实现时

    2024年02月11日
    浏览(39)
  • WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制

    WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制参数 之前搭建ossrs服务,可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话,可以查看:https://blog.csdn.net/gloryFlow/article/details/132262724 之前WebRTC音视频通话高分辨率不显示画面问题,可以查

    2024年02月13日
    浏览(30)
  • Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP

    一对一音视频通话使用场景 一对一音视频通话都需要稳定、清晰和流畅,以确保良好的用户体验,常用的使用场景如下: 社交应用 :社交应用是一种常见的使用场景,用户可以通过音视频通话进行面对面的交流; 在线教育: 老师和学生可以通过音视频通话功能进行实时互

    2024年02月13日
    浏览(30)
  • springboot+websocket+webrtc 仿微信、仿QQ 音视频通话聊天 飞鱼chat IM即时通讯

    仿微信、QQ音视频聊天,文字表情、收发文件图片等功能。本项目使用springboot+websocket+webrtc-bootstrap5+H5+JQuery3.3+mysql实现,可自适应PC端和移动端 git地址在最后 pc端效果图 WebSocket是一种在单个TCP连接上进行全双工通信的协议,这使得客户端和服务器之间的数据交换变得更加简单

    2024年02月04日
    浏览(38)
  • 《保姆级教程》基于Agora SDK实现音视频通话及屏幕共享

    😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想当开发的测试,不是一个好测试✌️。 如果感觉博主的文章还不错的话,还请点赞、收藏哦

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包