13- OpenCV+TensorFlow 入门人工智能图像处理

作者: 天涯明月笙 | 来源:发表于2018-05-13 20:35 被阅读230次

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

    机器学习是什么?

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

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

    深度学习:

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

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

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

    区分ios和安卓系统?

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

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

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

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

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

    单词的个数 num判决 分类器

    Adaboost分类器:

    markmark

    SVM支持向量机:

    markmark

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

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

    Haar特征:

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

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

    以x2的haar特征为例:

    markmark markmark

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

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

    四个指针相加减。

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

    markmark

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

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

    markmark

    Adaboost分类器

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

    • 样本 & 特征 & 分类器

    haar特征 + Adaboost 实现人脸识别

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

    Hog特征 + svm小狮子识别

    markmark

    Hog特征计算

    markmark

    一系列的窗体: 蓝色矩形框,红色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帧
    
    markmark

    图片合成视频

    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格式无警告。

    相关文章

      网友评论

      • 224509954572:你好请教下,一个视频可以分解出多少张图片?
        妖怪啊:这个要看视频帧率

      本文标题:13- OpenCV+TensorFlow 入门人工智能图像处理

      本文链接:https://www.haomeiwen.com/subject/nqyerftx.html