知识点练习对话辅助器(简易版)

知识点练习对话辅助器(简易版)

一、概述

在专业面试的时候经常会有人(比如说我自己=_=)知识点理解的很好,且在平时中也能够比较清晰的讲述出来。但是到了面试的时候,在面试官的注视下,经常会因为紧张啥的造成忘词,头脑一片空白的情况,最终导致了面试的体验不是很好。因此,基于这种问题的考虑,我就在想,能不能自己整一个虚拟的面试官来模拟面试,减少面试紧张等情况的出现。当然了,目前是有类似的公司来专门做AI面试的开发的,但是那得花钱啊,对于我们这群囊中羞涩的年轻人来说性价比确实不是太高。因此,我打算自己试试看能不能实现一个简易的辅助器,来帮助我们熟悉专业面试,提高offer获取的概率(当然了,由于本人水平有限,这个简易版本的辅助器不一定好用,也不一定适合每个人,如果各位大佬有更好的想法或实现,可以提出来,大家可以共同探讨一下,以使得更好的帮助到每个人)。

二、相关配置

代码由python语音进行编写,目前在win10下可以运行通过
具体的运行环境如下:

python 3.6.2
pyaudio 0.2.11
speechrecognition 3.8.1

整个 “知识点练习对话辅助器” 的目录文件如下:

知识点练习对话辅助器(简易版)
其中, itemBank是存放的检索库,其每个子文件代表一类的知识点,比如说 ‘computer_Network’ 则代表计算机网络的知识

; 三、方法实现

整个 “知识点练习对话辅助器” 的实现流程如下所示:

知识点练习对话辅助器(简易版)

从流程图中我们可以看到,对于整个《知识点练习对话助手》,我们可以简单地将其分为三类操作:

[En]

As we can see from the flow chart, for the whole “knowledge point practice dialogue assistant”, we can simply divide it into three types of operations:

① 用户叙述问题;
② 计算机根据用户的讲述的内容选择相应的题库,并选出题目;
③ 通过将检索到的问题题目进行语音播报。

其中,为了能够花最少的时间来实现大致的效果,我们简化了部分模块的设计。对于语音识别,我们采用了百度AI的语音识别来理解用户的问题(这一部分如果写深了算是一个比较大的部分了,由于个人水平有限,就不自己重头写了);而对于题库以及问题检索,我取了个巧,直接将题库整理到 .txt 的文件下(当然了,我因为时间不是很充裕,就没整理相关的题库了),然后随机从题库中随机抽题来对用户进行提问。

四、实现效果

知识点练习对话辅助器(简易版)

Note:可能因为我是拿着手机录的屏,手机麦克风离我太近了,导致我的声音远大于电脑声音,建议各位自我调节合适的音量食用

五、可扩展性探讨

1.整体的框架可以更换下,现在的框架太简单了
2.用户讲述时语音识别的等待机制还需要优化
3.语音识别以及AI的可训练性还有优化的空间(需要的相关知识较多,不建议轻易触碰)
4.问题的检索可以改进下,或许可以加入爬虫全网检索。同时,我们也可以加入问题答案这个选项,使大家不需要再去书中或网上找问题的答案
5.系统语音的播报太刻板了,可以考虑更换下声线,使得我们在背书的时候心情愉悦
6.可以考虑设计个合适的UI界面,模拟面试官的形象轮廓,以提高身临其境的感受

六、实现代码

Github: https://github.com/DeepVegChicken/Learning-InterviewPractice_AIDS

import os
import time
import random
import winsound
import win32com.client
from aip import AipSpeech
import speech_recognition as sr

BAIDU_APP_ID = 'https://openapi.baidu.com/oauth/2.0/token?'
BAIDU_API_KEY = 'vyYLov63W6x33nIPvwVdLLsX'
BAIDU_SECRET_KEY = 'EzgQoFF9xp62SeGCXCBaD8FjWNxvl9kZ'
API_Input_Speech = AipSpeech(BAIDU_APP_ID, BAIDU_API_KEY, BAIDU_SECRET_KEY)

API_Output_Speech = win32com.client.Dispatch("SAPI.SPVOICE")

fileLoc_CN = "itemBank/computer_Network/items.txt"
fileLoc_DS = "itemBank/data_Structure/items.txt"
fileLoc_DB = "itemBank/dataBase/items.txt"
fileLoc_LI = "itemBank/language_Infrastructure/c++.txt"
fileLoc_OS = "itemBank/operating_System/items.txt"

def textToVoice(text_data):
    API_Output_Speech.Speak(text_data)
    winsound.PlaySound(text_data, winsound.SND_ASYNC)

def voiceToText(audio_data):
    result = API_Input_Speech.asr(audio_data, 'wav', 16000, {'dev_pid': 1536})
    try:
        text = result['result'][0]
    except Exception as e:
        print(e)
        text = ""
    return text

def get_Message():

    r = sr.Recognizer()

    mic = sr.Microphone(sample_rate=16000)

    print("开始")
    with mic as source:
        r.adjust_for_ambient_noise(source)
        audio = r.listen(source)

    audio_data = audio.get_wav_data()

    return voiceToText(audio_data)

def language_Infrastructure():
    with open(fileLoc_LI, mode='r', encoding='utf-8') as f:
        itemLines = f.read().splitlines()

    text = ""
    textToVoice("开始")
    while True:
        message = get_Message()
        if message == "返回主菜单":
            break
        elif message == "下一题":
            text = random.choice(itemLines)
            textToVoice(text)
        elif message == "再说一遍题目":
            textToVoice(text)
        else:
            textToVoice("听不清,请再说一遍吧")

def data_Structure():
    with open(fileLoc_DS, mode='r', encoding='utf-8') as f:
        itemLines = f.read().splitlines()

    text = ""
    textToVoice("开始")
    while True:
        message = get_Message()
        if message == "返回主菜单":
            break
        elif message == "下一题":
            text = random.choice(itemLines)
            textToVoice(text)
        elif message == "再说一遍题目":
            textToVoice(text)
        else:
            textToVoice("听不清,请再说一遍吧")

def operating_System():
    with open(fileLoc_OS, mode='r', encoding='utf-8') as f:
        itemLines = f.read().splitlines()

    text = ""
    textToVoice("开始")
    while True:
        message = get_Message()
        if message == "返回主菜单":
            break
        elif message == "下一题":
            text = random.choice(itemLines)
            textToVoice(text)
        elif message == "再说一遍题目":
            textToVoice(text)
        else:
            textToVoice("听不清,请再说一遍吧")

def computer_Network():
    with open(fileLoc_CN, mode='r', encoding='utf-8') as f:
        itemLines = f.read().splitlines()

    text = ""
    textToVoice("开始")
    while True:
        message = get_Message()
        if message == "返回主菜单":
            break
        elif message == "下一题":
            text = random.choice(itemLines)
            textToVoice(text)
        elif message == "再说一遍题目":
            textToVoice(text)
        else:
            textToVoice("听不清,请再说一遍吧")

def dataBase():
    with open(fileLoc_DB, mode='r', encoding='utf-8') as f:
        itemLines = f.read().splitlines()

    text = ""
    textToVoice("开始")
    while True:
        message = get_Message()
        if message == "返回主菜单":
            break
        elif message == "下一题":
            text = random.choice(itemLines)
            textToVoice(text)
        elif message == "再说一遍题目":
            textToVoice(text)
        else:
            textToVoice("听不清,请再说一遍吧")

def main():
    while True:
        textToVoice("请选择你要学习的内容")
        print("\n请选择你要学习的内容")
        select_itemBank = get_Message()
        os.system("cls")
        if select_itemBank == "关机":
            break

        elif select_itemBank == "语法基础":
            textToVoice("已成功进入语法基础的学习")
            language_Infrastructure()

        elif select_itemBank == "数据结构":
            textToVoice("已成功进入数据结构的学习")
            data_Structure()

        elif select_itemBank == "操作系统":
            textToVoice("已成功进入操作系统的学习")
            operating_System()

        elif select_itemBank == "计算机网络":
            textToVoice("已成功进入计算机网络的学习")
            computer_Network()

        elif select_itemBank == "数据库":
            textToVoice("已成功进入数据库的学习")
            dataBase()

        else:
            textToVoice("听不清,请再说一遍吧")

if __name__ == '__main__':
    main()
    textToVoice("已成功关机")

Original: https://blog.csdn.net/qq_41994220/article/details/124462828
Author: 玄学关门大弟子
Title: 知识点练习对话辅助器(简易版)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/515362/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球