13- OpenCV+TensorFlow 入门人工智能图像处理-opencv中的机器学习

我们已经学习了图像的特效,几何变换,图形绘制。

机器学习是什么?

机器学习的方式来达成某种功能

使用场景: 人脸检测,车辆识别,安防监控

深度学习:

机器学习 = 训练样本 + 特征 + 分类器

深度学习 = 海量的训练样本 + 人工神经网络

对于机器学习来说,需要一个明确的特征进行提取。对于深度学习样本需求更多的数量。

区分ios和安卓系统?

机器学习可以进行特征提取,ios 三个字母,Android 七个字母。这就是一种特征上的差别

深度学习: 神经网络训练自己抽取特征,有可能把更多特征抽取出来。

我们并不知道深度学习的神经网络抽取了什么样的特征,进行最终判别。

而机器学习中特征非常的明显。

  • Haar特征(人脸检测) & Hog特征是我们做行人检测,车辆检测,物体检测。

单词的个数 num判决 分类器

Adaboost分类器:

mark

SVM支持向量机:

mark

完成特征提取之后如何进行判决

  1. 样本准备
  2. 获取机器学习的特征
  3. 用分类器对于机器学习的特征进行分类。
  • 视频与图片的分解合成(样本收集)

Haar特征:

mark

  • Haar特征主要用于人脸识别上,它在人脸识别上的概率非常的高。

haar特征由一系列的模板组成,有基础类型,核心类型和所有类型。

以x2的haar特征为例:

mark

mark

将这个模板放到我们图片上的任意一个位置。

  • 当前的特征 = 白色部分 - 黑色部分
  • 派生出的两个公式

mark

四个指针相加减。

我们并不知道人脸位于我们图像的哪个位置,所以我们需要使用haar特征进行遍历

mark

从上到下,从左到右遍历整个图像。

积分图进行特征的快速计算。

mark

Adaboost分类器

mark

  • 强分类器 & 弱分类器 & 若干特征节点
  • 样本 & 特征 & 分类器

haar特征 + Adaboost 实现人脸识别

haar 由一系列模板组成,adboost分类器分为三级(强分类器,弱分类器,node节点)

Hog特征 + svm小狮子识别

mark

Hog特征计算

mark

一系列的窗体: 蓝色矩形框,红色block模块,绿色的cell模块。

我们要计算cell模块中每一个像素的梯度。我们还要计算它的浮值和方向。 根据浮值与方向进行直方图的统计最后得到hog特征。

hog在进行梯度计算的时候同样有一个模板,加上SVM,实现小狮子识别

最后预测或检验特征是否有效。

视频分解图片

如何使用视频分解图片。

  1. 加载视频 2. info信息 3. parse方法解析视频 4. imshow展示
  2. 保存imread
# 视频分解图片
# 1 load 2 info 3 parse 4 imshow imwrite
import cv2
# 可以通过摄像头,也可以通过本地文件
cap = cv2.VideoCapture("1.mp4") # 获取一个视频打开cap 参数1 file name(可选路径)
isOpened = cap.isOpened # 判断是否打开
print(isOpened)
fps = cap.get(cv2.CAP_PROP_FPS) # 帧率(每秒多少张图片)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))# w h
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 高度信息
print(fps,width,height)
# i记录保存了多少张
i = 0
while(isOpened):
    # 读取十张照片
    if i == 10:
        break
    else:
        i = i+1
    (flag,frame) = cap.read()# 读取每一张(帧) 返回: flag(是否成功) frame(图片内容) 
    fileName = 'image'+str(i)+'.jpg'
    print(fileName)
    # 如果读取成功了,保存图片
    if flag == True:
        # 质量控制: 100表明质量最高。
        cv2.imwrite(fileName,frame,[cv2.IMWRITE_JPEG_QUALITY,100])
print('end!')

# 人脸识别的连续帧数为15帧

mark

图片合成视频

import cv2
img = cv2.imread('image1.jpg')
imgInfo = img.shape
# 宽度和高度信息
size = (imgInfo[1],imgInfo[0])
print(size)

# windows下使用DIVX
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
# VideoWriter 参数1: 写入对象 参数
videoWrite = cv2.VideoWriter('pic2video.avi',fourcc,5,size,True)
# 写入对象 1 file name
# 2 可用编码器 3 帧率 4 size
for i in range(1,11):
    fileName = 'image'+str(i)+'.jpg'
    img = cv2.imread(fileName)
    videoWrite.write(img) # 写入方法 1 jpg data
print('end!')

这里注意报错:

OpenCV: FFMPEG: tag 0xffffffff/'' is not found (format 'mp4 / MP4 (MPEG-4 Part 14)')'

这个报错是因为windows下只支持DIVX

警告:

OpenCV: FFMPEG: tag 0x58564944/'DIVX' is not supported with codec id 13 and format 'mp4 / MP4 (MPEG-4 Part 14)'

不影响生成mp4的视频,但是因为DIVX原生支持的是avi格式。生成avi格式无警告。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Small Code

【Python | TensorBoard】用 PCA 可视化 MNIST 手写数字识别数据集

Principal component analysis (PCA) is a statistical procedure that uses an orth...

4308
来自专栏jeremy的技术点滴

tensorflow学习笔记_03

3074
来自专栏机器学习算法原理与实践

支持向量机原理(四)SMO算法原理

  在SVM的前三篇里,我们优化的目标函数最终都是一个关于$\alpha$向量的函数。而怎么极小化这个函数,求出对应的$\alpha$向量,进而求出分离超平面我...

512
来自专栏机器之心

资源 | 从VGG到ResNet,你想要的MXNet预训练模型轻松学

1854
来自专栏专知

100+中文词向量,总有一款适合你

1864
来自专栏新智元

TensorFlow官方力推、GitHub爆款项目:用Attention模型自动生成图像字幕

【新智元导读】近期,TensorFlow官方推文推荐了一款十分有趣的项目——用Attention模型生成图像字幕。而该项目在GitHub社区也收获了近十万“点赞...

1182
来自专栏大数据挖掘DT机器学习

如何用TensorFlow和TF-Slim实现图像标注、分类与分割

本文github源码地址: 在公众号 datadw 里 回复 图像 即可获取。 笔者将和大家分享一个结合了TensorFlow和slim库的小应用,来实现...

4114
来自专栏进击的程序猿

如何构建一个简单的神经网络如何构建一个简单的神经网络

最近报名了Udacity的深度学习基石,这是介绍了第二部分神经网络入门,第一篇是线性回归背后的数学. 本文notebook的地址是:https://githu...

963
来自专栏Coding迪斯尼

从零开始构造一个识别猫狗图片的卷积网络

在深度学习的项目实践中,往往会遇到两个非常难以克服的难题,一是算力,要得到精确的结果,你需要设计几千层,规模庞大的神经网络,然后使用几千个GPU,把神经网络布置...

1062
来自专栏大数据挖掘DT机器学习

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

我们一般用深度学习做图片分类的入门教材都是MNIST或者CIFAR-10,因为数据都是别人准备好的,有的甚至是一个函数就把所有数据都load进来了,所以跑起来...

4275

扫码关注云+社区