DpCas(深度学习组件化应用系统)介绍:基于人脸动作的活体检测 -案例尝试(1)

        2021年2月24日,我开启了一个新的开源项目 DpCas(Deep Learning Componentized Application System),中文的名称:深度学习组件化应用系统。

        DpCas 开源项目地址:https://codechina.csdn.net/EricLee/dpcas

        这个项目其实是由于我的焦虑萌生出的想法,(之前的文章链接,同学们有兴趣可以看看:https://blog.csdn.net/weixin_42140236/article/details/114343870#comments_16134627

        在这个算法行业,我经常看到的现象是在重复的板砖(相同类型的任务的算法如检测、识别、回归、度量、实例\语义分割、人体关键点、表情识别等,大家也可以随便看一个招聘网站的算法招聘,你看个几十家或是十几家基本能得出市场普遍需要的算法模块技术名录),虽然每个具体算法任务的模型时有更新,但是基础任务类型不会变或是极为缓慢的演化过程,同一个公司不同项目还是这些类型的算法模块,不同公司之间可能算法模块也大同小异。这又让我觉得算法工程师(这里主要指的是大部分算法从业人员,这个行业还是需要有研究人员在前沿领域去不断探索)是可替代的。

        为了突破这样的窘境,破局的方向在哪,是否有前车之鉴可以参考?我虽然没做过前端开发,但是经常听说组件化开发,我就在想每一个具体算法项目实现,就是将不同的算法模块当作组件集成到项目的pipeline中。那么算法能否在业务落地时也可以实现类似与前端的组件化开发,这是否是算法应用发展的一个方向和趋势,最近也在看前端相关组件化相关的资料,希望更好的去思考它与算法项目的异同点,怎么能更好的去探索实现算法组件化式的开发及框架,它的需求是否真实存在。

        为了做这个尝试是考虑一个简单通用的组件化集成框架,让他能够根据不同的项目组建不同的算法模块,让开发者根据自己的业务逻辑实现完整的pipeline,但是只要更多的去考虑业务的实现逻辑和效果。

         在我目前设计的DpCas框架分为:

         1) Application : 应用 pipeline,即业务流实现。

         2)xxx_lib: 应用支持库,具体包括 : A) cfg 配置文件 , B) cores 核心功能函数实现  ,C) utils 通用功能函数实现。

         3)components : 不同的算法推理模块。

        如图 DpCas的 框架(FrameWork):

       

DpCas FrameWork
DpCas FrameWork 0.1

         最近我邀请我的朋友加入了DpCas开源项目,这样可以做更多的尝试,后面也会不断邀请更多的同学朋友参加DpCas,通过DpCas项目让更多不同类型的开发者,更快更棒的实现不同行业类型的项目,同时也感谢关注DpCas项目的开发者,你们对于项目的使用是对我坚持方向的支持,你们的反馈是DpCas的优化方向。

         那么我们接下来通过 《 基于人脸动作的活体检测 》案例来看下怎么通过 DpCas来进行实践。

         这里我们进行一个完整的项目流程:

         1)分析需求场景:移动端场景下的基于人脸动作的活体检测,那么就是用户是自拍的角度进行使用。

         2)实现方案(pipeline)设计: 机器随机的产生指定人脸动作,具体动作类型包括:动作1 点头,动作2 摇头 ,动作3 眨眼 ,动作4 掌嘴。

               具体步骤:

               A) 人脸检测 (考虑人脸居中,或是在UI人像掩码交集足够大,锁定人脸目标)

               B) 跟踪人脸

               C) 对跟踪的目标人脸做时序的动作获取,如人脸角度模型识别点头角度(pitch)和摇头角度(yaw)的时序变化,人脸微动作单元检测模型识别人眼睛和嘴巴的开闭时序状态。

               D) 对目标人脸获取的时序动作进行时序分析,得出其是否点头、摇头、眨眼、掌嘴动作。

               E) 判断动作是否与机器发布的动作符合,符合即判断为活体。

#接下来:我们看下DepCas实现这个项目的部分代码,以下代码是该项目的Application  部分的,脚本地址:https://codechina.csdn.net/EricLee/dpcas/-/blob/master/applications/face_bioassay_local_app.py

# cfg_file 配置文件
def main_face_bioassay(video_path,cfg_file):
    config = parse_data_cfg(cfg_file)
    print("\n/************** Face Bioassay *****************/")
    print("/********************************************************/\n")
    # 加载人脸检测组件
    face_detect_model = yolo_v3_face_model(conf_thres=float(config["detect_conf_thres"]),nms_thres=float(config["detect_nms_thres"]),
        model_arch = config["detect_model_arch"],model_path = config["detect_model_path"],yolo_anchor_scale = float(config["yolo_anchor_scale"]),
        img_size = float(config["detect_input_size"]),
        )
    
    # 加载人脸姿态角(pitch,roll,yaw)组件,对点头、摇头进行分析
    face_euler_model = FaceAngle_Model(model_path = config["face_euler_model_path"])
    # 加载人脸微动作组件,对眨眼和掌嘴检测
    face_au_model = FaceAu_Model(model_path = config["face_au_model_path"])

    cap = cv2.VideoCapture(video_path) # 加载视频
    frame_idx = 0
    while cap.isOpened():
        ret,img = cap.read()
        if ret:
            frame_idx += 1
            video_time = cap.get(cv2.CAP_PROP_POS_MSEC)
            # 检测脸的模型推理,返回人脸边界框
            faces_bboxes =face_detect_model.predict(img,vis = False) 
            # 对每一张人脸进行姿态模型和人脸微动作模型的推理获得,人脸角度及眼睛嘴巴的开闭状态。
            faces_message = get_faces_batch_attribute(
                face_multitask_model,face_euler_model,face_au_model,faces_bboxes,img,use_cuda = True,vis = True)
            if faces_message is not None: # 返回信息
                print("faces_message : {} \n".format(faces_message))
                #------------------------- todo 这里根据项目方案,对算法输出的结果进行分析实现 “基于人脸动作的活体检测业务逻辑”
            
            cv2.namedWindow("DriverFatigueMonitor",0)
            cv2.imshow("DriverFatigueMonitor",img)
            if cv2.waitKey(1)==27:
                break
        else:
            break

    cv2.destroyAllWindows()

       我在写着 DpCas项目的过程中,目前它的定位和实现风格更加适合于应用方向(其实这个项目可能目前更适合于并不是算法背景但是有软件开发经验的同学),同时对于算法组件式开发对于开发者自有组件的集成也是方便的,这和前端的组件开发真的很像。对于上面的业务逻辑我没有继续写而是交给了我的朋友,让他用这个DpCas框架作一个尝试,我相信不同的尝试,不同的思维能够碰撞出更多的火花。

       我觉得:“不会组件化开发的程序员不是一个好的算法工程师,同时我也感觉随着发展,不会算法项目实现开发的程序员也不是一个好的应用开发者。”,一句玩笑话,但是我觉得还是符合客观情况的。

       当然这个项目也存在不足,其中一点就是定制化的业务数据,我们的组件会提供完整的训练脚本,支持开发者同学去训练自己的业务数据。

       希望以后 通过DpCas,高效的实现不同行业不同类型的项目,我在尝试挖掘更多的真实需求,用DpCas去实现,让它不断成长,我很希望,非常欢迎同学们在留言处说“我这边有个需求,你看能不能实现,是否能给出方案”,同时希望同学们附带项目背景,尽可能相关信息详细,这样便于我们更好的理解,我们会合理的评估我们目前具备的资源和目前能力所及范围方案的可行性,我们会不断更新更多算法组件和优化迭代我们的功能架构。

       谢谢大家,还有一个事,差点忘记说了,《 基于人脸动作的活体检测 》的业务开发我的朋友正在开发,还没有完全写完,后面会进行更新~ 

               

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值