点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

计算机视觉是最令人兴奋的领域之一,其应用范围非常广泛。从医学成像到创建最有趣的面部滤镜等各个领域都充分见证了计算机视觉技术的强大。在本文中,我们将尝试创建一个人造眼线笔来模仿Snapchat或Instagram滤波器,为视频中的美女添加上美丽的眼线。最终的结果可以通过下面的动图观察到。

本文介绍的内容适合想要通过计算机视觉来实现一个具有一定展示性功能的计算机视觉初学者。因此,在本文重我们会尽量简化说明,如果您对完整的程序感兴趣,可以在Github上找到完整的代码。Github的链接在本文的文末给出。

在实现本文功能之前,我们需要设置一个新的虚拟环境并安装所有必需的依赖项。这个过程比较简单,我们也在Github里面给出了如何配置环境的具体过程。在本项目中,我们需要使用的工具有OpenCV,NumPy,imutils,SciPy和Dlib。有些小伙伴可能对这些工具和库比较陌生,接下来我们简单介绍一下每个模块的作用。

  • OpenCV:用于图像处理的最受欢迎的模块之一。我们将使用OpenCV读取,写入和绘制图像。

  • NumPy:在处理OpenCV项目时经常使用NumPy。图像本质上是一个像素数组,OpenCV使用以NumPy数组形式存储的这些数组,并对图像执行操作。

  • Imutils:Imutils附带了自定义功能,使我们的计算机视觉工作变得更加轻松。在这里,我们将使用它来将dlib对象转换为非常灵活且广泛接受的numpy数组。

  • Scipy:顾名思义,SciPy用于python上的科学计算。我们将使用它来创建插值(如果现在没有意义,可以的)。

  • Dlib:Dlib是一个包含各种ML算法的C ++库。我们将使用dlib提取面部界标点。

项目简要介绍

该程序首先从每个面孔中提取68个界标点。在这68个点中,点37–42属于左眼,点43–48属于右眼,具体形式如下图所示。

因为我们的目标是给面部添加眼线,所以我们只对37-48点感兴趣,因此我们提取了这些点。我们将对这些提取的点进行插值。插值意味着我们尝试在两个给定点之间插入点。我们可以使用的插值方式如下图所示。

眼线算法的流程图如下所示

接下来,我们将进一步详细描述该算法。如果小伙伴只对运行代码感兴趣,可以跳至最后一部分。

算法介绍

我们首先需要提取脸部周围边界框的坐标。

OpenCV将图像转换为NumPy数组。numpy.array(即图像的矩阵表示形式)存储在名为的变量中frame。我们使用一个名为face_detector()的函数,该函数返回围绕框架中所有脸部的包围框的坐标。这些边界框坐标存储在一个名为bounding_boxes的变量中。遍历循环bounding_boxes以将眼线应用于帧中检测到的每个脸部。face_landmark_points存储68个坐标点。eye_landmark_points是从getEyeLandmarkPts()函数中得到。

getEyeLandmarkPts()函数使用68个坐标点作为输入并返回具有左上眼睑的坐标4个矩阵,左上眼线(L_eye_top),左下眼线(L_eye_bottom)和相同的右眼(R_eye_top & R_eye_bottom)。这可以通过简单的NumPy索引完成的。我们将端点(pt号37、40、43和46。请参见68个界标点图)向外移动5px,以使外观更逼真。

现在,我们需要对这些点进行插值以获得平滑的曲线,进而可以画出眼线。我们需要对每个曲线进行不同的处理(即L_eye_top,L_eye_bottom,R_eye_top,R_eye_bottom)。因此,我们为每个曲线使用单独的变量名称。interpolateCoordinates()用于在每条曲线上生成插值。重复使用该函数,为每个曲线生成插值坐标。这个函数为每个曲线返回一个插值点数组。

drawEyeLiner()函数将生成的插值点作为参数,并在两个连续点之间画一条线。在两个循环中为每个曲线完成此操作,一个循环用于左眼,另一个循环用于右眼。

调用项目

该项目的用发非常简单,首先从Github上克隆到本地

git clone https://github.com/kaushil24/Artificial-Eyeliner/

接下来,打开命令提示符并键入以下代码以运行示例测试

python3 eyeliner.py -v "Media/Sample Video.mp4"

我们也可以通过将视频路径放在参数中来使用自己的视频。完整的CLI命令如下:

python eyeliner.py [-i image] [-v video] [-d dat] [-t thickness] [-c color] [-s save]

每个参数的具体含义如下:

  • i :要在其上绘制眼线的图像的路径

  • v :要在其上绘制眼线的视频的路径。

  • v :也可以通过网络摄像头获取视频。例如:python3 -v webcam -s "Webcam output"

  • t :整数(整数)以设置眼线的厚度。默认值= 2。推荐的数值介于1-5之间

  • d:shape_predictor_68_face_landmarks.dat文件的路径。默认路径在根目录中。除非将shape_predictor_68_face_landmarks.dat文件存储在其他位置,否则不需要使用此参数。

  • c :更改眼线的颜色。语法-c 255 255 255。默认值= 0 0 0。其中每个数字代表其RGB值。

  • s :要将输出保存到的位置和文件名。注意程序在保存文件时会自动添加扩展名。如果已经存在同名文件,它将覆盖该文件。

好了,对这个项目感兴趣的小伙伴可以按照上面的说明来进行尝试,可以通过对程序的修改以达到自己的需求。如果小伙伴觉得这个项目比较有趣,文末给小白六留个“好看”哦。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

使用OpenCV为视频中美女加上眼线相关推荐

  1. 肝!使用OpenCV为视频中美女加上眼线

    计算机视觉是最令人兴奋的领域之一,其应用范围非常广泛.从医学成像到创建最有趣的面部滤镜等各个领域都充分见证了计算机视觉技术的强大.在本文中,我们将尝试创建一个人造眼线笔来模仿Snapchat或Inst ...

  2. 使用Python,OpenCV在视频中进行实时条形码检测

    使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...

  3. OpenCV实现视频中目标的跟踪

    meanshift实现视频跟踪 import matplotlib.pyplot as plt import cv2 as cv import numpy as np plt.rcParams['fo ...

  4. 科研日志——使用opencv提取视频中的人脸

    科研任务需要,将视频中与文字和音频对应的视频帧根据时间戳提取出来,并截取视频帧中的人脸.使用的工具是opencv,步骤如下: 1. 提取视频帧 Sentence标号的含义 数据集中对视频中的每个sen ...

  5. python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框

    最近因为要实现模板匹配,需要在视频中选中一个目标,然后框出(即作为模板),对其利用模板匹配的方法进行检测.于是需要首先选出视频中的一帧,但是在利用摄像头读视频的过程中我唯一能想到的方法就是: 1.在视 ...

  6. opencv画框显示python_python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框...

    最近因为要实现模板匹配,需要在视频中选中一个目标,然后框出(即作为模板),对其利用模板匹配的方法进行检测.于是需要首先选出视频中的一帧,但是在利用摄像头读视频的过程中我唯一能想到的方法就是: 1.在视 ...

  7. 给视频中人脸加上墨镜(基于python+opencv)

    先声明,本人菜鸟一只,欢迎指导,这个代码跑起来还会有点卡顿,问题在于加模型的方法中存在多个循环,菜鸟本人暂时没有优化的方案,希望各位大哥能提供一下意见. import cv2# 覆盖图像 def ov ...

  8. python3抓取图片视频_Python opencv提取视频中的图片

    #-*- coding: utf-8 -*- importosimport cv2 ##加载OpenCV模块 def video2frames(pathIn='', pathOut='', only_ ...

  9. python对视频中美女下半身大长腿进行识别,小心脏受不了的千万别看!

    小白的学习时间已经开始,请兄弟们往下看 1.新建一个lowerbodyRecognition.py文件 2.使用命令 pip install opencv-python 下载cv2库 3.导入cv2库 ...

最新文章

  1. JavaScript-使用WeakMap创建对象的私有属性
  2. java 数据结构经典算法
  3. replication debug for PRODUCT_MAT
  4. 全文索引 - Pomelo.EFCore.MySql
  5. JavaBean 持久化
  6. 602. Friend Requests II: Who Has Most Friend?
  7. 快门光圈感光度口诀_光圈、快门、感光度之间的关系
  8. Delphi十进制和十六进制互转
  9. 阿里架构师直言:“没有实战都是纸上谈兵”,Redis实战PDF分享
  10. 联想电脑自动锁屏解决方法
  11. kinect沙池游戏
  12. 电商api数据接口,淘宝item_cat_get,淘宝API接口分类!!!
  13. Unreal Engine 4 Radiant UI 入门教程(一)制作Radiant HUD
  14. 头戴式耳机跑步方便吗、公认最好的跑步耳机排行榜
  15. eth0: no IPv6 routers present
  16. KSO-Sqlserver事务的实现
  17. Halcon实战 项目二 Bolb实战分析-提取图片中的硬币
  18. 机器学习专题之概率论——雅可比式
  19. macOS 安装 wine
  20. 一文掌握Flutter for Windows桌面端稳定版新特性

热门文章

  1. 力挺Python!同是程序员,为啥同事年前就实现了财务自由?
  2. 肖仰华:知识图谱落地,不止于“实现”
  3. BAT七年经验,却抵不过外企面试的两道算法题?
  4. 前沿 | DeepMind 最新研究——神经算术逻辑单元,有必要看一下!
  5. Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅!
  6. Java打造一款SSH客户端,而且已开源
  7. MyBatis 框架下 SQL 注入攻击的 3 种方式,真是防不胜防!
  8. Elasticsearch 在互联网公司大量真实的应用案例
  9. 知乎服务化的实践与思考
  10. 自监督学习新思路!基于蒸馏损失的自监督学习算法 | CVPR 2021