DAY2

91 阅读12分钟

函数

函数的定义:

函数是编程中一个非常重要的概念,它具有特定功能的代码块 可以在程序中多次被调用。 函数通过接受输入的值(作为参数),执行特定的操作,并返回输出(返回值)

为什么要使用函数

  1. 代码可以重复使用
  2. 提高代码的可读性
  3. 简化复杂性:

可以把复杂的操作拆分成多个小步骤,每一个步骤用函数。

函数的组成

  1. 定义函数 def (define)
  2. 函数名(小写开头,见名知意,小驼峰,可以下划线)

def carBrand

def student_name

  1. 参数( ):
  2. 函数体 -> 要执行的代码块、记得缩紧
  3. 返回值 return (return 后面接的什么就返回什么)
# 函数举例

def super_calculator(a, b, c):
    d = a * b / c
    return d
def greeting_bot(name):
    print("Hello " + name)
    return "大帅哥"

a = greeting_bot('杨家瑞')

print(a)
#
# def greeting_bot(name):
#     print("Hello " + name)
#     return "大帅哥"
#
# a = greeting_bot('杨家瑞')
#
# print(a)

# 函数的参数(位置参数、关键子参数)

def bmi_calculator(height,weight, name, age):
    bmi_value = weight / height**2
    print(f'{name}的年龄是{age},她/他的BMI值是{bmi_value}')
    return bmi_value


bmi_calculator(1.8, 100, age=6, name='杨家瑞')
bmi_calculator(1.8, 71, age=18, name='周子睿')
bmi_calculator(1.73, 70, age=30, name='hua')

面向对象编程 - OOP 在python里面,一切皆是对象 class class Dog class School

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

局部变量:定义在方法中的变量,只作用于当前实例的类。

实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。

1. 语音识别技术 (STT)

Speech To Text

介绍STT的定义、工作原理及应用

1. STT的定义

STT(Speech-to-Text)技术,中文通常称为“语音识别”或“语音转文字”。它的核心功能是将用户输入的语音信号转换为相应的文本形式。这一技术在人机交互领域中扮演着至关重要的角色,使得用户能够通过语音指令与设备进行沟通。

2. STT的工作原理

STT技术的工作原理可以大致分为以下几个步骤:

  1. 语音信号采集

    • 语音信号通过麦克风被捕捉为一段连续的音频信号,这些信号通常是以模拟形式存在的。
  2. 语音信号预处理

    • 预处理包括消除噪声、语音信号分帧(将语音信号划分为小段)和特征提取等步骤。
    • 特征提取是将原始的音频信号转化为更容易分析的特征向量,这些特征代表了音频信号的某些特性,如频率、幅度等。
  3. 声学模型和语言模型

    • 声学模型:将提取的语音特征与对应的音素(语音的最小单位)进行匹配。这是STT系统中的核心部分,通常使用深度学习模型来训练。
    • 语言模型:结合语言的语法和结构,来优化语音识别的准确性。例如,它可以帮助STT系统选择更合适的词汇组合,减少识别错误。
  4. 解码与文本输出

    • 将声学模型和语言模型的输出结合,使用解码算法(例如Viterbi算法)将音素序列转化为单词序列。
    • 最终输出的结果是识别到的文本形式。

3. STT的应用场景

STT技术的应用非常广泛,涵盖了以下几个主要场景:

  1. 语音助手

    • 例如Apple的Siri、Google Assistant和Amazon Alexa。这些语音助手通过STT技术来理解用户的语音指令,并执行相应的操作,如查询天气、设置闹钟、发送消息等。
  2. 实时字幕

    • 在会议或网络视频中,STT可以帮助自动生成字幕,方便听障人士或语言不通的观众理解内容。
  3. 语音输入

    • 语音输入可以替代传统的键盘输入,尤其是在需要快速记录或者操作不便的情况下,语音输入显得更加高效。
  4. 自动电话系统

    • 客服机器人可以通过STT技术理解客户的语音请求并提供相应的帮助,这减少了人工客服的压力并提高了效率。
  5. 智能家居

    • STT技术在智能家居系统中同样应用广泛,用户可以通过语音控制家中的灯光、空调、电视等设备,提升生活的便利性。

4. STT技术的挑战与发展

尽管STT技术已经非常先进,但它仍然面临一些挑战,例如:

  • 噪声干扰:在嘈杂环境中,语音信号容易受到干扰,影响识别的准确性。
  • 口音与方言:不同的口音或方言可能导致识别错误,尤其是当STT模型在训练时未包含这些特征。
  • 语境理解:STT技术仅负责语音到文本的转换,不包含对语义的深入理解,这可能导致某些上下文相关的识别错误。

未来的发展方向可能包括:

  • 更智能的语言模型:通过更强大的深度学习模型,使STT技术能够更好地理解语义,并结合上下文提供更加精准的识别。
  • 多模态融合:结合图像、手势等其他输入方式,使STT成为人机交互中的一个环节,提升交互的自然性和准确性。

代码示例:

from vosk import Model, KaldiRecognizer
import pyaudio

def recognize_speech():
    model = Model("vosk-model-small-cn-0.22")
    recognizer = KaldiRecognizer(model, 16000)
    mic = pyaudio.PyAudio()
    stream = mic.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=8192)
    stream.start_stream()

    print("请说话...")

    while True:
        data = stream.read(4096)
        if recognizer.AcceptWaveform(data):
            result = recognizer.Result()
            text = eval(result)['text']
            print(f"你说的是: {text}")
            return text

recognize_speech()

讲解:

  • Vosk: 使用Vosk库来进行语音识别,加载中文模型并实时识别语音。
  • pyaudio: 通过pyaudio获取麦克风输入,并将其传递给识别器。

2. 语音合成技术 (TTS)

解释TTS的定义及其应用场景

1. TTS的定义

TTS(Text-to-Speech),即“文本转语音”,是一种能够将书面文本转换为口语的技术。TTS技术使得计算机或其他设备能够“说话”,将输入的文字信息转化为语音输出。这项技术是人工智能和自然语言处理的重要组成部分。

2. TTS的工作原理

TTS的工作原理通常分为以下几个主要步骤:

  1. 文本分析

    • 分词与标注:首先,TTS系统对输入的文本进行分词,将连续的文本分割为词语或短语。然后,系统会进行词性标注(POS tagging),确定每个词在句子中的语法角色,例如名词、动词、形容词等。
    • 文本预处理:系统会对文本进行预处理,例如处理数字、符号、缩写等。比如,将“12”转化为“十二”或“twelve”,视具体语言和场景而定。
  2. 音素序列生成

    • 音素映射:TTS系统将文本中的每个词映射为对应的音素序列。音素是语音的最小单位,它代表了语言中最小的区别声音的元素。
    • 音节划分:系统根据语言的语法规则和文本中的标点符号,对音素进行划分,形成连贯的音节和句子。
  3. 语音波形生成

    • 合成模型:有多种方法可以将音素序列转化为语音波形,包括基于拼接(Concatenative Synthesis)、基于参数(Parametric Synthesis)、以及基于深度学习的WaveNet模型等。
    • 拼接合成:在拼接合成方法中,系统会从一个预先录制的语音库中选取音素的录音,并将它们拼接在一起,形成连贯的语音。
    • 参数合成:在参数合成方法中,系统会根据音素的特征参数(如频率、时长、音高等)生成对应的语音波形。这种方法生成的语音更加平滑,但可能缺少自然感。
  4. 语音输出

    • 最终的语音波形会通过音频输出设备(如扬声器或耳机)播放,用户即可听到与输入文本相对应的语音。

3. TTS的应用场景

TTS技术在现代社会中有着广泛的应用,以下是一些典型的场景:

  1. 语音助手

    • 语音助手(如Apple的Siri、Google Assistant、Amazon Alexa等)通过TTS技术,将系统的响应内容转换为语音,提供更加自然和人性化的用户体验。
  2. 电子书朗读

    • TTS技术广泛应用于电子书的朗读功能。用户可以选择让设备朗读电子书,解放双手和眼睛,方便在开车、运动、做家务等场景下继续阅读。
  3. 导航系统

    • 在车载导航系统中,TTS技术被用于实时播报路线、交通状况等信息。这比传统的预录制语音更加灵活,可以生成针对不同道路和地名的实时语音指引。
  4. 信息播报系统

    • 机场、火车站、地铁等场所的自动信息播报系统使用TTS技术来动态生成和播报乘客信息,如航班状态、登机口信息、列车时刻等。
  5. 教育和学习

    • TTS技术在教育领域有广泛的应用,特别是在帮助有阅读障碍的学生或盲人用户上。例如,TTS可以朗读教科书内容,帮助学生更好地理解和掌握知识。
  6. 社交和通信

    • 在社交媒体或通信应用中,TTS可以用来朗读接收到的文本信息,或者将用户的文字消息转换为语音进行发送,增强用户互动的趣味性。
  7. 智能客服系统

    • 在智能客服系统中,TTS技术用于将客服机器人的回复以语音形式呈现给客户,使得沟通更加自然和高效。

4. TTS技术的挑战与发展

尽管TTS技术已经取得了显著的进展,但它仍然面临一些挑战:

  • 语音自然度:虽然TTS技术可以生成非常清晰的语音,但如何使其更具自然感和情感表达仍是一个难题。
  • 多语言支持:为不同的语言构建高质量的TTS模型需要大量的语料和复杂的语言处理技术。
  • 实时性:在某些应用场景下,TTS系统需要在极短的时间内生成语音,这对系统的性能提出了较高的要求。

未来的发展方向可能包括:

  • 个性化语音:用户可以定制TTS系统的发音人,使得生成的语音与用户的个性化需求更加匹配。
  • 情感表达:通过引入更多的语音参数,TTS系统将能够更好地表达不同的情感,从而使合成的语音更加生动和有感染力。
  • 更高效的模型:利用深度学习和其他先进的人工智能技术,进一步提升TTS系统的生成速度和语音质量。

代码示例:

from aip import AipSpeech
import os

APP_ID = '你的 APP_ID'
API_KEY = '你的 API_KEY'
SECRET_KEY = '你的 SECRET_KEY'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

def synthesize_speech(text):
    result = client.synthesis(text, 'zh', 1, {
        'vol': 5,
        'spd': 5,
        'pit': 5,
        'per': 4
    })

    if not isinstance(result, dict):
        output_file = 'output.mp3'
        with open(output_file, 'wb') as f:
            f.write(result)
        os.system(f"mpg321 {output_file}")
    else:
        print("语音合成失败", result)

synthesize_speech("你好,这是一个测试。")

讲解:

  • AipSpeech: 使用百度的TTS API进行语音合成,设置文本、语速、音调和音量。
  • mpg321: 播放生成的音频文件。

3. 控制拾音

介绍如何通过代码控制麦克风和音频采集

代码示例:

import pyaudio

def setup_microphone():
    mic = pyaudio.PyAudio()
    stream = mic.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, frames_per_buffer=8192)
    print("麦克风已设置完成")
    return stream

stream = setup_microphone()

讲解:

  • pyaudio: 通过pyaudio库设置麦克风参数,如采样率、通道数等。

4. 存储音频文件

讨论音频文件格式,并保存录制的音频

代码示例:

import wave
import pyaudio

def record_audio(filename):
    mic = pyaudio.PyAudio()
    stream = mic.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, frames_per_buffer=8192)
    print("开始录音...")

    frames = []
    for _ in range(0, int(44100 / 8192 * 5)):  # 录制5秒
        data = stream.read(8192)
        frames.append(data)

    stream.stop_stream()
    stream.close()
    mic.terminate()

    wf = wave.open(filename, 'wb')
    wf.setnchannels(1)
    wf.setsampwidth(mic.get_sample_size(pyaudio.paInt16))
    wf.setframerate(44100)
    wf.writeframes(b''.join(frames))
    wf.close()

record_audio('recording.wav')

讲解:

  • wave: 读取WAV格式的音频文件。
  • pyaudio: 使用pyaudio播放音频文件。

6. 调用API

介绍API及其使用方法,展示如何调用外部服务

代码示例:

import requests

def call_api(url, data):
    response = requests.post(url, json=data)
    if response.status_code == 200:
        print("API调用成功:", response.json())
    else:
        print("API调用失败,状态码:", response.status_code)

api_url = "https://api.example.com/data"
data = {"key": "value"}
call_api(api_url, data)

讲解:

  • requests: 通过Python的requests库调用HTTP API,发送POST请求并处理响应。

7. STT中文模型

解析模型处理语音识别

代码示例:

from vosk import Model, KaldiRecognizer

model = Model("vosk-model-small-cn-0.22")
recognizer = KaldiRecognizer(model, 16000)

print("中文模型加载完成,可以开始识别")

讲解:

  • Vosk: 使用Vosk模型进行中文语音识别,展示如何加载和初始化模型。

8. LLMs语言模型应用

实践应用LLMs模型应用

代码示例:

import openai

openai.api_key = "你的API_KEY"

def query_openai(prompt):
    response = openai.Completion.create(
        engine="text-davinci-003",
        prompt=prompt,
        max_tokens=100
    )
    print("OpenAI回应:", response.choices[0].text.strip())

query_openai("解释机器学习是什么?")

讲解:

  • openai: 调用OpenAI API实现LLM模型的应用,通过文本生成内容。