小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

您所在的位置:网站首页 树莓派4b超频 小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

2023-01-06 17:55| 来源: 网络整理| 查看: 265

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

前情提要;最近出了一个新的人脸检测框架scrfd,scrfd的论文在5月10日挂在了阿凯上,感兴趣的同学们可以去看一看

https://arxiv.org/abs/2105.04714

新出的scrfd旨在实现模型效能的极致均衡:( Extensive experiments conducted on WIDER FACE demonstrate the state-of-the-art efficiency-accuracy trade-off for the proposed \scrfd family across a wide range of compute regimes,论文如是说)

对比实验似乎也在说明这一点,最小的scrfd-0.5GF检测速度要比之前提出Retinaface-mb0.25快两倍,检测性能也实现全方位的突破:

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统但具体效果如何,还是需要down下源码run一遍,才能得以验证。 ; 1、inter卡跑库测试效果

实际效果如何,还是需要通过git clone下来测试才行,拉取官方代码;

git clone https://github.com/deepinsight/insightface.git

将scrfd的源码单独提出来,其他删除即可,不影响跑库

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统确保文件齐全,安装环境所需库(具体写在requirements文件夹中),在Inter Core i5-4210M处理器上进行测试,测试结果如下:小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统以下几点补充:

测试的单帧Infer Time=推理一分钟/该分钟内处理的帧数

实际生产中其实并不需要这么高的input_size(主测2-3m内的检测性能) 本次测试使用的是转化后的onnx模型(实在是不想调用其他杂七杂八的库) 以上测试均为CPU下进行,想测GPU的请自行安装onnxruntime-gpu 不同input_size的耗时如下(以500m模型为例): 小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统 使用500m模型在input_size=320*320的条件下推理高密集人脸图片: 小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统 2、动态尺寸onnx模型提取 *安装mmcv-full

具体安装方法可参考mm的官网:https://link.zhihu.com/?target=https%3A//github.com/open-mmlab/mmcv

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.6.0/index.html

补充踩过的几个坑

博主的cuda=10.2,pytorch=1.6.0,根据官网给的命令行装,一般不会出错 实测window下编译的mmcv-full会缺少库,且1.3.4以上版本window安装不了 一定要安装最新的mmcv-full,不然会缺少一些函数接口,博主的版本是1.3.5 不要贪方便安装mmcv的精简版本,缺少库

安装和编译mmdet

pip install -r requirements/build.txt pip install -v -e .# or “python setup.py develop”

完成后查看下list有没有这三个库:

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统如果有,就可以开始提取onnx模型,官方给出的baseline如下:github.com/deepinsight/insightface小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统看你所需的模型,点击download即可下载,使用以下命令导出onnx模型: python tools/scrfd2onnx.py configs/scrfd/scrfd_500m.py weights/scrfd_500m.pth --shape -1 -1 --input-img face.jpg

其中

configs里面存放模型参数信息,请与model配对好 进行动态尺寸的提取时请将shape指定为-1 检验图片随意,建议包含多张人脸的图片 提取后的onnx可以用onnxsim刷一遍 包含关键点的bnkps模型不支持动态尺寸输入,使用固定尺寸进行提取 小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统 3、flask web实现推流

在公网上推流有两种方式:

[En]

There are two ways to push streams on public networks:

①使用云服务器作为中间服务器

[En]

① uses the CVM as the intermediary server

②购买了用于内联网穿孔的域名。

[En]

② buys the domain name used for intranet puncture.

两种方式都尝试过

第一种使用的是那种9.9块包月的学生云资源,带宽和处理算力远达不到模型所需的吞吐率要求,这样造成了严重延迟,体验感贼差(还是软妹币的问题。。。。)

第二种方法是通过软件穿透内网,互联网上有很多具体的资料(可以参考[2],详细描述)。这样做的好处是,你可以去嫖娼,省时省力。

[En]

The second method is to puncture the intranet through software, and there are a lot of specific materials on the Internet (you can refer to [2], which is described in detail). The advantage is that you can go whoring and save time and effort.

无论是哪种,思想无非就是借用公网IP来进行不同局域网下的互通

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统进行内网穿刺后,就可以使用flask将检测后的帧推到公网上,代码如下: from flask import Flask, render_template, Response import argparse from tools.scrfd import * import datetime import cv2 class VideoCamera(object): def __init__(self): # 通过opencv获取实时视频流 self.video = cv2.VideoCapture(0) def __del__(self): self.video.release() def get_frame(self): success, image = self.video.read() # 因为opencv读取的图片并非jpeg格式,因此要用motion JPEG模式需要先将图片转码成jpg格式图片 # ret, jpeg = cv2.imencode('.jpg', image) # return jpeg.tobytes() return image app = Flask(__name__) @app.route('/') # 主页 def index(): # 具体格式保存在index.html文件中 return render_template('index.html') def scrfd(camera): detector = SCRFD(model_file='onnx/scrfd_500m_bnkps_shape160x160.onnx') while True: frame = camera.get_frame() # cv2.imshow('fourcc', frame) # img = cv2.imread(frame) for _ in range(1): ta = datetime.datetime.now() bboxes, kpss = detector.detect(frame, 0.5, input_size = (160, 160)) tb = datetime.datetime.now() print('all cost:', (tb - ta).total_seconds() * 1000) for i in range(bboxes.shape[0]): bbox = bboxes[i] x1, y1, x2, y2, score = bbox.astype(np.int) cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2) if kpss is not None: kps = kpss[i] for kp in kps: kp = kp.astype(np.int) cv2.circle(frame, tuple(kp), 1, (0, 0, 255), 2) ret, jpeg = cv2.imencode('.jpg', frame) frame = jpeg.tobytes() yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n') @app.route('/video_feed') # 这个地址返回视频流响应 def video_feed(): if model == 'scrfd': return Response(scrfd(VideoCamera()), mimetype='multipart/x-mixed-replace; boundary=frame') if __name__ == '__main__': parser = argparse.ArgumentParser(description='Object Detection using YOLO-Fastest in OPENCV') parser.add_argument('--model', type=str, default='scrfd') args = parser.parse_args() model = args.model app.run(host='0.0.0.0', debug=True, port=1938)

运行命令:

python flask_api.py

将检测结果推送到网页上,此时根据网段号w400985k15.wicp.vip:54551 登录网页进行查看(w400985k15.wicp.vip为赠送的域名,54551为分配的端口,原host指定为本机ip,映射后自动跳转到公网域名,port也会跟着改变),此时的树莓派和电脑属于不同的局域网下:

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统不仅如此,无论你距离有多远,你还可以用手机查看。 [En]

Not only that, you can also check it with your mobile phone, no matter how far away you are.

实测使用flask会比本地推理延迟大约0.5s左右,后期可以采用fastapi或者node.js进行尝试 建议使用树莓派4B进行体验,3B板子较老,有些性能跟不上 建议超频,参考How to Overclock Raspberry Pi 4 to 2.0 GHz – CNX Softwarey-pi-4/

代码与所有onnx模型放在此连接上

pengtougu/onnx-scrfd-flask​最后,放一首我喜欢听的歌。

[En]

Finally, put on a song I like to listen to.

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统参考:

【1】nihui:详细记录insightface的SCRFD人脸检测ncnn实现

【2】树莓派远程监控 – web异地监控

欢迎加入深度学习交流群:696654483这里有很多来自不同行业的研究生和大佬。

[En]

There are a lot of graduate students and bigwigs from various industries.

Original: https://blog.csdn.net/weixin_45829462/article/details/117629658Author: pogg_Title: 小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

相关阅读 Title: 非常全面的数字人解决方案(含源码) github

TheRamU/Fay: 语音互动,直播自动带货 虚拟数字人 (github.com)

gitee

fay: 这是一个数字人项目,包含python内核及ue数字人模型,可以用于做数字助理及自动直播,又或者作为你的应用入口也很帅 (gitee.com)

2022.10.27

补充mac上的安装办法:(34条消息) Fay数字人开源项目在mac 上的安装办法_郭泽斌之心的博客-CSDN博客

一、实际 应用案例

抖音虚拟主播

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

人机 交 互

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

数字站桶人

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统 二、数字人是什么

首先我先给数字人重新做一个定义:”把人数字化,以行人的职责”。怎么理解呢?我举两个例子就清楚了。第一个是现在直播带货,主播成本越来越高,我们的数字人能否代替主播24小时自动带货呢?这里数字化的是主播的形象、声音、性格特质,以及商品的知识。另一个是,一些客服或者售前情景,所做的工作也是重复度非常高,我们能否交给数字人去完成呢?这里就简单多了,只需要把知识库给数字化,就是我们常说的Q&A。

“把人数字化”这个说得有些笼统,具体来说是把人的那些方面可以数字化呢?

三维人物:信息的传输需要载体,把三维人物形象作为载体可以融入语音、文字、动作、情绪等信息传输通道,远比单纯的语音或文字的承载量大得多。 语言:你的数字人会说什么内容,以怎么样的声音说话,用的是粤语还是国语。 形象表情动作:一个数字人单纯的只会与人沟通还不够,还需要能够做出不同的表情动作。不竟,人类沟通70%的内容是通过非语言传达的,数字化的过程中我们又怎会错过条重要的信息通道呢。 情绪:情绪可以附加在语言和表情动作里,让信息传输的带宽更大。 环境模型:数字人向你展示的时候是在大厅,还是在房间,在户外。然后数字人的周围有些什么,这都可以衬托出不同的氛围。

我们再来说说,一个数字人如何行人的职责。比如,在展厅里,不能让解说员24小时站在展品前面等着游客来询问,更不能循环播放着一个段音视频。但数字人可以,只需要一个显示屏即可。若你办的是一个云展厅、元宇宙,就更是如此了。

三、数字人可以解决什么问题

数字时代,数字产品泛滥,互联网平台多不胜数。那个这个数字人就是你在不同的电子产品、不同平台上的分身,代替你行人的职责。除了文章开头说的三个案例外,至少还可以用于:

电子导游; 电子解说员; 虚拟老师; 售前、售后客服; 前台指引。 四、这个数字人怎么实现

我们以直播带货为例,为了方便理解,首先说明的是我们对直播场景做过分析,发现了如下逻辑:

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

接下来我来就可以来具体操作了:

1、建立行为模型

这会直接影响到数字人接受外部刺激(大数多情况下是,用户说的话,在直播场景下也有粉丝关注送爱心等情况)之后的情绪变化,以及响应的方式和程度。你可能会想,为什么需要建行为模型呢?举个例子你就明白了。你可以设计了一个逻辑,粉丝点赞时,主播非常开心地感谢粉丝,粉丝骂主播时,主播表现出愤怒。你在直播时,有一个粉丝点赞了,另一个粉丝同时在骂主播,你的数字人该作出怎么样的反应呢?这个只是简单的例子,实际情况复杂得多。也有人,说这是算法和AI的区别。这有一定的道理,但说法不严紧,这个话题就不在此展开了。我们在直播场景下,试过以下这两种方式建立性格模型:

学习真实主播的性格

我们只需要把目标主播的直播给录制下来,提取样本数据,然后训练一个从粉丝的不同刺激的组合,到主播的不同响应方式的多元逻辑回归的数学模型参数即可。

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统 人为调节各刺激的影响程度

把现有主播的性格模型数字化,这种方式缺憾也十分明显,就是你无法快速调节其性格特质。想要人为调节,你也可以参考以下方试:

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

我们做了一个”数字人控制器”的客户端,可以手动调节行为模型的参数。想体验参考的话,也可以私下跟我联系(qq467665317),我把代码发你。

2、人物模型、场景载入引擎

人物模型的选择大体上可以是二次元和超写实。场景的选择就很多,可以是户内户外,坐着站着。再配合其它物体就可以把整个氛围衬托出来,比如:沙发可以表现出舒适放松;显示屏可以不违和的插入广告信息。

我们对比了多个引擎技术之后,最终选择UE4作为模型的驱动引擎。主要有以下几点原因:首先UE4不像live2d那样,出来的是假三维的纸片人;其次,UE4里对现实世界的光照、材质、重量等物理属性都存在一一映射,可以非常全面地还原一个真实场景。这里提醒一下,在三维的世界里,有两条工具线:一个是引擎,用于驱动三维模型按照你的逻辑运作;一个是建模工具,比如maya。但通常这两类工具都会互相融合、相互交叉。

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

二次元的模型建立可以使用daz studio(偶然机会获得了120G资源,有需要加我qq467665317),非常简单。可以非常方便选选择人的各个组成部分,比如:身驱、头发、脸型、眼睛等,然后组合成一个你想要的形象。

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

至于超写实的模型就可以使用metahuman了。metahuman说白了其实就是一个云端版本的ue,优点是集成了大量真人扫描的高精度组件,可以非常方便地调节出一个欧美真人。对,你无看错,是欧美的。官方的解释是,由于疫情原因,还未对亚洲人进行扫描。在虚拟主播这个案例上实际我们就是用metahuman的。

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统

在直播带货案例里,我们把模型导入到ue4,我们给模型在ue4里预设了四个动作(站着、站着说话、坐着、坐着说话),三个表情(平静、开发、愤怒),三个镜头(全局、近矩说话、看显示器播放商品展示)。

当数字人的心情激动(开心和愤怒)是站着的,其余时候是坐着的,表情也做对应的变化。说话的时候就会做更多的肢体动作了,唇是根据说话的发音驱动同步化的。当主播在介绍商品时切换到显示器镜头,可以形象的看到商品效果(针对每个商品建模的成本太高)。当主播在与粉丝互动时切换到近矩镜头,方便观看主播的表情动作。其实这两个镜头主播都在说话,当主播说话结束后就切换回全局镜头,让观众感受整个环境。

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统 3、行为模型驱动UE引擎里的三维模型

UE4大多情况下应该是用于游戏开发和影视制作的,要想使用上文第1点说的行为模型逻辑去控制UE里的三维模型,网上可以参考的资源非常少。咨询过常年从事三维模型制作的专家,给出可以参考的答案是把逻辑输出模拟成键盘操作,UE再依据键盘输入来驱动三维模型作出变化。(键盘操作?这是把数字人做成游戏吧?)当然,这种方式我们肯定接受不了,因为这样无办法做复杂的数据传输。几经折腾之后,我们在UE商城里找到一个websocket蓝图插件,与行为模型实现websocket通讯。

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统 4、接通刺激输入

其实在直播带货这个案例里,我们使用的是抖音,刺激是非常有限的,粉丝在你的直播间里能做的事情就是这么点,进来、关注、点赞、刷礼物、购买商品,或者打段文字。在这里,我们需要获取直播间上的这些信息。我们测试过网络上主流的方法”抓包然后解码”,这种方法太麻烦,而且离开抖音这个平台之后,就很难再使用这个办法。所以我们最后使用的方案是,用selenium驱动chrome浏览器内核加载直播间https链接,获取浏览器上的内容。我们再把这个内容推送给上面所说的”行为模型”。这样方法将会极大地方便以后做平台的迁移。

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统 5、接入输出通道

在这个案例里,我们是要把行为模型驱动UE里三维模型的变化和数字人主播说的音频,通过视频流的形式输出到抖音直播平台。这个我们使用抖音直播伴侣,可以直接上线直播,同时又可以使用抖音上很多玩法。这里特别强调一下,我们测试过讯飞、阿里云、百度、亚马讯和微软的语音合成,只有微软是直接提供带情绪的合成。

小白教程:树莓派3B+onnxruntime+scrfd+flask实现公网人脸检测系统 五、挑战

1、怎么样把人行为、认知、情绪数字化?

如果你要设计一个模型,把人的东西都数字化下来,以目前的水平还没有人能够做到。但你锁定在某一特定的情景,只要稍加分析,你就会发现,这其实并不难。

2、UE4的功能非常强大、非常多,你遇到的任何一个问题都不少于三个解决办法,如果你没有这块的工作经验,你就得一个个去试。其间我就翻阅了7本书,无数B站上的视频教程。其间解决了诸如:websocket通讯、表情动作、唇形同步、光线控制、头身分离、蓝图通讯等问题。

3、Metahuman的模型导入本地ue后要做很多适应性的调节。若要使用ue商城里的动作,还需要做骨络重定向等操作。由于metahuman自带蓝图,咱们还需要调整原蓝图的逻辑,以兼容我们的行为模型的要求。那怕是怎么控制表情,对于我们来说还是有挑战的。

4、抖音本身不提供直播的数据接口,故要获取直播间的互动数据,就得花些工夫了。

5、语音合成没有你想像中的成熟。若要做情绪语音集的训练,成本会很高。还好,有微软的云端服务。(经验总结:别太相信国内企业广告上说的)

Original: https://blog.csdn.net/aa84758481/article/details/124758727Author: 郭泽斌之心Title: 非常全面的数字人解决方案(含源码)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/304335/

转载文章受原作者版权保护。转载请注明原作者出处!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3