当前位置:首页 » 《随便一记》 » 正文

人工智能------>第四天,深度学习,人工神经网络,卷积神经网络,opencv,音频采集、播放,百度AI平台的使用_旅人520的博客

20 人参与  2021年12月22日 16:49  分类 : 《随便一记》  评论

点击全文阅读


深度学习


    以神经网络算法为基础的机器学习

    深度学习算法:
        BP神经网络
        卷积神经网络
        循环神经网络
        基于注意的循环神经网络
        对抗神经网络

   神经网络
        脑神经网络


    人工神经网络


        一堆函数的网络

 

卷积神经网络


        使用卷积运算作为神经元函数的神经网络,我们称之为卷积神经网络

 

        使用范围:
            二维的图形特征提取

        卷积神经网络的结构
            常用层
                输入层:数据的输入
                关联权重层(*可以加,可以不加)
                卷积层:实现卷积过程
                池化层:对主要特征降维
                全连接层:将特征图全连接
                输出层:获取输出结果

            其他层
                正则化层
                高级层(激活函数/其他的函数)

        超参数:在机器学习中,需要反复迭代求得的参数,称之为超参数。

        卷积层:
            卷积运算:
                作用:
                    1.特征提取
                    2.特征降维

            卷积核:
                卷积核:也叫过滤器

                卷积核的移动
                    卷积核在输入矩阵中移动的格子数,称之为步长。
                    步长 >= 1

                卷积核的大小
                    卷积核的大小也是一个超参数,一般会选择奇数行列。

                卷积核的内容
                    卷积核的内容也需要反复迭代求得。

                常见的卷积核
                    ->水平边缘检测滤波器
                    ->垂直边缘检测滤波器
                    ->增强图片中心滤波器

            输入数据于卷积核不匹配的问题:
                填充,填充的大小也是超参数。
                填充的过程:
                    在输入矩阵外围填充一圈0

                    填充大小为p = (f - 1)/2

                    f为卷积核的大小


            一次卷积后,卷积得到的输出矩阵(特征图)的大小:
                s:步幅
                f:卷积核的大小
                n:输入矩阵的大小
                p:填充


                输出矩阵的大小为:(n + 2p -f)/s + 1

                n    f
                5x5 3x3 s=1 p=0         (5+0-3)/1 + 1 =    3

                5x5 3x3 s=2 p=1         (5+2-3)/2 + 1 = 3 
            多通道卷积如何实现:
                日常生活中,图片都是彩色的。是RGB图片。
                320*240
                RGB24:一个像素点占24bit位:
                    R:G:B : 8:8:8

                320 * 240 * 3

                按RGB不同的通道,就能得到3个像素信息矩阵。

                然而对彩色图片的卷积,就变成了对三个不同通道的矩阵进行卷积。我们把这种卷积方式称之为多通道卷积。

                如何处理多通道卷积:
                    此时就需要对不同通道使用不同的卷积核,而多个卷积核我们放在同一层面上进行卷积时,通常将其放入同一个卷积核组。
                    真实情况是会使用不同的卷积核组分别对多通道数据进行卷积。

                多通道卷积结果的运算:
                    每个卷积核组卷积完成后的输出,等同于单通道卷积
                    但是输出多个特征图,特征图的个数取决于卷积核组的个数。


                单通道卷积案例:
                    n:32*32 = 1024
                    s : 1
                    f : 5
                    p : 0

                    (n + 2p -f)/s + 1 = 27/1 + 1  = 28

                    28 * 28 = 784
                    2*2的采样控件
                    14 * 14 = 196

        导致模型失败的原因:
            过拟合:
                模型需要的特征值过于详细,导致模型没有泛化能力。
                案例:
                    白马非马
                    白天鹅不是天鹅

            欠拟合:
                模型提取的特征值太少,导致识别错误。
                案例:
                    指鹿为马


        池化层:(采样)
            池化的作用:
                1.池化层在CNN中,可以用来减小尺寸、提高运算速度以及减小噪声影响,让各特征更具有健壮性。
                2.降低网络训练参数及模型的过拟合程度
            什么是池化:
                池化(Pooling)又称为下采样,通过卷积层获得图像的特征后,理论上可以直接使用这些特征训练分类器(如softmax)。但是,这样做将面临巨大的计算量的挑战,而且容易产生过拟合的现象。
            池化的手段:
                ->最大池化
                    在池化区域中,取最大值,代表该区域的特征值
                ->均值池化
                    在池化区域中,取平均值值,代表该区域的特征值
                ->随机池化
                    在池化区域中,随机取一个值,代表该区域的特征值

            池化区域的大小:是反复迭代求得的。

        激活函数:
            什么是激活函数:
                sigmod
                Tanh函数
                ReLU函数

            激活函数的作用:
                卷积神经网络与标准神经网络类似,为了保证其非线性,也需要使用激活函数,即在卷积运算后,把输出值另加偏移量,输入到激活函数,然后作为下一层的输入
        
        全连接:
            进行多通道卷积/单通道卷积之后,会得到一些张量矩阵。将多维张量连接成一个一维张量,这个过程称之为全连接。


        常见的卷积神经网络结构:
            Le-Net5:串联型卷积神经网络

            GoogLeNet:Inception模型:并联型卷积神经网络


        卷积神经网络的目的:
            1.得到最优的神经网络结构
            2.得到最优的超参数组
            3.解决特征提取和特征降维的问题

opencv


    图形图像处理库,C++、Python等编程语言的接口

    如何安装:
        pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/  

使用opencv采集视频并且进行人脸检测定位 

        import cv2 as cv

        #打开系统中默认第一个摄像头类似于linux下打开/dev/video0
        cap = cv.VideoCapture(0)
        path = "D:\\Program Files\\Python36\\Lib\\site-packages\\cv2\\data\\"

        face_class = cv.CascadeClassifier(path+"haarcascade_frontalface_default.xml")
        while True:
            #读取摄像头采到的数据
            ret,img = cap.read()
            #将采集到的彩色图片转换为灰度图片
            img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
            faces = face_class.detectMultiScale(img_gray, 1.3, 5)
            for (x,y,w,h) in faces:
                cv.rectangle(img,(x,y),(x+w,y+h),(0,0,255),3)
            #想要确保图片显示没有问题,建议先创建一个namedWindow
            cv.namedWindow("pic",cv.WINDOW_AUTOSIZE)
            cv.imshow("video",img)
            #判断是否按下q键
            if cv.waitKey(1) & 0xFF == ord('q'):
                break 
        #销毁显示的所有窗体
        cv.destroyAllWindows()
        #释放掉创建出来的摄像头对象
        cap.release()

使用python实现录音功能


    库:pyaudio
    安装:pip install pyaudio    

例子:

    import pyaudio
    import wave

    #一个管理PyAudio实例的说明(每一帧的大小)
    CHUNK = 1024
    #采集样例的位深度
    FORMAT = pyaudio.paInt16
    #通道数
    CHANNELS = 2
    #样例的速率
    RATE = 44100
    #录音时间
    RECORD_SECONDS = 5
    WAVE_OUTPUT_FILENAME = "output.wav"

    p = pyaudio.PyAudio()

    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)

    print("* recording")

    frames = []

    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
        data = stream.read(CHUNK)
        frames.append(data)

    print("* done recording")

    stream.stop_stream()
    stream.close()
    p.terminate()

    wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b''.join(frames))
    wf.close()

python 语音播放


    语音播放包 pygame
    包的安装:pip install pygame
    例子:

        import pygame
        import time

        #音频初始化
        pygame.mixer.init()
        #加载音频
        pygame.mixer.music.load("auido.mp3")
        #开始播放
        pygame.mixer.music.play()
        #等待播放(播放的过程)
        time.sleep(3)
        #停止播放
        pygame.mixer.music.stop()

        #注意:延时一定要有,不然听不到声音

百度AI平台的使用


    人脸对比


        EasyDL

"""
EasyDL 图像分类 调用模型公有云API Python3实现
"""

import json
import base64
import requests
"""
使用 requests 库发送请求
使用 pip(或者 pip3)检查我的 python3 环境是否安装了该库,执行命令
  pip freeze | grep requests
若返回值为空,则安装该库
  pip install requests
"""


# 目标图片的 本地文件路径,支持jpg/png/bmp格式
IMAGE_FILEPATH = "1.jpg"

# 可选的请求参数
# top_num: 返回的分类数量,不声明的话默认为 6 个
PARAMS = {"top_num": 2}

# 服务详情 中的 接口地址
MODEL_API_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/classification/mycheckface"

# 调用 API 需要 ACCESS_TOKEN。若已有 ACCESS_TOKEN 则于下方填入该字符串
# 否则,留空 ACCESS_TOKEN,于下方填入 该模型部署的 API_KEY 以及 SECRET_KEY,会自动申请并显示新 ACCESS_TOKEN
ACCESS_TOKEN = ""
API_KEY = "gPhZUzA3yk70zSplKKhw5Itb"
SECRET_KEY = "GlSQaRcgDlmALq2CkTUD1XbAA9QanCYb"


print("1. 读取目标图片 '{}'".format(IMAGE_FILEPATH))
with open(IMAGE_FILEPATH, 'rb') as f:
    base64_data = base64.b64encode(f.read())
    base64_str = base64_data.decode('UTF8')
print("将 BASE64 编码后图片的字符串填入 PARAMS 的 'image' 字段")
PARAMS["image"] = base64_str


if not ACCESS_TOKEN:
    print("2. ACCESS_TOKEN 为空,调用鉴权接口获取TOKEN")
    auth_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials"               "&client_id={}&client_secret={}".format(API_KEY, SECRET_KEY)
    auth_resp = requests.get(auth_url)
    auth_resp_json = auth_resp.json()
    ACCESS_TOKEN = auth_resp_json["access_token"]
    print("新 ACCESS_TOKEN: {}".format(ACCESS_TOKEN))
else:
    print("2. 使用已有 ACCESS_TOKEN")


print("3. 向模型接口 'MODEL_API_URL' 发送请求")
request_url = "{}?access_token={}".format(MODEL_API_URL, ACCESS_TOKEN)
response = requests.post(url=request_url, json=PARAMS)
response_json = response.json()
response_str = json.dumps(response_json, indent=4, ensure_ascii=False)
print("结果:{}".format(response_str))
print(response_json['results'][0]['name'])

语音合成

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '24873305'
API_KEY = 'uzWDokZaiYxGTH5Sn1UKnN85'
SECRET_KEY = 'H3l5DBSfGbq7QsFgHAfPri04azPWVITs'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

result  = client.synthesis('你这黑厮,甚是嚣张,不知是烧窑的还是卖炭的', 'zh', 1, {
    'vol': 8, 'per':3, 'spd':4,
})

# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
    with open('audio.mp3', 'wb') as f:
        f.write(result)

语言识别

from aip import AipSpeech

""" 你的 APPID AK SK """
APP_ID = '24873305'
API_KEY = 'uzWDokZaiYxGTH5Sn1UKnN85'
SECRET_KEY = 'H3l5DBSfGbq7QsFgHAfPri04azPWVITs'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 读取文件
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 识别本地文件
ret = client.asr(get_file_content('audio.wav'), 'wav', 16000, {
    'dev_pid': 1737,
})

print(ret['result'][0])

点击全文阅读


本文链接:http://zhangshiyu.com/post/31962.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1