近两年,Python在众多编程语言中的热度一直稳居前五,热门程度可见一斑。Python 拥有很活跃的社区和丰富的第三方库,Web 框架、爬虫框架、数据分析框架、机器学习框架等。良好的开源社区生态,让它在各个领域(例如计算机视觉、图形学、自然语言处理等)都有简单易用的包以供快速集成。例如用 Python 进行 Web 编程、网络编程、开发多媒体应用、进行数据分析或实现图像识别等。其中人脸识别是最热门的应用场景之一,也是与实时音视频契合度非常高的应用场景之一。
丰富的第三方库
声网Agora 现已支持 Python 语言,大家可以通过点击「阅读原文」获取 Agora Python SDK。同时,为了方便大家可以快速上手体验我们的 SDK, 在GitHub上我们还写了一份 QuiskStart demo,详情大家可前往
➡️ https://github.com/AgoraIO-Community/Agora-Python-QuickStart 进行查看。
本文今天要跟大家介绍的也是在我们 QuickStart 上的一个demo示例 —— 如何基于Agora Python SDK 在一对一视频通话的基础上增加实时人脸识别、表情、年龄和性别预测的功能。
人脸识别模块设计
快速实现一个一对一视频通话中的人脸识别功能主要分为 3 个部分:一对一通话的搭建、PyQt图形化界面的呈现、人脸识别模块的设计。
(关于一对一通话和PyQt图形化界面的实现,大家可以前往
➡️https://github.com/AgoraIO-Community/Agora-Python-QuickStart/tree/master/basic_one_to_one_video 进行查询。我们在里面已经放了很详细的操作步骤,就不再多做说明了。)
在这个一对一通话中人脸识别模块功能的demo中,将会调用到face_recognition
的库。face_recognition
是基于dlib,用深度学习训练数据的一个库,它的模型准确率可高达99.38%。这个库一经开源发布就得到了广泛的热捧,使用简单、功能强大成为其非常显著的标签。face_recognition
项目开源地址在这里:
https://github.com/ageitgey/face_recognition
首先,理解人脸识别模块的设计我们需要理解视频其实就是由一帧一帧的图像组合而成,所以从这个层面来说,视频中的人脸识别其实就是从每一帧图像中做目标识别,从这个层面上讲,二者没有本质区别。在理解这个前提的基础上,关于人脸识别模块设计的第一步,其实就是要进行人脸数据库的读取(比如现有名人人脸数据库或者你希望可以识别出的人脸的图像数据库)。这样,当face_recognition
完成视频中的人脸定位后,才可以与数据库中的人脸图像进行匹配识别。
我们前面有提到,除了要进行人脸的识别外,还希望可以对表情、年纪、性别进行识别及预判。因此,这里还需要用到两个预测模型:
emotion_detector_model
age_gender_detection_model
(下载地址:https://github.com/AgoraIO-Community/Agora-Python-QuickStart/blob/master/face_recognition/Readme.zh.md)
模型被读取后,就会对每一帧定位图像数据进行处理分析,通过模型中的数据进行预判。最终会返回到人脸位置和预测结果。
人脸识别模块与Agora Python SDK 的交互示例
人脸识别模块在跟我们的 SDK 交互时是如何取得每一帧的数据的呢?
其实,这里是可以通过一个 VideoFrameObserver 类中的回调函数调取视频每帧的数据的。使用这个回调既可以获取本地端采集的视频流,也可以获取远端的视频流。但在我们这个示例中,仅用了远端的视频流。完成数据调取后,就可以将数据传入前面写好的人脸识别模块中,根据采集结果进行人脸框图的绘制。
接下来,让我们来看看是怎样具体实现的:
1. 下载预训练好的模型
从以下仓库下载预训练好的模型:
emotion_detector_model
age_gender_detection_model
将模型复制到model文件夹中。
face_recognition
├── model
│ ├── model_v6_23.hdf5
│ ├── weights.28-3.73.hdf5
2. (可选)将一些现有的人脸照片根据以下数据结构添加
被添加的人脸照片将被读取和识别。例如若您将您自己的照片添加在其中,在运行示例时,人脸将被识别并与你的名字对应。
根据以下文件夹结构,在database文件夹中为每一个人创建一个以其名字命名的文件夹,并将照片放入对应文件夹中。例如:
face_recognition
├── database
│ ├── Jackie
│ │ ├── Jackie1.jpg
│ ├── Ye
│ │ ├── Ye1.jpg
│ │ ├── Ye2.jpg
3. 运行示例
前往face_recognition
目录,运行命令python3 face_recog.py
。
关于Agora Python SDK 或者以上给出的示例如果想了解更多,可以扫描下方二维码查看《 Python实时音视频技术实践与分享》的线上课程。关于Python与C如何交互?我们如何封装Python SDK?还有讲师手把手教教你如何实现我们今天内容中所说的人脸识别功能哦~
关于声网 Agora 多语言及第三方框架 SDK
声网始终关注开发者对 SDK 易用性的反馈,其中一方面就是多语言与第三方框架的支持。我们目前已支持多种开发语言、第三方框架,以及三大主流游戏开发引擎,包括 Flutter、React Native、Electron、Unity、Cocos、Unreal、UWP、uni-app等,均可在 Github(AgoraIO-Community及Agora.io)中下载体验。
其中一些社区版的 SDK 也是由我们社区中的开发者完成的。例如,React Native SDK 最初是由我们的社区开发者,同时也是 React Native 社区中的活跃开发者“少言”(Github:syanbo)开发的。UWP SDK 也是由社区的开发者陈实开发的。他此前还开发并一直维护 AgoraWinRT 项目。
未来我们还将发布更多支持不同语言及第三方框架、开发平台的 Agora RTC/RTM SDK。