基于AidLux&AI中台,轻松落地动态人脸识别AI应用

简介: 该项目来自阿加犀公司举办的AidLux动态人脸识别AI实战训练营,由PauIX老师主讲,课程内容涉及人脸识别原理及Retinaface实战、动态人脸识别整体流程实战、AI视觉软件中台人脸识别实战等。

1. 引言

该项目来自阿加犀公司举办的AidLux动态人脸识别AI实战训练营,由PauIX老师主讲,课程内容涉及人脸识别原理及Retinaface实战、动态人脸识别整体流程实战、AI视觉软件中台人脸识别实战等。
欢迎大家加入训练营,课程链接:
https://mp.weixin.qq.com/s/kTezijvdGTqF-eFM1lucoA

开始课程之前,需要准备一台安卓系统的手机,手机中安装AidLux软件,一般手机的应用市场就有,本次课程需要使用为面向开发者的内测版本AidLux 1.4beta,下载链接如下:
下载链接
http://Aidlux123.quickconnect.cn/d/s/spGcMhq9Yqvl2xQMe1lfUAntnhdLiesf/Atf6Qjb5djg4y7QCfyryNyLKNNL5E4iU-kLIAmuLPTAo
百度网盘
https://pan.baidu.com/s/1jzm_Aaw1tuAcqDflitCTvA?pwd=g60t 提取码:g60t
夸克网盘(压缩文件,需解压)
链接:https://pan.quark.cn/s/293a0b5fec0a
然后分享一份此次训练营的物料包,里面是课程使用的代码。
百度云盘链接↓
链接: https://pan.baidu.com/s/15HZmaV8u5HnOulZuVOWCZA?pwd=4vbu
提取码: 4vbu

2. 人脸识别原理及Retinaface实战

2.1 人脸识别的概念

人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机和摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行面部识别的一系列相关技术,通常也加做人像识别,面部识别。
人脸识别的概念.jpg

2.2 人脸识别的关键技术和流程

关键技术:

  1. 人脸定位:检测范围内出现的人脸、定位、过滤。
  2. 人脸关键点检测:提取人脸关键点位置,常用有5/21/68/468点定位。
  3. 人脸追踪:对检测出的人脸进行追踪。
  4. 人脸图像预处理:光线补偿、直方图均衡化、几何矫正。
  5. 人脸特征提取:通过深度学习将人脸像素特征转化为多维的特征向量。
  6. 特征比对:通过对特征间的距离、寻找最相似的两个特征向量。

人脸识别整体流程
人脸识别流程.jpg

人脸识别落地应用
人脸识别工程化应用.jpg

2.3人脸识别算法Retinaface的训练和数据集

RetinaFace原理
详见sansa大佬的博客,这里不展开细讲
https://zhuanlan.zhihu.com/p/103005911
代码地址:
https://github.com/biubug6/Pytorch_Retinaface
数据集处理
该地址包含干净的Wideface数据集:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB
这个是数据集官方网站的地址:
http://shuoyang1213.me/WIDERFACE/
下载后的数据集一共包含这三个:
widerface数据集.jpg

此时的文件夹是只有图片的,然而作者要求的数据格式是:

├── wider_face:  存放数据集根目录
      ├── WIDER_train: 训练集解压后的文件目录
      │          └──  images: 
      │                   ├──  0--Parade:         对应该类别的所有图片
      │                   ├──  ........
      │                   └──  61--Street_Battle: 对应该类别的所有图片
      │
      ├── WIDER_val: 验证集解压后的文件目录
      │          └──  images: 
      │                   ├──  0--Parade:         对应该类别的所有图片
      │                   ├──  ........
      │                   └──  61--Street_Battle: 对应该类别的所有图片
      |
      ├── WIDER_test: 训练集解压后的文件目录
      │          └──  images: 
      │                   ├──  0--Parade:         对应该类别的所有图片
      │                   ├──  ........
      │                   └──  61--Street_Battle: 对应该类别的所有图片
      │
      └── wider_face_split: 标注文件解压后的文件目录
                  ├──  wider_face_train.mat:         训练集的标注文件,MATLAB存储格式
                  ├──  wider_face_train_bbx_gt.txt:  训练集的标注文件,txt格式
                  ├──  wider_face_val.mat:           验证集的标注文件,MATLAB存储格式
                  ├──  wider_face_val_bbx_gt.txt:    验证的标注文件,txt格式
                  ├──  wider_face_test.mat:          测试集的标注文件,MATLAB存储格式
                  ├──  wider_face_test_filelist.txt: 测试的标注文件,txt格式
                  └──  readme.txt:                   标注文件说明

所以我们还少了数据的索引文件,这时候要使用作者提供的脚本wider_val.py,将图片信息导出成txt文件:

# -*- coding: UTF-8 -*-
'''
@author: mengting gu
@contact: 1065504814@qq.com
@time: 2020/11/2 上午11:47
@file: widerValFile.py
@desc:
'''
import os
import argparse

parser = argparse.ArgumentParser(description='Retinaface')
parser.add_argument('--dataset_folder', default=r'E:\pytorch\Retinaface\data\widerface\WIDER_val\images/', type=str, help='dataset path')
args = parser.parse_args()

if __name__ == '__main__':
    # testing dataset
    testset_folder = args.dataset_folder
    testset_list = args.dataset_folder[:-7] + "label.txt"

    with open(testset_list, 'r') as fr:
        test_dataset = fr.read().split()
    num_images = len(test_dataset)

    for i, img_name in enumerate(test_dataset):
        print("line i :{}".format(i))
        if img_name.endswith('.jpg'):
            print("     img_name :{}".format(img_name))
            f = open(args.dataset_folder[:-7] + 'wider_val.txt', 'a')
            f.write(img_name + '\n')
    f.close()

导出后的完整格式如下:
数据集格式.jpg

为了进一步方便大家理解txt文件内容的含义,我们打开wider_face_train_bbx_gt.txt文件,比如第一行0--Parade/0_Parade_marchingband_1_849.jpg代表图片的路径,第二行的1代表在该图片中人脸的数量为1个。第三行449 330 122 149 0 0 0 0 0 0为人脸的详细信息。从第四行开始又是另一张图片,以此类推。

0--Parade/0_Parade_marchingband_1_849.jpg
1
449 330 122 149 0 0 0 0 0 0 
0--Parade/0_Parade_Parade_0_904.jpg
1
361 98 263 339 0 0 0 0 0 0 
0--Parade/0_Parade_marchingband_1_799.jpg
21
78 221 7 8 2 0 0 0 0 0 
78 238 14 17 2 0 0 0 0 0 
113 212 11 15 2 0 0 0 0 0 
134 260 15 15 2 0 0 0 0 0 
163 250 14 17 2 0 0 0 0 0 
201 218 10 12 2 0 0 0 0 0 
182 266 15 17 2 0 0 0 0 0 
245 279 18 15 2 0 0 0 0 0 
304 265 16 17 2 0 0 0 2 1 
328 295 16 20 2 0 0 0 0 0 
389 281 17 19 2 0 0 0 2 0 
406 293 21 21 2 0 1 0 0 0 
436 290 22 17 2 0 0 0 0 0 
522 328 21 18 2 0 1 0 0 0 
643 320 23 22 2 0 0 0 0 0 
653 224 17 25 2 0 0 0 0 0 
793 337 23 30 2 0 0 0 0 0 
535 311 16 17 2 0 0 0 1 0 
29 220 11 15 2 0 0 0 0 0 
3 232 11 15 2 0 0 0 2 0 
20 215 12 16 2 0 0 0 2 0 

数据集的格式介绍引用了两位大佬的博客内容,详解大家可以看两位大佬的博客,博客链接如下:
太阳花的小绿豆
pogg_
PauIX老师提供了转换后的txt文件,大家可以直接使用。
https://pan.baidu.com/s/1Laby0EctfuJGgGMgRRgykA

模型训练

python train.py --network mobile0.25 

如有需要,请先下载预训练模型,放在weights文件夹中。如果想从头开始训练,则在data/config.py文件中指定'pretrain': False

2.4 本节课的小作业

原来的detect.py只能检测图片,新建detect_video.py实现视频检测,在detect.py的基础上进行修改,修改的代码位于main函数中,具体修改如下:

 # testing begin
    #     for i in range(100):
    image_path = "./curve/Kuangbiao.mp4"
    save_path = "./results/testout.mp4"
    img_raw = cv2.VideoCapture(image_path)
    frames = int(img_raw.get(cv2.CAP_PROP_FRAME_COUNT))
    size = (int(img_raw.get(cv2.CAP_PROP_FRAME_WIDTH)), int(img_raw.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter(save_path, fourcc, 25.0, size)

    for j in range(frames):
        ref, frame = img_raw.read()
        img = np.float32(frame)
        im_height, im_width, _ = img.shape
        scale = torch.Tensor([img.shape[1], img.shape[0], img.shape[1], img.shape[0]])
        img -= (104, 117, 123)
        img = img.transpose(2, 0, 1)
        img = torch.from_numpy(img).unsqueeze(0)
        img = img.to(device)
        scale = scale.to(device)

        tic = time.time()
        loc, conf, landms = net(img)  # forward pass
        print('net forward time: {:.4f}'.format(time.time() - tic))

3. AidLux部署Retinaface

AidLux部署Retinaface的流程,大家可以观看本次训练营的课程,这里不再展开讲。笔者此前也参加过训练营并写了博客,博客中详细介绍了AidLux的使用说明以及算法在AidLux平台部署的过程,大家可以参考着部署人脸识别算法Retinaface。
https://blog.csdn.net/weixin_42538848/article/details/129256231

4. AI视觉算法开发平台介绍及使用

AI视觉算法开发平台,是华勤技术基于自研结构化架构+海量自研AI算法+算法应用/训练/开发功能的一站式AI应用解决方案平台,可跨平台部署,支持一体机/服务器/云端多场景使用。任何想要给自己AI赋能的团队或者个人,无需额外人力,都能快速拥有AI算法开发的能力。
AI中台.jpg

华勤AI中台的使用
首先打开手机端的AidLux,然后点击应用中心,在应用中心里下载安装aid-IVS软件,安装后才能在进入AI中台。具体流程如下:
ai中台下载.jpg

安装完成aid-IVS后,打开终端,cd至zhongtai目录,执行bash start.sh脚本。
打开AI中台.jpg

之后再重新打开一个网页,将8000端口改为8088即可打开中台:
中台主页.jpg

笔者录制了一份AI中台部署人脸识别算法的操作视频,按照训练营课程内容模拟动态人脸识别全流程,尝试在AI技术中台系统中加载自己的视频流,运行人脸识别项目,完成整个流程的串联。
操作视频

5. 学习心得

笔者最近也在尝试做人脸识别算法,通过AidLux动态人脸识别AI实战训练营的学习,对于人脸识别算法在AidLux平台和AI中台的部署应用有了新的认识,从中受益良多,在此感谢成都阿加犀公司和华勤公司提供的学习平台,感谢PauIX老师的授课。

目录
相关文章
|
21小时前
|
机器学习/深度学习 人工智能 算法
介绍一下AI在药物研发中的应用。
【10月更文挑战第16天】介绍一下AI在药物研发中的应用。
7 0
|
2天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:AI在IT运维中的应用探索###
随着信息技术的飞速发展,传统的IT运维模式正面临着前所未有的挑战。本文旨在探讨人工智能(AI)技术如何赋能IT运维,通过智能化手段提升运维效率、降低故障率,并为企业带来更加稳定高效的服务体验。我们将从AI运维的概念入手,深入分析其在故障预测、异常检测、自动化处理等方面的应用实践,以及面临的挑战与未来发展趋势。 ###
|
2天前
|
机器学习/深度学习 人工智能 搜索推荐
AI在医疗领域的革命性应用
【10月更文挑战第14天】 本文探讨了人工智能(AI)在医疗行业中的多种应用,包括疾病诊断、个性化治疗、药物研发等。通过具体案例分析,展示了AI技术如何提高医疗服务效率和准确性,同时指出了当前面临的挑战与未来发展趋势。
14 2
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在软件测试中的创新应用与实践###
本文旨在探讨人工智能(AI)技术如何革新软件测试领域,提升测试效率、质量与覆盖范围。通过深入分析AI驱动的自动化测试工具、智能化缺陷预测模型及持续集成/持续部署(CI/CD)流程优化等关键方面,本研究揭示了AI技术在解决传统软件测试痛点中的潜力与价值。文章首先概述了软件测试的重要性和当前面临的挑战,随后详细介绍了AI技术在测试用例生成、执行、结果分析及维护中的应用实例,并展望了未来AI与软件测试深度融合的趋势,强调了技术伦理与质量控制的重要性。本文为软件开发与测试团队提供了关于如何有效利用AI技术提升测试效能的实践指南。 ###
|
3天前
|
机器学习/深度学习 人工智能 监控
探索AI技术在医疗健康领域的应用与挑战
【10月更文挑战第13天】 本文探讨了人工智能(AI)在医疗健康领域的多种创新应用,包括疾病诊断、个性化治疗、患者监护和药物研发等方面。同时,文章也分析了当前AI技术在实际应用中面临的挑战,如数据隐私、算法透明度、监管问题等,并提出了一些可能的解决思路。通过综合分析,本文旨在为读者提供一个关于AI在医疗领域应用现状及未来的全面视角。
21 3
|
4天前
|
人工智能
添加一个Stable Difussion图像生成应用,通过向AI助手简单的提问,即可快速搭建Stable Diffusion应用至自己的网站中,大幅提升开发效率。
添加一个Stable Difussion图像生成应用,通过向AI助手简单的提问,即可快速搭建Stable Diffusion应用至自己的网站中,大幅提升开发效率。
|
4天前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。
|
人工智能 算法 视频直播
技术详解:基于人脸识别的AI弹幕
有些弹幕比剧情还精彩,那些脑洞大开、观点鲜明的弹幕,让千万用户参与到“剧情创作”中,所以很多人都喜欢边看剧,边看边发弹幕。你发现了吗,在AI算法的加持下,弹幕的呈现形式也花样翻新,优酷的很多剧都上线了基于AI人脸识别的跟随弹幕,与剧情的贴合度更高,可玩性更高。这类弹幕是如何实现的呢,有哪些核心技术?
1213 0
技术详解:基于人脸识别的AI弹幕
|
人工智能 算法 视频直播
技术详解:基于人脸识别的 AI 弹幕
在 AI 算法的加持下,弹幕的呈现形式也花样翻新。优酷的很多剧都上线了基于 AI 人脸识别的跟随弹幕,与剧情更贴合,可玩性也更高。这类弹幕是如何实现的?有哪些核心技术?在 GMIC 智慧文娱技术专场上,阿里文娱高级无线开发专家少廷分享了在优酷播放场景中,如何让互动结合算法的识别能力,实现新的 AI 弹幕形态。同时也介绍了优酷在互动游戏化领域的探索,以及让互动与内容相结合的应用实践。
1354 0
技术详解:基于人脸识别的 AI 弹幕
|
6天前
|
人工智能 Serverless
AI助理精准匹配------助力快速搭建Stable Difussion图像生成应用
【10月更文挑战第7天】过去在阿里云社区搭建Stable Diffusion图像生成应用需查阅在线实验室或官方文档,耗时且不便。现阿里云AI助理提供精准匹配服务,直接在首页询问AI助理即可获取详细部署步骤,简化了操作流程,提高了效率。用户可按AI助理提供的步骤快速完成应用创建、参数设置、应用部署及资源释放等操作,轻松体验Stable Diffusion图像生成功能。