python编程人工智能小例子,python人工智能技术

大家好,小编来为大家解答以下问题,基于python的人工智能的案例,python编程人工智能小例子,今天让我们一起来看看吧!

嗨害大家好鸭!我是小熊猫❤

今天准备给大家带来一篇使用光流法进行人脸追踪!

感兴趣的可以往下滑了👇👇

请添加图片描述

一、背景知识

1. 光流法

目前,光流(optical flow)法是运动图像分析的重要方法之一,

它是由James J. Gibson于20世纪40年代首先提出的。

它是像素的运动瞬时速度,

即空间中的运动物体在观察平面上的像素运动的瞬时速度Python中使用Turtle绘制半圆形

光流利用图像序列中像素在时间域上的变化与相邻帧之间的相关性,

找到当前帧跟上一帧之间存在的对应关系,

从而计算出相邻帧之间的物体运动信息。

在计算机视觉中,Lucas–Kanade算法是一种两帧差分的光流估计算法,

它是由Bruce D. Lucas和Takeo Kanade提出的。

这个算法是目前最常见、最流行的。

它计算两帧在时间在t~t + δt每个像素位置的移动。

由于它基于图像信号的泰勒级数,这种方法称为差分,

也就是对空间和时间坐标使用偏导数。

Lucas-Kanade算法广泛用于图像对齐、光流法、目标追踪、图像拼接和人脸检测等课题中。

请添加图片描述
请添加图片描述

2. 角点检测

角点检测(corner detection)是计算机视觉系统中用来获得图像特征的一种方法,也称为特征点检测。

常用的角点检测算法有Harris和Shi-Tomasi,

本例中用的就是Shi-Tomasi角点检测算法。

角点通常被定义为两条边的交点。

例如,三角形有三个角,矩形有四个角,这些点就是角点,也叫作矩形、三角形的特征。

上面所说的是严格意义上的角点,

但是从广义来说,角点指的是拥有特定特征的图像点,

这些特征点在图像中有具体的坐标,

并具有某些数学特征(比如局部最大或最小的灰度)。

请添加图片描述
请添加图片描述

二、实现代码

Python实现代码如下所示

(代码中的视频文件face.mp4提供下载):

import cv2
import numpy as np
 
feature_params = dict(maxCorners=100, qualityLevel=0.3,
                      minDistance=7, blockSize=7)
lk_params = dict(winSize=(15,15), maxLevel=2,
                 criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))
 
cap = cv2.VideoCapture('face.mp4')
_, frame = cap.read()
scaling_factor = 0.5
frame = cv2.resize(frame, None, fx=scaling_factor,
                   fy=scaling_factor, interpolation=cv2.INTER_AREA)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
p0 = cv2.goodFeaturesToTrack(gray, mask=None, **feature_params)
 
mask = np.zeros_like(frame)
 
while True:
    _, frame = cap.read()
    frame = cv2.resize(frame, None, fx=scaling_factor,
                       fy=scaling_factor, interpolation=cv2.INTER_AREA)
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
 
    p1, st, err = cv2.calcOpticalFlowPyrLK(gray, frame_gray, p0, None, **lk_params)
 
    good_new = p1[st == 1]
    good_old = p0[st == 1]
 
    for i,(new,old) in enumerate(zip(good_new,good_old)):
        a,b = new.ravel()
        c,d = old.ravel()
        cv2.line(mask, (a, b),(c, d),(0, 150, 0), 1)
        cv2.circle(frame, (a, b), 3, (0, 255, 0), -1)
 
    gray = frame_gray.copy()
    p0 = good_new.reshape(-1, 1, 2)
 
    img = cv2.add(frame, mask)
    cv2.imshow("Output", img)
 
    k = cv2.waitKey(30)
    if k == 27:
        break
 
cap.release()
cv2.destroyAllWindows()

请添加图片描述

三、运行结果

运行以上代码的输出结果如图所示。

请添加图片描述
请添加图片描述

四、代码分析

在本程序中,首先设置了角点(特征点)检测的参数,

如最大角点、质量等级、最小距离和区块大小,

这些用来计算良好的特征以便进行跟踪。

接着设置光流场的参数,如窗口大小、最大等级和终止标准,

其中最大等级为使用图像金字塔(图像金字塔是以多个分辨率表示图像的一种有效且简单的概念,它是分辨率逐层降低的、以金字塔形状排列的、图像集合)的层数。

其次加载视频,获取到视频的第一帧,调整第一帧的大小并转换为灰度图。goodFeaturesToTrack()函数是寻找好的角点。

接着创建一个掩膜mask,以便后面绘制角点的光流轨迹。

在循环中使用方法calcOpticalFlowPyrLK()计算光流,

该方法通过金字塔光流方法Lucas-Kanade计算特征集的光流,获取角点的新位置。

接着选取好的角点,筛选出旧的角点对应的新角点,并且绘制角点的轨迹。

最后,更新当前帧和当前角点的位置,并显示输出到屏幕。copy()函数创建当前帧的一个副本,cv2中的add()方法将两幅图片进行叠加。

在程序的输出中,可以在屏幕上看到显示的角点,并且随着画面的移动,角点也会随之移动。

想领取更多完整源码跟Python学习资料可点击这行字体

请添加图片描述

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值