You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetson Nano上ChatGPT语音交互脚本Illegal instruction报错排查求助

问题:Jetson Nano上运行ChatGPT语音交互脚本出现Illegal instruction (core dumped)错误

环境与需求

  • 硬件:Jetson Nano
  • 系统:Ubuntu 20.04,Python 3.8.10
  • 目标:搭建类Amazon Echo语音交互系统——麦克风输入语音转文字调用ChatGPT,再将ChatGPT文本回复转为语音输出
  • 脚本基于某视频教程编写

原始Python脚本

import openai
import speech_recognition as sr
import pyttsx3
import time

# Initialize OpenAI API
openai.api_key = "ciao a tutti"

# Initialize the text to speech engine 
engine=pyttsx3.init()

def transcribe_audio_to_test(filename):
    recogizer=sr.Recognizer()
    with sr.AudioFile(filename)as source:
        audio=recogizer.record(source) 
    try:
        return recogizer.recognize_google(audio)
    except:
        print("skipping unkown error")

def generate_response(prompt):
    response= openai.completion.create(
        engine="text-davinci-003",
        prompt=prompt,
        max_tokens=4000,
        n=1,
        stop=None,
        temperature=0.5,
    )
    return response ["Choices"][0]["text"]

def speak_text(text):
    engine.say(text)
    engine.runAndWait()

def main():
    while True:
        #Waith for user say "genius"
        print("Say 'Genius' to start recording your question")
        with sr.Microphone() as source:
            recognizer=sr.Recognizer()
            audio=recognizer.listen(source)
            try:
                transcription = recognizer.recognize_google(audio)
                if transcription.lower()=="genius":
                    #record audio
                    filename ="input.wav"
                    print("Say your question")
                    with sr.Microphone() as source:
                        recognizer=sr.recognize()
                        source.pause_threshold=1
                        audio=recognizer.listen(source,phrase_time_limit=None,timeout=None)
                        with open(filename,"wb")as f:
                            f.write(audio.get_wav_data())
               
                    #transcript audio to test 
                    text=transcribe_audio_to_test(filename)
                    if text:
                        print(f"yuo said {text}")
                        
                        #Generate the response
                        response = generate_response(text)
                        print(f"chat gpt 3 say {response}")
                            
                        #read resopnse using GPT3
                        speak_text(response)
            except Exception as e:
                print("An error ocurred : {}".format(e))

if __name__=="__main__":
    main()

问题过程

  1. 初始运行报错ModuleNotFoundError: No module named 'openai',先后用pip和pip3安装openai 0.27.2版本,安装日志如下:
marietto@marietto:/mnt/fisso/OS/Alexa-ChatGPT# pip install openai
Collecting openai
  Downloading openai-0.27.2-py3-none-any.whl (70 kB)
     |????????????????????????????????| 70 kB 1.3 MB/s 
Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.8/dist-packages (from openai) (2.28.2)
Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from openai) (4.62.3)
Collecting aiohttp
  Downloading aiohttp-3.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB)
     |????????????????????????????????| 1.0 MB 6.7 MB/s 
Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (2.8)
Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (2019.11.28)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (1.25.8)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.8/dist-packages (from requests>=2.20->openai) (2.0.6)
Requirement already satisfied: attrs>=17.3.0 in /usr/lib/python3/dist-packages (from aiohttp->openai) (19.3.0)
Collecting yarl<2.0,>=1.0
  Downloading yarl-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (258 kB)
     |????????????????????????????????| 258 kB 10.4 MB/s 
Collecting aiosignal>=1.1.2
  Downloading aiosignal-1.3.1-py3-none-any.whl (7.6 kB)
Collecting multidict<7.0,>=4.5
  Downloading multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (124 kB)
     |????????????????????????????????| 124 kB 9.7 MB/s 
Collecting async-timeout<5.0,>=4.0.0a3
  Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting frozenlist>=1.1.1
  Downloading frozenlist-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (162 kB)
     |????????????????????????????????| 162 kB 9.4 MB/s 
Installing collected packages: multidict, yarl, frozenlist, aiosignal, async-timeout, aiohttp, openai
Successfully installed aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 frozenlist-1.3.3 multidict-6.0.4 openai-0.27.2 yarl-1.8.2
marietto@marietto:/mnt/fisso/OS/Alexa-ChatGPT# pip3 install openai
Requirement already satisfied: openai in /usr/local/lib/python3.8/dist-packages (0.27.2)
Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from openai) (4.62.3)
Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.8/dist-packages (from openai) (2.28.2)
Requirement already satisfied: aiohttp in /usr/local/lib/python3.8/dist-packages (from openai) (3.8.4)
Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (2.8)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (1.25.8)
Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (2019.11.28)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.8/dist-packages (from requests>=2.20->openai) (2.0.6)
Requirement already satisfied: attrs>=17.3.0 in /usr/lib/python3/dist-packages (from aiohttp->openai) (19.3.0)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.8/dist-packages (from aiohttp->openai) (1.3.3)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.8/dist-packages (from aiohttp->openai) (1.3.1)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.8/dist-packages (from aiohttp->openai) (6.0.4)
Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.8/dist-packages (from aiohttp->openai) (4.0.2)
Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.8/dist-packages (from aiohttp->openai) (1.8.2)
  1. 再次运行脚本,出现错误:
marietto@marietto:/mnt/fisso/OS/Alexa-ChatGPT# python3 code.py
Illegal instruction (core dumped)

原因分析

Jetson Nano是ARMv8.0架构的aarch64平台,PyPI上部分预编译的二进制包(比如aiohttp及其依赖frozenlist、multidict)可能包含了该平台不支持的指令集(如ARMv8.2+专属指令),导致运行时触发非法指令错误。


解决方法

方法1:从源码编译兼容依赖

强制pip从源码编译所有依赖,适配Jetson Nano的硬件架构:

  1. 卸载现有冲突包:
pip3 uninstall -y openai aiohttp frozenlist multidict yarl aiosignal async-timeout
  1. 安装编译依赖:
sudo apt-get update && sudo apt-get install -y build-essential python3-dev libssl-dev libffi-dev
  1. 重新从源码安装:
pip3 install --no-binary :all: aiohttp openai

方法2:降级到兼容版本

部分旧版本的依赖包对ARMv8.0支持更友好:

pip3 uninstall -y aiohttp frozenlist multidict
pip3 install aiohttp==3.7.4.post0 frozenlist==1.2.1 multidict==5.2.0
pip3 install openai==0.27.2

方法3:修正脚本自身错误

原脚本存在几处语法/拼写错误,修正后避免额外问题:

import openai
import speech_recognition as sr
import pyttsx3
import time

# 替换为你的OpenAI API密钥
openai.api_key = "your-real-api-key-here"

# 初始化语音合成引擎
engine = pyttsx3.init()

def transcribe_audio_to_text(filename):
    recognizer = sr.Recognizer()
    with sr.AudioFile(filename) as source:
        audio = recognizer.record(source)
    try:
        return recognizer.recognize_google(audio)
    except:
        print("跳过未知错误")

def generate_response(prompt):
    response = openai.Completion.create(
        engine="text-davinci-003",
        prompt=prompt,
        max_tokens=4000,
        n=1,
        stop=None,
        temperature=0.5,
    )
    return response["choices"][0]["text"]  # 修正原脚本的Choices大小写错误

def speak_text(text):
    engine.say(text)
    engine.runAndWait()

def main():
    while True:
        print("说 'Genius' 开始录制你的问题")
        with sr.Microphone() as source:
            recognizer = sr.Recognizer()
            audio = recognizer.listen(source)
            try:
                transcription = recognizer.recognize_google(audio)
                if transcription.lower() == "genius":
                    filename = "input.wav"
                    print("说出你的问题")
                    with sr.Microphone() as source:
                        recognizer = sr.Recognizer()  # 修正原脚本的recognize()错误
                        source.pause_threshold = 1
                        audio = recognizer.listen(source, phrase_time_limit=None, timeout=None)
                        with open(filename, "wb") as f:
                            f.write(audio.get_wav_data())

                    # 音频转文字
                    text = transcribe_audio_to_text(filename)
                    if text:
                        print(f"你说的是:{text}")

                        # 生成回复
                        response = generate_response(text)
                        print(f"ChatGPT回复:{response}")

                        # 语音输出回复
                        speak_text(response)
            except Exception as e:
                print(f"发生错误:{e}")

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者john_connor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:15:11