回到顶部 回到顶部

用100行代码体验ChatGPT音箱 简单

头像 微笑的rockets 2023.03.01 347 3

随着ChatGPT如火如荼的讨论,我们作为科技爱好者也禁不住手痒痒,想做点什么。

于是我问了下ChatGPT该怎么做

image.png

 

嗯,大致了解了。

那我们就开干吧。

 

更新一下,OpenAI最新发布了GPT3.0的模型的api,mind+的用户库OpenAI也及时更新了。

注意:由于openai政策的变化,api的访问不能直接到达服务器。可能无法正常使用。

正在寻求解决方案。

步骤1 打开最新的mind+

步骤2 选择python模式

步骤3 添加行空板模块

步骤4 添加百度语音模块

步骤5 添加用户库OpenAI模块

步骤6 图形化编程

步骤7 连接行空板

步骤8 运行代码

步骤9 设计外壳

步骤10 打印外壳

步骤11 组装行空板和音箱

步骤12 联网

步骤13 开始使用

材料清单

  • 行空板 X1 链接
  • usb喇叭或蓝牙音箱 X1
代码
#  -*- coding: UTF-8 -*-
#注意填入百度云AI的秘钥和OpenAI的api key
# MindPlus
# Python
from unihiker import Audio
from aip import AipSpeech
from unihiker import GUI
import openai
import time


def synthesis(text):
  try:
    return aip_speech_client.synthesis(text,"zh", 1, aip_synthesis_option)
  except Exception:
    return aip_speech_client.synthesis(text,"zh", 1)

def saveAudio(src):
  try:
    with open(src, "wb") as f:
      return f.write(aip_synthesis_result)
  except FileNotFoundError as e:
    print(f"[文件不存在] {e}")
    return None
  except TypeError as e:
    print(f"[输入类型异常] {e}")
    return None
  except BaseException as e:
    print(f"[通用异常] {e}")
    return None

def readAudio(src):
  try:
    with open(src, "rb") as f:
      return f.read()
  except FileNotFoundError as e:
    print(f"[文件不存在] {e}")
    return None
  except TypeError as e:
    print(f"[输入类型异常] {e}")
    return None
  except BaseException as e:
    print(f"[通用异常] {e}")
    return None

def asr(b, f, r):
  aip_asr_result = aip_speech_client.asr(b, f, r)
  if aip_asr_result["err_no"] == 0:
    return " ".join(aip_asr_result["result"])
  else:
    print(aip_asr_result["err_no"] + " " +aip_asr_result["err_msg"])
    return None

# 事件回调函数
def button_click1():
    global flag
    flag = 1


u_gui=GUI()
u_audio = Audio()
aip_speech_client = AipSpeech("undefined", "undefined", "undefined") #填入百度AI语音合成的appID,API Key和Secret Key
aip_synthesis_option = {"aue": 6, "per": 3, "spd": 6, "pit": 5, "vol": 7}
openai.api_key = "" #填入OpenAI的api key

def askOpenAI(question):
    res = openai.Completion.create(
        model="text-davinci-003",
        prompt=question,
        temperature=0.9,
        max_tokens=1024,
        top_p=1,
        frequency_penalty=0,
        presence_penalty=0.6,
        stop=None
    )
    message = res.choices[0].text
    return message
anniu=u_gui.add_button(text="问我",x=90,y=260,w=60,h=40,onclick=button_click1)
xianshi=u_gui.draw_text(text="请触摸问我,说出问题",x=15,y=50,font_size=15, color="#00CCCC")
wenzi =u_gui.draw_text(text="",x=10,y=10,font_size=10, color="#000000")
wenzi .config(w=230)
ShiBieJieGuo = ""
flag = 0

while True:
    if (flag == 2):
        aip_synthesis_result = synthesis(askOpenAI(ShiBieJieGuo))
        saveAudio("speech.wav")
        ShiBieJieGuo = asr(readAudio("speech.wav"), "wav", 16000)
        wenzi .config(text=ShiBieJieGuo)
        u_audio.play("speech.wav")
        flag = 0
        wenzi .config(text="      ")
        anniu.config(state="normal")
        xianshi.config(x=15)
    if (flag == 1):
        xianshi.config(x=600)
        wenzi .config(text="聆听中。。。")
        anniu.config(state="disable")
        u_audio.record("record.wav",10)
        ShiBieJieGuo = asr(readAudio("record.wav"), "wav", 16000)
        wenzi .config(text=ShiBieJieGuo)
        time.sleep(2)
        wenzi .config(text="思考中。。。")
        flag = 2

 

代码等相关代码也在gitee开源了,欢迎大家star

https://gitee.com/rocketscn/chat-gpt-unihiker-speaker

评论

user-avatar
  • 腿毛利小五郎

    腿毛利小五郎2023.03.08

    教程详细谢谢楼主

    0
    • 老曾

      老曾2023.03.03

      高手,请教下用你发的程序上传到行空板后,后面出现思考中就不动了,是什么问题

      1
      • 山水

        山水2023.03.09

        openai的接口现在需要魔法才行,我也在看怎么弄。现在3.5的turbo也不是太贵,如果不墙可以试试