Qt中实现高准确率的语音识别

news/2024/11/8 19:49:48 标签: qt, 语音识别, 开发语言
  1. 选择语音识别引擎
    开源语音识别项目中,以下两款工具可以用于支持中英文识别,并且与Qt兼容:

Vosk:Vosk是一个开源的语音识别工具,支持中英文及多种语言,具备离线识别能力,且不依赖互联网。
PaddleSpeech:PaddleSpeech是百度的开源语音识别工具,准确率较高,但需要稍微多一点的配置。
本示例将使用 Vosk,它支持多平台,且易于集成到C++项目中,满足离线使用、90%以上准确率、开源等要求。

  1. Vosk资源下载
    首先,下载Vosk的C++库及中英文模型文件:
    如果不想编译库,这里有已经编译好的
    Vosk库: Vosk GitHub仓库
    中英文模型:Vosk 模型下载
    下载对应的库和模型,并确保你的开发环境中已经配置好CMake和Qt开发环境。

  2. 示例代码
    以下是一个完整的Qt项目代码示例,展示如何使用Vosk API在C++中进行中英文识别。假设你已经下载并解压了模型文件。

#include <QCoreApplication>
#include <QAudioInput>
#include <QBuffer>
#include <QFile>
#include <vosk_api.h>
#include <iostream>

class SpeechRecognizer : public QObject {
    Q_OBJECT
public:
    SpeechRecognizer(const QString &modelPath, QObject *parent = nullptr)
        : QObject(parent) {
        model = vosk_model_new(modelPath.toStdString().c_str());
        recognizer = vosk_recognizer_new(model, 16000.0);
    }

    ~SpeechRecognizer() {
        vosk_recognizer_free(recognizer);
        vosk_model_free(model);
    }

    void startRecognition() {
        QAudioFormat format;
        format.setSampleRate(16000);
        format.setChannelCount(1);
        format.setSampleSize(16);
        format.setCodec("audio/pcm");
        format.setByteOrder(QAudioFormat::LittleEndian);
        format.setSampleType(QAudioFormat::SignedInt);

        audioInput = new QAudioInput(format, this);
        audioBuffer.open(QIODevice::WriteOnly | QIODevice::Truncate);
        audioInput->start(&audioBuffer);

        connect(audioInput, &QAudioInput::stateChanged, this, &SpeechRecognizer::onStateChanged);
    }

private slots:
    void onStateChanged(QAudio::State state) {
        if (state == QAudio::IdleState) {
            audioInput->stop();
            audioBuffer.close();
            processAudio();
        }
    }

    void processAudio() {
        QByteArray audioData = audioBuffer.buffer();
        int length = audioData.size();
        const char *data = audioData.data();

        if (vosk_recognizer_accept_waveform(recognizer, data, length)) {
            std::cout << vosk_recognizer_result(recognizer) << std::endl;
        } else {
            std::cout << vosk_recognizer_partial_result(recognizer) << std::endl;
        }
    }

private:
    VoskModel *model;
    VoskRecognizer *recognizer;
    QAudioInput *audioInput;
    QBuffer audioBuffer;
};

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);

    QString modelPath = "/path/to/vosk-model"; // 将此路径替换为实际模型路径
    SpeechRecognizer recognizer(modelPath);
    recognizer.startRecognition();

    return app.exec();
}

  1. 编译与运行
    将vosk_api.h和vosk库文件添加到项目中,并在CMakeLists.txt中配置vosk库路径。编译后运行该程序,即可开始录音和实时中英文语音识别

  2. 提示
    确保麦克风采样率为16kHz,以匹配识别模型的采样率。
    运行过程中需要确保模型路径正确,并安装所需的Qt和Vosk依赖库。
    参考资源
    Vosk官方文档和API:https://alphacephei.com/vosk


http://www.niftyadmin.cn/n/5744354.html

相关文章

ruoyi-vue中的mybatis改为mybatis-plus

这里写自定义目录标题 1下载ruoyi-vue项目代码2创建数据库3前端项目4后端项目 计划赶不上变化&#xff0c;本打算做自己知识库网站&#xff0c;但是最近事情真的太多了&#xff0c;只能再往后延了。最近孩子得了疱疹性咽峡炎发高烧&#xff0c;一个星期没去上学&#xff1b;期间…

Centos7 搭建 Java Web 开发环境

解决Centos7 yum命令报错问题 【解决】CentOS7 生命周期结束后 使用 yum命令报错问题_this linux distribution (centos 7) reached end-of--CSDN博客文章浏览阅读1k次&#xff0c;点赞4次&#xff0c;收藏3次。centos7在2024年6月30日&#xff0c;生命周期结束&#xff0c;官…

libgdiplus在MacOS M1上问题:Unable to load shared library ‘libgdiplus‘

libgdiplus在MacOS M1上问题&#xff1a;Unable to load shared library libgdiplus 问题解决步骤1步骤2 问题 在mac上的pycharm中执行下面的代码时出现下面的错误 slide.get_thumbnail( RuntimeError: Proxy error(TypeInitializationException): The type initializer for…

51c大模型~合集17

我自己的原文哦~ https://blog.51cto.com/whaosoft/11599989 #关于大模型「越狱」的多种方式 此项目是由伊利诺伊大学香槟分校&#xff08;UIUC&#xff09;的汪浩瀚教授主导&#xff0c;汇集了多名intern的共同努力而成。长久以来&#xff0c;这个跨学科的团队一直在前沿科…

【EMNLP2024】面向长文本的文视频表征学习与检索模型 VideoCLIP-XL

近日&#xff0c;阿里云人工智能平台PAI与华南理工大学金连文教授团队合作&#xff0c;在自然语言处理顶级会议EMNLP 2024 上发表论文《VideoCLIP-XL: Advancing Long Description Understanding for Video CLIP Models》。该工作提出了一个名为VideoCLIP-XL的视频CLIP模型&…

内核网络TCP/IP协议

参考&#xff1a; TCP/IP协议栈在Linux内核中的运行时序分析【万字长文】 - 维科号

基础网络安全知识

1.ctfhub技能树 1.1 Web-SQL注入 Web-SQL注入-整数型 && 字符型 && MySQL结构 参考&#xff1a;5.9.6MySql注入 Web-SQL注入-报错注入 step1: 查库名 ?id1 and extractvalue(1,concat(0x7e,database(),0x7e))-- step2: 查看表名 ?id1 and extractvalue(1…

ChatGPT辅助完成论文开题报告撰写的全流程提示词示例分享

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 本文旨在提供一套提示词示例&#xff0c;帮助读者朋友们通过ChatGPT高效完成选题背景、研究目的、文献综述、研究方法等关键部分的撰写&#xff0c;提升报告质量和撰写效率。希望通过这…