开源的跨平台ai模型部署总有一款是你的菜(代码片段)

修炼之路 修炼之路     2022-10-23     144

关键词:

导读

Mediapipe是Google开源的一个跨平台模型部署项目

除此之外,Mediapipe还提供了大量的开源模型

我们能够很方便的使用MediaPipe将模型部署在AndroidIOSDesktopWeb以及IOT设备上。接下来我们看看如何使用MediaPipe来部署我们的模型

安装MediaPipe

MediaPipe支持在多个平台以及多种编程语言使用,这里就不一一介绍了,主要介绍在python安装方法

#创建虚拟环境,建议使用python3.7的环境
conda create -n mp_env python==3.7
#激活环境
source activate mp_env
#安装mediapipe
pip install mediapipe

使用MediaPipe实现人脸关键点检测

这里我们主要使用Face Mesh这个项目在Python上为例来介绍如何使用MediaPipe,更多其它的项目请参考MediaPipe的Solutions

Face Mesh是用来检测人脸的3D landmarks,它一共检测了468个人脸关键点,它能够实时的运行在移动设备上。利用检测到的468个人脸关键点,我们可以做出很多好玩的AR特效

  • Python检测3D landmarks
import cv2
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_face_mesh = mp.solutions.face_mesh

#检测单张图片的人脸3D landmarks
#用来存放图片的路径
IMAGE_FILES = []
#设置绘制点线的粗细和点的半径
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1)
with mp_face_mesh.FaceMesh(
    static_image_mode=True,#设置图片检测人脸landmarks
    max_num_faces=1,       #最多检测一个人脸
    refine_landmarks=True, 
    min_detection_confidence=0.5) as face_mesh:
  for idx, file in enumerate(IMAGE_FILES):
  	#读取图片
    image = cv2.imread(file)
    #图片的预处理,将BGR格式的图片转为RGB
    results = face_mesh.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    if not results.multi_face_landmarks:
      continue
    annotated_image = image.copy()
    #在图片上绘制landmarks
    for face_landmarks in results.multi_face_landmarks:
      print('face_landmarks:', face_landmarks)
      #绘制网格线
      mp_drawing.draw_landmarks(
          image=annotated_image,
          landmark_list=face_landmarks,
          connections=mp_face_mesh.FACEMESH_TESSELATION,
          landmark_drawing_spec=None,
          connection_drawing_spec=mp_drawing_styles
          .get_default_face_mesh_tesselation_style())
      #绘制连的轮廓
      mp_drawing.draw_landmarks(
          image=annotated_image,
          landmark_list=face_landmarks,
          connections=mp_face_mesh.FACEMESH_CONTOURS,
          landmark_drawing_spec=None,
          connection_drawing_spec=mp_drawing_styles
          .get_default_face_mesh_contours_style())
      #绘制虹膜
      mp_drawing.draw_landmarks(
          image=annotated_image,
          landmark_list=face_landmarks,
          connections=mp_face_mesh.FACEMESH_IRISES,
          landmark_drawing_spec=None,
          connection_drawing_spec=mp_drawing_styles
          .get_default_face_mesh_iris_connections_style())
    #保存绘制后的图片
    cv2.imwrite('/tmp/annotated_image' + str(idx) + '.png', annotated_image)

# 利用电脑的摄像头来检测人脸的landmarks
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1)
cap = cv2.VideoCapture(0)
with mp_face_mesh.FaceMesh(
    max_num_faces=1,
    refine_landmarks=True,
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5) as face_mesh:
  while cap.isOpened():
    success, image = cap.read()
    if not success:
      print("Ignoring empty camera frame.")
      # If loading a video, use 'break' instead of 'continue'.
      continue

    # To improve performance, optionally mark the image as not writeable to
    # pass by reference.
    image.flags.writeable = False
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = face_mesh.process(image)

    # Draw the face mesh annotations on the image.
    image.flags.writeable = True
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    if results.multi_face_landmarks:
      for face_landmarks in results.multi_face_landmarks:
        mp_drawing.draw_landmarks(
            image=image,
            landmark_list=face_landmarks,
            connections=mp_face_mesh.FACEMESH_TESSELATION,
            landmark_drawing_spec=None,
            connection_drawing_spec=mp_drawing_styles
            .get_default_face_mesh_tesselation_style())
        mp_drawing.draw_landmarks(
            image=image,
            landmark_list=face_landmarks,
            connections=mp_face_mesh.FACEMESH_CONTOURS,
            landmark_drawing_spec=None,
            connection_drawing_spec=mp_drawing_styles
            .get_default_face_mesh_contours_style())
        mp_drawing.draw_landmarks(
            image=image,
            landmark_list=face_landmarks,
            connections=mp_face_mesh.FACEMESH_IRISES,
            landmark_drawing_spec=None,
            connection_drawing_spec=mp_drawing_styles
            .get_default_face_mesh_iris_connections_style())
    # Flip the image horizontally for a selfie-view display.
    cv2.imshow('MediaPipe Face Mesh', cv2.flip(image, 1))
    if cv2.waitKey(5) & 0xFF == 27:
      break
cap.release()

  • 其它语言的代码
    JavaScriptAndroid的源码请参考代码示例

参考

  1. https://github.com/google/mediapipe
  2. https://google.github.io/mediapipe/solutions/face_mesh.html
  3. https://google.github.io/mediapipe/

零代码工具15款企业级零代码开发平台推荐,总有一款是你心仪的

云原生时代,你用上了哪些零代码平台工具了吗?你有哪些实用的零代码工具推荐吗?今天我就和大家分享一些我了解到的实用工具清单!从启动网站、构建工作流程自动化和开发应用程序,零代码平台都可... 查看详情

各协议授权详情

...http://www.cnblogs.com/Wayou/p/how_to_choose_a_license.html下面是更多开源协议的一个表格任君选择,总有一款是你的菜。不过先来了解一些下方表格中出现的用词的解释:协议和版权信息(Licenseandcopyrightnotice):在代码中保留作者提供的协议... 查看详情

19款windows实用软件推荐,满满的干货,总有一款是你必备的

https://post.smzdm.com/p/745799/ 追加修改(2018-08-2012:28:23):一些追加内容:很多人都在吐槽为什么推荐Clover,这里我说明一下,就我了解到的信息这个软件的原作者因为技术能力原因,把代码交给了一个公司(或者什么团队)吧。这... 查看详情

python实用小工具了解一下,总有一款是你需要的

1.实现简单探测使用socket模块,connect()方法建立与指定IP和端口的网络连接;revc(1024)方法将读取套接字中接下来的1024B数据通过函数实现通过def()关键字定义,示例中定义扫描FTPbanner信息的函数:迭代实现OS模块os.pa... 查看详情

windows热门的八款绘图软件总有一款是你想要

很多刚刚开始学习或刚工作的设计专业新人,遇到的棘手问题就是找不到趁手的设计软件,也不知道如何加强操作。这篇文章我就来给大家分享八个windows系统可用的八个热门绘图软件供大家挑选。Pixso——一款国内出品... 查看详情

六大接口管理平台,总有一款适合你的!

...可以跨整个API生命周期进行开发,从设计和文档到测试和部署。Swagger框架三核心:YApi部署流程介绍YApi是高效、易用、功能强大的api管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。它可以帮助开发者轻松创... 查看详情

什么猫咪最受欢迎?python爬取全网猫咪图片,哪一款是你最爱的(代码片段)

前言采集目标网页资源地址工具准备开发工具:pycharm开发环境:python3.7,Windows11使用工具包:requests项目思路解析做爬虫案例首先需要明确自己的采集目标,白又白这里采集的是当前网页的所有图片信息,... 查看详情

什么猫咪最受欢迎?python爬取全网猫咪图片,哪一款是你最爱的(代码片段)

前言采集目标网页资源地址工具准备开发工具:pycharm开发环境:python3.7,Windows11使用工具包:requests项目思路解析做爬虫案例首先需要明确自己的采集目标,白又白这里采集的是当前网页的所有图片信息,... 查看详情

翻译:deeplearning深度学习平台huggingface开源代码和技术构建训练和部署ml模型(代码片段)

...个社区和数据科学平台,提供:使用户能够基于开源(OS)代码和技术构建、训练和部署ML模型的工具。一个广泛的数据科学家、研究人员和ML工程师社区可以聚集在一起分享想法、获得支持并为开源项目做出贡献的地方。2.&... 查看详情

翻译:deeplearning深度学习平台huggingface开源代码和技术构建训练和部署ml模型(代码片段)

...个社区和数据科学平台,提供:使用户能够基于开源(OS)代码和技术构建、训练和部署ML模型的工具。一个广泛的数据科学家、研究人员和ML工程师社区可以聚集在一起分享想法、获得支持并为开源项目做出贡献的地方。2.&... 查看详情

分享36个c源码,总有一款适合您(代码片段)

C源码分享36个C源码,总有一款适合您下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。源码下载链接:https://pan.baidu.com/s/1WTLgtQ2J5gfZdj-LMEYnEA?pwd=nimr 提取码&#... 查看详情

如何「增强阅读体验」「csdn浏览器助手」带你实现

...粹阅读功能」体验纯净的快乐3.众多插件任你挑选,总有一款是你的菜4.个人希望增加的功能5.总结1.传送门「CSDN浏览器助手」插件官网传送门https://t.csdnimg.cn/bKUP俗话说得好:浏览器再狗,有了插件也能吼。浏览器用... 查看详情

可视化大屏的几种屏幕适配方案,总有一种是你需要的(代码片段)

假设我们正在开发一个可视化拖拽的搭建平台,可以拖拽生成工作台或可视化大屏,或者直接就是开发一个大屏,首先必须要考虑的一个问题就是页面如何适应屏幕,因为我们在搭建或开发时一般都会基于一个固... 查看详情

分享111个java源码,总有一款适合您(代码片段)

Java源码分享111个Java源码,总有一款适合您源码下载链接:https://pan.baidu.com/s/1fycjYHA7y6r-IH8H7v5XKA?pwd=ag8l 提取码:ag8l下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载... 查看详情

硬核推荐15个最火的spring实战开源项目!总有一款适合你!

哔哩哔哩在线演示视频: https://www.bilibili.com/video/av92191212Guide哥注:下面这些推荐的项目几乎都和SpringBoot有关,毕竟这年头没有理由再搞SSM/SSH这些东西了。商城系统Guide哥注:下面的商城系统大多比较复杂比如mall,如果没有Ja... 查看详情

最流行的自动化测试工具,总有一款适合你(附部分教程)(代码片段)

...地定位自己,跟上软件测试的趋势。这份清单包含了开源和商业的自动化测试解决方案。1)SeleniumSelenium可能是网页应用中最流行的开源自动化测试框架。起源于2000年,10多年来不断地完善,Selenium成为许多Web自动... 查看详情

夏季刮油蔬菜排行榜!第一名你绝对想不到!

...体内垃圾,还是减肥神器一起看看这七大减肥蔬菜排行榜总有一款是你的菜!7 7  生菜生菜的含水量很高,高达95%以上,每100克仅15千卡的热量。生菜的营养素种类比较全面,适当多吃些生 查看详情

最适合上班族操作的3种fu业,总有一款适合你

最适合上班族操作的3种FU业,总有一款适合你!#上班族副业#电商运营最适合我们上班族操作的3种副业的模式,总有一个适合你。针对不想做韭菜的上班族吗?我强烈推荐你可以尝试这3种副业,干好了,... 查看详情