[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-Picovoice--cheetah":3,"tool-Picovoice--cheetah":64},[4,23,32,40,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":22},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85092,2,"2026-04-10T11:13:16",[13,14,15,16,17,18,19,20,21],"图像","数据工具","视频","插件","Agent","其他","语言模型","开发框架","音频","ready",{"id":24,"name":25,"github_repo":26,"description_zh":27,"stars":28,"difficulty_score":29,"last_commit_at":30,"category_tags":31,"status":22},4128,"GPT-SoVITS","RVC-Boss\u002FGPT-SoVITS","GPT-SoVITS 是一款强大的开源语音合成与声音克隆工具，旨在让用户仅需极少量的音频数据即可训练出高质量的个性化语音模型。它核心解决了传统语音合成技术依赖海量录音数据、门槛高且成本大的痛点，实现了“零样本”和“少样本”的快速建模：用户只需提供 5 秒参考音频即可即时生成语音，或使用 1 分钟数据进行微调，从而获得高度逼真且相似度极佳的声音效果。\n\n该工具特别适合内容创作者、独立开发者、研究人员以及希望为角色配音的普通用户使用。其内置的友好 WebUI 界面集成了人声伴奏分离、自动数据集切片、中文语音识别及文本标注等辅助功能，极大地降低了数据准备和模型训练的技术门槛，让非专业人士也能轻松上手。\n\n在技术亮点方面，GPT-SoVITS 不仅支持中、英、日、韩、粤语等多语言跨语种合成，还具备卓越的推理速度，在主流显卡上可实现实时甚至超实时的生成效率。无论是需要快速制作视频配音，还是进行多语言语音交互研究，GPT-SoVITS 都能以极低的数据成本提供专业级的语音合成体验。",56375,3,"2026-04-05T22:15:46",[21],{"id":33,"name":34,"github_repo":35,"description_zh":36,"stars":37,"difficulty_score":29,"last_commit_at":38,"category_tags":39,"status":22},2863,"TTS","coqui-ai\u002FTTS","🐸TTS 是一款功能强大的深度学习文本转语音（Text-to-Speech）开源库，旨在将文字自然流畅地转化为逼真的人声。它解决了传统语音合成技术中声音机械生硬、多语言支持不足以及定制门槛高等痛点，让高质量的语音生成变得触手可及。\n\n无论是希望快速集成语音功能的开发者，还是致力于探索前沿算法的研究人员，亦或是需要定制专属声音的数据科学家，🐸TTS 都能提供得力支持。它不仅预置了覆盖全球 1100 多种语言的训练模型，让用户能够即刻上手，还提供了完善的工具链，支持用户利用自有数据训练新模型或对现有模型进行微调，轻松实现特定风格的声音克隆。\n\n在技术亮点方面，🐸TTS 表现卓越。其最新的 ⓍTTSv2 模型支持 16 种语言，并在整体性能上大幅提升，实现了低于 200 毫秒的超低延迟流式输出，极大提升了实时交互体验。此外，它还无缝集成了 🐶Bark、🐢Tortoise 等社区热门模型，并支持调用上千个 Fairseq 模型，展现了极强的兼容性与扩展性。配合丰富的数据集分析与整理工具，🐸TTS 已成为科研与生产环境中备受信赖的语音合成解决方案。",44971,"2026-04-03T14:47:02",[21,20,13],{"id":41,"name":42,"github_repo":43,"description_zh":44,"stars":45,"difficulty_score":29,"last_commit_at":46,"category_tags":47,"status":22},2375,"LocalAI","mudler\u002FLocalAI","LocalAI 是一款开源的本地人工智能引擎，旨在让用户在任意硬件上轻松运行各类 AI 模型，包括大语言模型、图像生成、语音识别及视频处理等。它的核心优势在于彻底打破了高性能计算的门槛，无需昂贵的专用 GPU，仅凭普通 CPU 或常见的消费级显卡（如 NVIDIA、AMD、Intel 及 Apple Silicon）即可部署和运行复杂的 AI 任务。\n\n对于担心数据隐私的用户而言，LocalAI 提供了“隐私优先”的解决方案，确保所有数据处理均在本地基础设施内完成，无需上传至云端。同时，它完美兼容 OpenAI、Anthropic 等主流 API 接口，这意味着开发者可以无缝迁移现有应用，直接利用本地资源替代云服务，既降低了成本又提升了可控性。\n\nLocalAI 内置了超过 35 种后端支持（如 llama.cpp、vLLM、Whisper 等），并集成了自主 AI 代理、工具调用及检索增强生成（RAG）等高级功能，且具备多用户管理与权限控制能力。无论是希望保护敏感数据的企业开发者、进行算法实验的研究人员，还是想要在个人电脑上体验最新 AI 技术的极客玩家，都能通过 LocalAI 获",44782,"2026-04-02T22:14:26",[13,21,19,17,20,14,16],{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":29,"last_commit_at":54,"category_tags":55,"status":22},3108,"bark","suno-ai\u002Fbark","Bark 是由 Suno 推出的开源生成式音频模型，能够根据文本提示创造出高度逼真的多语言语音、音乐、背景噪音及简单音效。与传统仅能朗读文字的语音合成工具不同，Bark 基于 Transformer 架构，不仅能模拟说话，还能生成笑声、叹息、哭泣等非语言声音，甚至能处理带有情感色彩和语气停顿的复杂文本，极大地丰富了音频表达的可能性。\n\n它主要解决了传统语音合成声音机械、缺乏情感以及无法生成非语音类音效的痛点，让创作者能通过简单的文字描述获得生动自然的音频素材。无论是需要为视频配音的内容创作者、探索多模态生成的研究人员，还是希望快速原型设计的开发者，都能从中受益。普通用户也可通过集成的演示页面轻松体验其神奇效果。\n\n技术亮点方面，Bark 支持商业使用（MIT 许可），并在近期更新中实现了显著的推理速度提升，同时提供了适配低显存 GPU 的版本，降低了使用门槛。此外，社区还建立了丰富的提示词库，帮助用户更好地驾驭模型生成特定风格的声音。只需几行 Python 代码，即可将创意文本转化为高质量音频，是连接文字与声音世界的强大桥梁。",39067,"2026-04-04T03:33:35",[21],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":29,"last_commit_at":62,"category_tags":63,"status":22},5908,"ChatTTS","2noise\u002FChatTTS","ChatTTS 是一款专为日常对话场景打造的生成式语音模型，特别适用于大语言模型助手等交互式应用。它主要解决了传统文本转语音（TTS）技术在对话中缺乏自然感、情感表达单一以及难以处理停顿、笑声等细微语气的问题，让机器生成的语音听起来更像真人在聊天。\n\n这款工具非常适合开发者、研究人员以及希望为应用增添自然语音交互功能的设计师使用。普通用户也可以通过社区开发的衍生产品体验其能力。ChatTTS 的核心亮点在于其对对话任务的深度优化：它不仅支持中英文双语，还能精准控制韵律细节，自动生成自然的 laughter（笑声）、pauses（停顿）和 interjections（插入语），从而实现多说话人的互动对话效果。在韵律表现上，ChatTTS 超越了大多数开源 TTS 模型。目前开源版本基于 4 万小时数据预训练而成，虽主要用于学术研究与教育目的，但已展现出强大的潜力，并支持流式音频生成与零样本推理，为后续的多情绪控制等进阶功能奠定了基础。",39042,"2026-04-09T11:54:03",[19,17,20,21],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":75,"owner_avatar_url":76,"owner_bio":77,"owner_company":78,"owner_location":78,"owner_email":79,"owner_twitter":78,"owner_website":80,"owner_url":81,"languages":82,"stars":111,"forks":112,"last_commit_at":113,"license":114,"difficulty_score":10,"env_os":115,"env_gpu":116,"env_ram":116,"env_deps":117,"category_tags":120,"github_topics":121,"view_count":10,"oss_zip_url":78,"oss_zip_packed_at":78,"status":22,"created_at":131,"updated_at":132,"faqs":133,"releases":163},7308,"Picovoice\u002Fcheetah","cheetah","On-device streaming speech-to-text engine powered by deep learning ","Cheetah 是一款由 Picovoice 打造的深度学习驱动语音转文字引擎，专为在设备端实时处理音频流而设计。它能够将用户的语音输入即时转化为文本，无需依赖云端服务器，从而彻底解决了传统语音识别中常见的数据隐私泄露风险和网络延迟问题。由于所有运算均在本地完成，Cheetah 不仅保障了用户数据的绝对私密性，还实现了极低的响应延迟和出色的运行效率，即使在树莓派等资源受限的设备上也能流畅运行。\n\n这款工具非常适合需要集成语音功能的开发者，无论是构建移动应用（Android\u002FiOS）、桌面软件，还是开发 Web 前端或物联网项目，Cheetah 都提供了涵盖 Python、JavaScript、Flutter、React Native 等多种主流语言的 SDK，极大地降低了集成门槛。其独特的技术亮点在于“紧凑且高效”，在保证高识别准确率的同时，对计算资源和内存的占用极低。如果你正在寻找一个既保护用户隐私，又能跨平台稳定运行的离线语音识别方案，Cheetah 将是一个值得信赖的选择。","# Cheetah\n\n[![GitHub release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002FPicovoice\u002FCheetah.svg)](https:\u002F\u002Fgithub.com\u002FPicovoice\u002FCheetah\u002Freleases)\n[![GitHub](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002FPicovoice\u002Fcheetah)](https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fcheetah\u002F)\n\n[![Maven Central](https:\u002F\u002Fimg.shields.io\u002Fmaven-central\u002Fv\u002Fai.picovoice\u002Fcheetah-android?label=maven-central%20%5Bandroid%5D)](https:\u002F\u002Frepo1.maven.org\u002Fmaven2\u002Fai\u002Fpicovoice\u002Fcheetah-android\u002F)\n[![Maven Central](https:\u002F\u002Fimg.shields.io\u002Fmaven-central\u002Fv\u002Fai.picovoice\u002Fcheetah-java?label=maven%20central%20%5Bjava%5D)](https:\u002F\u002Frepo1.maven.org\u002Fmaven2\u002Fai\u002Fpicovoice\u002Fcheetah-java\u002F)\n[![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@picovoice\u002Fcheetah-node?label=npm%20%5Bnode%5D)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@picovoice\u002Fcheetah-node)\u003C!-- markdown-link-check-disable-line -->\n[![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@picovoice\u002Fcheetah-react?label=npm%20%5Breact%5D)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@picovoice\u002Fcheetah-react)\u003C!-- markdown-link-check-disable-line -->\n[![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@picovoice\u002Fcheetah-react-native?label=npm%20%5Breact-native%5D)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@picovoice\u002Fcheetah-react-native)\u003C!-- markdown-link-check-disable-line -->\n[![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@picovoice\u002Fcheetah-web?label=npm%20%5Bweb%5D)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@picovoice\u002Fcheetah-web)\u003C!-- markdown-link-check-disable-line -->\n[![Nuget](https:\u002F\u002Fimg.shields.io\u002Fnuget\u002Fv\u002Fpicovoice.cheetah)](https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FPicovoice.Cheetah\u002F)\n[![CocoaPods](https:\u002F\u002Fimg.shields.io\u002Fcocoapods\u002Fv\u002FCheetah-iOS)](https:\u002F\u002Fcocoapods.org\u002Fpods\u002FCheetah-iOS)\u003C!-- markdown-link-check-disable-line -->\n[![Pub Version](https:\u002F\u002Fimg.shields.io\u002Fpub\u002Fv\u002Fcheetah_flutter)](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fcheetah_flutter)\n[![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fpvcheetah)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpvcheetah\u002F)\n\nMade in Vancouver, Canada by [Picovoice](https:\u002F\u002Fpicovoice.ai)\n\n[![Twitter URL](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Furl?label=%40AiPicovoice&style=social&url=https%3A%2F%2Ftwitter.com%2FAiPicovoice)](https:\u002F\u002Ftwitter.com\u002FAiPicovoice)\u003C!-- markdown-link-check-disable-line -->\n[![YouTube Channel Views](https:\u002F\u002Fimg.shields.io\u002Fyoutube\u002Fchannel\u002Fviews\u002FUCAdi9sTCXLosG1XeqDwLx7w?label=YouTube&style=social)](https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCAdi9sTCXLosG1XeqDwLx7w)\n\nCheetah is an on-device streaming speech-to-text engine. Cheetah is:\n\n- Private; All voice processing runs locally.\n- [Accurate](https:\u002F\u002Fpicovoice.ai\u002Fdocs\u002Fbenchmark\u002Fstt\u002F)\n- [Compact and Computationally-Efficient](https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fspeech-to-text-benchmark#rtf)\n- Cross-Platform:\n    - Linux (x86_64), macOS (x86_64, arm64), and Windows (x86_64, arm64)\n    - Android and iOS\n    - Chrome, Safari, Firefox, and Edge\n    - Raspberry Pi (3, 4, 5)\n\n## Table of Contents\n\n- [Cheetah](#cheetah)\n    - [Table of Contents](#table-of-contents)\n    - [AccessKey](#accesskey)\n    - [Language Support](#language-support)\n    - [Demos](#demos)\n        - [Python](#python-demos)\n        - [C](#c-demos)\n        - [iOS](#ios-demos)\n        - [Android](#android-demo)\n        - [Flutter](#flutter-demo)\n        - [React Native](#react-native-demo)\n        - [Java](#java-demos)\n        - [Node.js](#nodejs-demo)\n        - [.Net](#net-demo)\n        - [Web](#web-demos)\n          - [Vanilla JavaScript and HTML](#vanilla-javascript-and-html)\n          - [React](#react-demo)\n    - [SDKs](#sdks)\n        - [Python](#python)\n        - [C](#c)\n        - [iOS](#ios)\n        - [Android](#android)\n        - [Flutter](#flutter)\n        - [React Native](#react-native)\n        - [Node.js](#nodejs)\n        - [Java](#java)\n        - [.Net](#net)\n        - [Web](#web)\n          - [Vanilla JavaScript and HTML (ES Modules)](#vanilla-javascript-and-html-es-modules)\n          - [React](#react)\n    - [Releases](#releases)\n\n## AccessKey\n\nAccessKey is your authentication and authorization token for deploying Picovoice SDKs, including Cheetah. Anyone who is\nusing Picovoice needs to have a valid AccessKey. You must keep your AccessKey secret. You would need internet\nconnectivity to validate your AccessKey with Picovoice license servers even though the voice recognition is running 100%\noffline.\n\nAccessKey also verifies that your usage is within the limits of your account. You can see your usage limits and real-time usage on your [Picovoice Console Profile](https:\u002F\u002Fconsole.picovoice.ai\u002Fprofile). To continue using Picovoice after your trial or renew and adjust your usage limits, please reach out to our [Enterprise Sales Team](https:\u002F\u002Fpicovoice.ai\u002Fcontact) or your existing Picovoice contact.\n\n## Language Support\n\n- Cheetah Streaming Speech-to-Text currently supports English, French, German, Italian, Portuguese, and Spanish.\n- Support for [additional languages is available for commercial customers](https:\u002F\u002Fpicovoice.ai\u002Fconsulting\u002F) on a case-by-case basis.\n\n## Demos\n\n### Python Demos\n\nInstall the demo package:\n\n```console\npip3 install pvcheetahdemo\n```\n\n```console\ncheetah_demo_mic --access_key ${ACCESS_KEY}\n```\n\nReplace `${ACCESS_KEY}` with yours obtained from Picovoice Console.\n\n### C Demos\n\nIf using SSH, clone the repository with:\n\n```console\ngit clone --recurse-submodules git@github.com:Picovoice\u002Fcheetah.git\n```\n\nIf using HTTPS, clone the repository with:\n\n```console\ngit clone --recurse-submodules https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fcheetah.git\n```\n\nBuild the demo:\n\n```console\ncmake -S demo\u002Fc\u002F -B demo\u002Fc\u002Fbuild && cmake --build demo\u002Fc\u002Fbuild\n```\n\nRun the demo:\n\n```console\n.\u002Fdemo\u002Fc\u002Fbuild\u002Fcheetah_demo_mic -a ${ACCESS_KEY} -m ${MODEL_PATH} -l ${LIBRARY_PATH}\n```\n\nReplace `${ACCESS_KEY}` with yours obtained from Picovoice Console, `${LIBRARY_PATH}` with the path to appropriate\nlibrary under [lib](\u002Flib), and `${MODEL_PATH}` to path to [default model file](.\u002Flib\u002Fcommon\u002Fcheetah_params.pv)\n(or your custom one).\n\n### iOS Demos\n\nTo run the demo, go to [demo\u002Fios\u002FCheetahDemo](.\u002Fdemo\u002Fios\u002FCheetahDemo) and run:\n\n```console\npod install\n```\n\nReplace `let accessKey = \"${YOUR_ACCESS_KEY_HERE}\"` in the file [ViewModel.swift](.\u002Fdemo\u002Fios\u002FCheetahDemo\u002FCheetahDemo\u002FViewModel.swift) with your `AccessKey`.\n\nThen, using [Xcode](https:\u002F\u002Fdeveloper.apple.com\u002Fxcode\u002F), open the generated `CheetahDemo.xcworkspace` and run the application.\n\n### Android Demo\n\nUsing Android Studio, open [demo\u002Fandroid\u002FCheetahDemo](.\u002Fdemo\u002Fandroid\u002FCheetahDemo) as an Android project and then run the application.\n\nReplace `\"${YOUR_ACCESS_KEY_HERE}\"` in the file [MainActivity.java](.\u002Fdemo\u002Fandroid\u002FCheetahDemo\u002Fcheetah-demo-app\u002Fsrc\u002Fmain\u002Fjava\u002Fai\u002Fpicovoice\u002Fcheetahdemo\u002FMainActivity.java) with your `AccessKey`.\n\n### Flutter Demo\n\nTo run the Cheetah demo on Android or iOS with Flutter, you must have the [Flutter SDK](https:\u002F\u002Fflutter.dev\u002Fdocs\u002Fget-started\u002Finstall) installed on your system. Once installed, you can run `flutter doctor` to determine any other missing requirements for your relevant platform. Once your environment has been set up, launch a simulator or connect an Android\u002FiOS device.\n\nRun the `prepare_demo` script from [demo\u002Fflutter](.) with a language code to set up the demo in the language of your choice (e.g. `de` -> German, `ko` -> Korean). To see a list of available languages, run `prepare_demo` without a language code.\n\n```console\ndart scripts\u002Fprepare_demo.dart ${LANGUAGE}\n```\n\nReplace `\"${YOUR_ACCESS_KEY_HERE}\"` in the file [main.dart](.\u002Fdemo\u002Fflutter\u002Flib\u002Fmain.dart) with your `AccessKey`.\n\nRun the following command from [demo\u002Fflutter](.\u002Fdemo\u002Fflutter) to build and deploy the demo to your device:\n\n```console\nflutter run\n```\n\n### React Native Demo\n\nTo run the React Native Cheetah demo app you will first need to set up your React Native environment. For this,\nplease refer to [React Native's documentation](https:\u002F\u002Freactnative.dev\u002Fdocs\u002Fenvironment-setup). Once your environment has\nbeen set up, navigate to [demo\u002Freact-native\u002FCheetahDemo](.\u002Fdemo\u002Freact-native\u002FCheetahDemo) to run the following commands:\n\nFor Android:\n\n```console\nyarn android-install          # sets up environment\nyarn android-run ${LANGUAGE}  # builds and deploys to Android\n```\n\nFor iOS:\n\n```console\nyarn ios-install              # sets up environment\nyarn ios-run ${LANGUAGE}      # builds and deploys to iOS\n```\n### Node.js Demo\n\nInstall the demo package:\n\n```console\nyarn global add @picovoice\u002Fcheetah-node-demo\n```\n\nWith a working microphone connected to your device, run the following in the terminal:\n\n```console\ncheetah-mic-demo --access_key ${ACCESS_KEY}\n```\n\nFor more information about Node.js demos go to [demo\u002Fnodejs](.\u002Fdemo\u002Fnodejs).\n\n### Java Demos\n\nThe [Cheetah Java demo](.\u002Fdemo\u002Fjava) is a command-line application that lets you choose between running Cheetah on an audio file or on real-time microphone input.\n\nTo try the real-time demo, make sure there is a working microphone connected to your device. Then invoke the following commands from the terminal:\n\n```console\ncd demo\u002Fjava\n.\u002Fgradlew build\ncd build\u002Flibs\njava -jar cheetah-mic-demo.jar -a ${ACCESS_KEY}\n```\nFor more information about Java demos go to [demo\u002Fjava](.\u002Fdemo\u002Fjava).\n\n### .NET Demo\n\n[Cheetah .NET demo](.\u002Fdemo\u002Fdotnet) is a command-line application that lets you choose between running Cheetah on an audio\nfile or on real-time microphone input.\n\nMake sure there is a working microphone connected to your device. From [demo\u002Fdotnet\u002FCheetahDemo](.\u002Fdemo\u002Fdotnet\u002FCheetahDemo)\nrun the following in the terminal:\n\n```console\ndotnet run -c MicDemo.Release -- --access_key ${ACCESS_KEY}\n```\n\nReplace `${ACCESS_KEY}` with your Picovoice `AccessKey`.\n\nFor more information about .NET demos, go to [demo\u002Fdotnet](.\u002Fdemo\u002Fdotnet).\n\n### Web Demos\n\n#### Vanilla JavaScript and HTML\n\nFrom [demo\u002Fweb](.\u002Fdemo\u002Fweb) run the following in the terminal:\n\n```console\nyarn\nyarn start\n```\n\n(or)\n\n```console\nnpm install\nnpm run start\n```\n\nOpen `http:\u002F\u002Flocalhost:5000` in your browser to try the demo.\n\n#### React Demo\n\nFrom [demo\u002Freact](demo\u002Freact) run the following in the terminal:\n\n```console\nyarn\nyarn start\n```\n\n(or)\n\n```console\nnpm install\nnpm run start\n```\n\nOpen `http:\u002F\u002Flocalhost:3000` in your browser to try the demo.\n\n## SDKs\n\n### Python\n\nInstall the Python SDK:\n\n```console\npip3 install pvcheetah\n```\n\nCreate an instance of the engine and transcribe audio in real-time:\n\n```python\nimport pvcheetah\n\nhandle = pvcheetah.create(access_key='${ACCESS_KEY}')\n\ndef get_next_audio_frame():\n    pass\n\nwhile True:\n    partial_transcript, is_endpoint = handle.process(get_next_audio_frame())\n    if is_endpoint:\n        final_transcript = handle.flush()\n```\n\nReplace `${ACCESS_KEY}` with yours obtained from Picovoice Console.\n\n### C\n\nCreate an instance of the engine and transcribe audio in real-time:\n\n```c\n#include \u003Cstdbool.h>\n#include \u003Cstdio.h>\n#include \u003Cstdlib.h>\n\n#include \"pv_cheetah.h\"\n\npv_cheetah_t *handle = NULL;\nconst pv_status_t status = pv_cheetah_init(\"${ACCESS_KEY}\", \"${MODEL_PATH}\", \"${DEVICE}\", 0.f, false, false, &handle);\nif (status != PV_STATUS_SUCCESS) {\n    \u002F\u002F error handling logic\n}\n\nextern const int16_t *get_next_audio_frame(void);\n\nwhile (true) {\n    char *partial_transcript = NULL;\n    bool is_endpoint = false;\n    const pv_status_t status = pv_cheetah_process(\n            handle,\n            get_next_audio_frame(),\n            &partial_transcript,\n            &is_endpoint);\n    if (status != PV_STATUS_SUCCESS) {\n        \u002F\u002F error handling logic\n    }\n    \u002F\u002F do something with transcript\n    free(partial_transcript);\n    if (is_endpoint) {\n        char *final_transcript = NULL;\n        const pv_status_t status = pv_cheetah_flush(handle, &final_transcript);\n        if (status != PV_STATUS_SUCCESS) {\n            \u002F\u002F error handling logic\n        }\n        \u002F\u002F do something with transcript\n        free(final_transcript);\n    }\n}\n```\n\nReplace `${ACCESS_KEY}` with yours obtained from Picovoice Console and `${MODEL_PATH}` to path to\n[default model file](.\u002Flib\u002Fcommon\u002Fcheetah_params.pv) (or your custom one). Finally, when done be sure to release\nresources acquired using `pv_cheetah_delete(handle)`.\n\n### iOS\n\u003C!-- markdown-link-check-disable -->\nThe Cheetah iOS binding is available via [CocoaPods](https:\u002F\u002Fcocoapods.org\u002Fpods\u002FCheetah-iOS). To import it into your iOS project, add the following line to your Podfile and run `pod install`:\n\u003C!-- markdown-link-check-enable -->\n```ruby\npod 'Cheetah-iOS'\n```\n\nCreate an instance of the engine and transcribe audio in real-time:\n\n```swift\nimport Cheetah\n\nlet modelPath = Bundle(for: type(of: self)).path(\n        forResource: \"${MODEL_FILE}\", \u002F\u002F Name of the model file name for Cheetah\n        ofType: \"pv\")!\n\nlet cheetah = Cheetah(accessKey: \"${ACCESS_KEY}\", modelPath: modelPath)\n\nfunc getNextAudioFrame() -> [Int16] {\n  \u002F\u002F .. get audioFrame\n  return audioFrame;\n}\n\nwhile true {\n  do {\n    let partialTranscript, isEndpoint = try cheetah.process(getNetAudioFrame())\n    if isEndpoint {\n      let finalTranscript = try cheetah.flush()\n    }\n  } catch let error as CheetahError {\n      \u002F\u002F handle error\n  } catch { }\n}\n```\n\nReplace `${ACCESS_KEY}` with yours obtained from Picovoice Console and `${MODEL_FILE}` with a custom trained model from\n[Picovoice Console](https:\u002F\u002Fconsole.picovoice.ai\u002F) or the [default model](.\u002Flib\u002Fcommon\u002Fcheetah_params.pv).\n\n### Android\n\nTo include the package in your Android project, ensure you have included `mavenCentral()` in your top-level `build.gradle` file and then add the following to your app's `build.gradle`:\n\n```groovy\ndependencies {\n    implementation 'ai.picovoice:cheetah-android:${LATEST_VERSION}'\n}\n```\n\nCreate an instance of the engine and transcribe audio in real-time:\n\n```java\nimport ai.picovoice.cheetah.*;\n\nfinal String accessKey = \"${ACCESS_KEY}\"; \u002F\u002F AccessKey obtained from Picovoice Console (https:\u002F\u002Fconsole.picovoice.ai\u002F)\nfinal String modelPath = \"${MODEL_FILE}\";\n\nshort[] getNextAudioFrame() {\n    \u002F\u002F .. get audioFrame\n    return audioFrame;\n}\n\ntry {\n    Cheetah cheetah = new Cheetah.Builder().setAccessKey(accessKey).setModelPath(modelPath).build(appContext);\n\n    String transcript = \"\";\n\n    while true {\n        CheetahTranscript transcriptObj = cheetah.process(getNextAudioFrame());\n        transcript += transcriptObj.getTranscript();\n\n        if (transcriptObj.getIsEndpoint()) {\n            CheetahTranscript finalTranscriptObj = cheetah.flush();\n            transcript += finalTranscriptObj.getTranscript();\n        }\n    };\n\n} catch (CheetahException ex) { }\n```\n\nReplace `${ACCESS_KEY}` with yours obtained from Picovoice Console and `${MODEL_FILE}` with the default or custom trained model from [console](https:\u002F\u002Fconsole.picovoice.ai\u002F).\n\n### Flutter\n\nAdd the [Cheetah Flutter plugin](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fcheetah_flutter) to your pub.yaml.\n\n```yaml\ndependencies:\n  cheetah_flutter: ^\u003Cversion>\n```\n\nCreate an instance of the engine and transcribe audio in real-time:\n\n```dart\nimport 'package:cheetah_flutter\u002Fcheetah.dart';\n\nconst accessKey = \"{ACCESS_KEY}\"  \u002F\u002F AccessKey obtained from Picovoice Console (https:\u002F\u002Fconsole.picovoice.ai\u002F)\n\nList\u003Cint> buffer = getAudioFrame();\n\ntry{\n    Cheetah _cheetah = await Cheetah.create(accessKey, '{CHEETAH_MODEL_PATH}');\n\n    String transcript = \"\";\n\n    while true {\n        CheetahTranscript partialResult = await _cheetah.process(getAudioFrame());\n        transcript += partialResult.transcript;\n\n        if (partialResult.isEndpoint) {\n            CheetahTranscript finalResult = await _cheetah.flush();\n            transcript += finalResult.transcript;\n        }\n    }\n\n    _cheetah.delete()\n\n} on CheetahException catch (err) { }\n```\n\nReplace `${ACCESS_KEY}` with your `AccessKey` obtained from [Picovoice Console](https:\u002F\u002Fconsole.picovoice.ai\u002F) and `${CHEETAH_MODEL_PATH}` with the the path a custom trained model from [Picovoice Console](https:\u002F\u002Fconsole.picovoice.ai\u002F) or the [default model](lib\u002Fcommon\u002Fcheetah_params.pv).\n\n### React Native\n\nThe Cheetah React Native binding is available via [NPM](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@picovoice\u002Fcheetah-react-native)\u003C!-- markdown-link-check-disable-line -->. Add it via the following command:\n\n```console\nyarn add @picovoice\u002Fcheetah-react-native\n```\n\nCreate an instance of the engine and transcribe an audio file:\n\n```typescript\nimport {Cheetah, CheetahErrors} from '@picovoice\u002Fcheetah-react-native';\n\nconst getAudioFrame = () => {\n  \u002F\u002F get audio frames\n}\n\ntry {\n  while (1) {\n    const cheetah = await Cheetah.create(\"${ACCESS_KEY}\", \"${MODEL_FILE}\")\n    const {transcript, isEndpoint} = await cheetah.process(getAudioFrame())\n    if (isEndpoint) {\n      const {transcript} = await cheetah.flush()\n    }\n  }\n} catch (err: any) {\n  if (err instanceof CheetahErrors) {\n    \u002F\u002F handle error\n  }\n}\n```\n\nReplace `${ACCESS_KEY}` with yours obtained from Picovoice Console and `${MODEL_FILE}` with the default or custom trained model from [console](https:\u002F\u002Fconsole.picovoice.ai\u002F). When done be sure to explicitly release the resources using `cheetah.delete()`.\n\n### Node.js\n\nInstall the Node.js SDK:\n\n```console\nyarn add @picovoice\u002Fcheetah-node\n```\n\nCreate instances of the Cheetah class:\n\n```javascript\nconst Cheetah = require(\"@picovoice\u002Fcheetah-node\");\n\nconst accessKey = \"${ACCESS_KEY}\"; \u002F\u002F Obtained from the Picovoice Console (https:\u002F\u002Fconsole.picovoice.ai\u002F)\nconst endpointDurationSec = 0.2;\nconst handle = new Cheetah(accessKey);\n\nfunction getNextAudioFrame() {\n  \u002F\u002F ...\n  return audioFrame;\n}\n\nwhile (true) {\n  const audioFrame = getNextAudioFrame();\n  const [partialTranscript, isEndpoint] = handle.process(audioFrame);\n  if (isEndpoint) {\n    finalTranscript = handle.flush()\n  }\n}\n```\n\nReplace `${ACCESS_KEY}` with yours obtained from [Picovoice Console](https:\u002F\u002Fconsole.picovoice.ai\u002F).\n\nWhen done, be sure to release resources using `release()`:\n\n```javascript\nhandle.release();\n```\n\n### Java\n\nCreate an instance of the engine with the Cheetah Builder class and transcribe audio in real-time:\n\n```java\nimport ai.picovoice.cheetah.*;\n\nfinal String accessKey = \"...\"; \u002F\u002F AccessKey provided by Picovoice Console (https:\u002F\u002Fconsole.picovoice.ai\u002F)\n\nshort[] getNextAudioFrame() {\n    \u002F\u002F .. get audioFrame\n    return audioFrame;\n}\n\nString transcript = \"\";\n\ntry {\n    Cheetah cheetah = new Cheetah.Builder().setAccessKey(accessKey).build();\n\n    while true {\n        CheetahTranscript transcriptObj = cheetah.process(getNextAudioFrame());\n        transcript += transcriptObj.getTranscript();\n\n        if (transcriptObj.getIsEndpoint()) {\n            CheetahTranscript finalTranscriptObj = cheetah.flush();\n            transcript += finalTranscriptObj.getTranscript();\n        }\n    }\n\n    cheetah.delete();\n\n} catch (CheetahException ex) { }\n\n```\n\n### .NET\n\nInstall the .NET SDK using NuGet or the dotnet CLI:\n\n```console\ndotnet add package Cheetah\n```\n\nThe SDK exposes a factory method to create instances of the engine as below:\n\n```csharp\nusing Pv;\n\nconst string accessKey = \"${ACCESS_KEY}\";\n\nCheetah handle = Cheetah.Create(accessKey);\n```\n\nReplace `${ACCESS_KEY}` with yours obtained from [Picovoice Console](https:\u002F\u002Fconsole.picovoice.ai\u002F).\n\nWhen initialized, the valid sample rate is given by `handle.SampleRate`. Expected frame length (number of audio samples in an input array) is `handle.FrameLength`. The engine accepts 16-bit linearly-encoded PCM and operates on single-channel audio.\n\n```csharp\nshort[] GetNextAudioFrame()\n{\n    \u002F\u002F .. get audioFrame\n    return audioFrame;\n}\n\nstring transcript = \"\";\n\nwhile(true)\n{\n    CheetahTranscript transcriptObj = handle.Process(GetNextAudioFrame());\n    transcript += transcriptObj.Transcript;\n\n        if (transcriptObj.IsEndpoint) {\n        CheetahTranscript finalTranscriptObj = handle.Flush();\n        transcript += finalTranscriptObj.Transcript;\n    }\n}\n```\n\nCheetah will have its resources freed by the garbage collector, but to have resources freed immediately after use, wrap it in a using statement:\n\n```csharp\nusing(Cheetah handle = Cheetah.Create(accessKey))\n{\n    \u002F\u002F .. Cheetah usage here\n}\n```\n\n### Web\n\n#### Vanilla JavaScript and HTML (ES Modules)\n\nInstall the web SDK using yarn:\n\n```console\nyarn add @picovoice\u002Fcheetah-web\n```\n\nor using npm:\n\n```console\nnpm install --save @picovoice\u002Fcheetah-web\n```\n\nCreate an instance of the engine using `CheetahWorker` and transcribe an audio file:\n\n```typescript\nimport { CheetahWorker } from \"@picovoice\u002Fcheetah-web\";\nimport cheetahParams from \"${PATH_TO_BASE64_CHEETAH_PARAMS}\";\n\nlet transcript = \"\";\n\nfunction transcriptCallback(cheetahTranscript: CheetahTranscript) {\n  transcript += cheetahTranscript.transcript;\n  if (cheetahTranscript.isEndpoint) {\n    transcript += \"\\n\";\n  }\n}\n\nfunction getAudioData(): Int16Array {\n  \u002F\u002F ... function to get audio data\n  return new Int16Array();\n}\n\nconst cheetah = await CheetahWorker.create(\n  \"${ACCESS_KEY}\",\n  transcriptCallback,\n  { base64: cheetahParams }\n);\n\nfor (;;) {\n  cheetah.process(getAudioData());\n  \u002F\u002F break on some condition\n}\ncheetah.flush(); \u002F\u002F runs transcriptionCallback on remaining data.\n```\n\nReplace `${ACCESS_KEY}` with yours obtained from [Picovoice Console](https:\u002F\u002Fconsole.picovoice.ai\u002F). Finally, when done release the resources using `cheetah.release()`.\n\n#### React\n\n```console\nyarn add @picovoice\u002Fcheetah-react @picovoice\u002Fweb-voice-processor\n```\n\n(or)\n\n```console\nnpm install @picovoice\u002Fcheetah-react @picovoice\u002Fweb-voice-processor\n```\n\n```typescript\nimport { useCheetah } from \"@picovoice\u002Fcheetah-react\";\n\nfunction App(props) {\n  const {\n    result,\n    isLoaded,\n    isListening,\n    error,\n    init,\n    start,\n    stop,\n    release,\n  } = useCheetah();\n\n  const initEngine = async () => {\n    await init(\n      \"${ACCESS_KEY}\",\n      cheetahModel,\n    );\n  };\n\n  const toggleRecord = async () => {\n    if (isListening) {\n      await stop();\n    } else {\n      await start();\n    }\n  };\n\n  useEffect(() => {\n    if (result !== null) {\n      console.log(result.transcript);\n      console.log(result.isComplete);\n    }\n  }, [result])\n}\n```\n\n## Releases\n\n### v4.0.0 - March 19th, 2026\n- Improved engine performance and latency\n- Added text normalization feature\n\n### v3.0.0 - December 17th, 2025\n- Improved engine performance\n- Added support for running on GPU or multiple CPU cores\n- Node.js min version bumped to Node 18\n- iOS min version bumped to iOS 16\n- Flutter min version bumped to 3.10\n- React Native min version bumped to 0.73\n\n### v2.3.0 - August 29th, 2025\n\n- Added support for low latency Cheetah Fast models\n- Improved engine accuracy\n\n### v2.2.0 - July 3rd, 2025\n\n- Improved automatic punctuation insertion\n\n### v2.1.0 - December 10th, 2024\n\n- Added language support for French, German, Italian, Portuguese and Spanish\n- Various bug fixes and performance improvements\n\n### v2.0.0 - November 27th, 2023\n\n- Improvements to error reporting\n- Upgrades to authorization and authentication system\n- Improved engine accuracy\n- Various bug fixes and improvements\n- Node min support bumped to Node 16\n- Bumped iOS support to iOS 13+\n- Patches to .NET support\n\n### v1.1.0 - August 11th, 2022\n\n* Added true-casing by default for transcription results\n* Added option to enable automatic punctuation insertion\n* Cheetah Web SDK release\n\n### v1.0.0 - January 25th, 2022\n\n* Initial release\n","# 猎豹\n\n[![GitHub 发布](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002FPicovoice\u002FCheetah.svg)](https:\u002F\u002Fgithub.com\u002FPicovoice\u002FCheetah\u002Freleases)\n[![GitHub 许可证](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002FPicovoice\u002Fcheetah)](https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fcheetah\u002F)\n\n[![Maven Central](https:\u002F\u002Fimg.shields.io\u002Fmaven-central\u002Fv\u002Fai.picovoice\u002Fcheetah-android?label=maven-central%20%5Bandroid%5D)](https:\u002F\u002Frepo1.maven.org\u002Fmaven2\u002Fai\u002Fpicovoice\u002Fcheetah-android\u002F)\n[![Maven Central](https:\u002F\u002Fimg.shields.io\u002Fmaven-central\u002Fv\u002Fai.picovoice\u002Fcheetah-java?label=maven%20central%20%5Bjava%5D)](https:\u002F\u002Frepo1.maven.org\u002Fmaven2\u002Fai\u002Fpicovoice\u002Fcheetah-java\u002F)\n[![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@picovoice\u002Fcheetah-node?label=npm%20%5Bnode%5D)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@picovoice\u002Fcheetah-node)\u003C!-- markdown-link-check-disable-line -->\n[![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@picovoice\u002Fcheetah-react?label=npm%20%5Breact%5D)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@picovoice\u002Fcheetah-react)\u003C!-- markdown-link-check-disable-line -->\n[![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@picovoice\u002Fcheetah-react-native?label=npm%20%5Breact-native%5D)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@picovoice\u002Fcheetah-react-native)\u003C!-- markdown-link-check-disable-line -->\n[![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@picovoice\u002Fcheetah-web?label=npm%20%5Bweb%5D)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@picovoice\u002Fcheetah-web)\u003C!-- markdown-link-check-disable-line -->\n[![Nuget](https:\u002F\u002Fimg.shields.io\u002Fnuget\u002Fv\u002Fpicovoice.cheetah)](https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FPicovoice.Cheetah\u002F)\n[![CocoaPods](https:\u002F\u002Fimg.shields.io\u002Fcocoapods\u002Fv\u002FCheetah-iOS)](https:\u002F\u002Fcocoapods.org\u002Fpods\u002FCheetah-iOS)\u003C!-- markdown-link-check-disable-line -->\n[![Pub 版本](https:\u002F\u002Fimg.shields.io\u002Fpub\u002Fv\u002Fcheetah_flutter)](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fcheetah_flutter)\n[![PyPI](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fpvcheetah)](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpvcheetah\u002F)\n\n由位于加拿大温哥华的 [Picovoice](https:\u002F\u002Fpicovoice.ai) 制作。\n\n[![Twitter URL](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Furl?label=%40AiPicovoice&style=social&url=https%3A%2F%2Ftwitter.com%2FAiPicovoice)](https:\u002F\u002Ftwitter.com\u002FAiPicovoice)\u003C!-- markdown-link-check-disable-line -->\n[![YouTube 频道观看次数](https:\u002F\u002Fimg.shields.io\u002Fyoutube\u002Fchannel\u002Fviews\u002FUCAdi9sTCXLosG1XeqDwLx7w?label=YouTube&style=social)](https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCAdi9sTCXLosG1XeqDwLx7w)\n\n猎豹是一款设备端流式语音转文本引擎。猎豹具有以下特点：\n\n- 私密性：所有语音处理均在本地进行。\n- [准确](https:\u002F\u002Fpicovoice.ai\u002Fdocs\u002Fbenchmark\u002Fstt\u002F)\n- [紧凑且计算高效](https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fspeech-to-text-benchmark#rtf)\n- 跨平台支持：\n    - Linux (x86_64)、macOS (x86_64、arm64) 和 Windows (x86_64、arm64)\n    - Android 和 iOS\n    - Chrome、Safari、Firefox 和 Edge\n    - 树莓派 (3、4、5)\n\n## 目录\n\n- [猎豹](#cheetah)\n    - [目录](#table-of-contents)\n    - [AccessKey](#accesskey)\n    - [语言支持](#language-support)\n    - [演示](#demos)\n        - [Python](#python-demos)\n        - [C](#c-demos)\n        - [iOS](#ios-demos)\n        - [Android](#android-demo)\n        - [Flutter](#flutter-demo)\n        - [React Native](#react-native-demo)\n        - [Java](#java-demos)\n        - [Node.js](#nodejs-demo)\n        - [.Net](#net-demo)\n        - [Web](#web-demos)\n          - [原生 JavaScript 和 HTML](#vanilla-javascript-and-html)\n          - [React](#react-demo)\n    - [SDKs](#sdks)\n        - [Python](#python)\n        - [C](#c)\n        - [iOS](#ios)\n        - [Android](#android)\n        - [Flutter](#flutter)\n        - [React Native](#react-native)\n        - [Node.js](#nodejs)\n        - [Java](#java)\n        - [.Net](#net)\n        - [Web](#web)\n          - [原生 JavaScript 和 HTML (ES Modules)](#vanilla-javascript-and-html-es-modules)\n          - [React](#react)\n    - [发布](#releases)\n\n## AccessKey\n\nAccessKey 是您用于部署 Picovoice SDK（包括猎豹）的身份验证和授权令牌。任何使用 Picovoice 的人都需要有效的 AccessKey。请务必妥善保管您的 AccessKey。尽管语音识别完全离线运行，但您仍需互联网连接来通过 Picovoice 许可服务器验证您的 AccessKey。\n\nAccessKey 还会验证您的使用是否在账户限制范围内。您可以在 [Picovoice 控制台个人资料](https:\u002F\u002Fconsole.picovoice.ai\u002Fprofile) 中查看您的使用限制和实时使用情况。如需在试用期结束后继续使用 Picovoice，或续订并调整使用限制，请联系我们的 [企业销售团队](https:\u002F\u002Fpicovoice.ai\u002Fcontact) 或您现有的 Picovoice 联系人。\n\n## 语言支持\n\n- 猎豹流式语音转文本目前支持英语、法语、德语、意大利语、葡萄牙语和西班牙语。\n- 对于商业客户，[其他语言的支持可根据具体需求提供](https:\u002F\u002Fpicovoice.ai\u002Fconsulting\u002F)。\n\n## 演示\n\n### Python 演示\n\n安装演示包：\n\n```console\npip3 install pvcheetahdemo\n```\n\n```console\ncheetah_demo_mic --access_key ${ACCESS_KEY}\n```\n\n将 `${ACCESS_KEY}` 替换为您从 Picovoice 控制台获取的 AccessKey。\n\n### C 演示\n\n如果使用 SSH，克隆仓库时执行以下命令：\n\n```console\ngit clone --recurse-submodules git@github.com:Picovoice\u002Fcheetah.git\n```\n\n如果使用 HTTPS，克隆仓库时执行以下命令：\n\n```console\ngit clone --recurse-submodules https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fcheetah.git\n```\n\n构建演示程序：\n\n```console\ncmake -S demo\u002Fc\u002F -B demo\u002Fc\u002Fbuild && cmake --build demo\u002Fc\u002Fbuild\n```\n\n运行演示程序：\n\n```console\n.\u002Fdemo\u002Fc\u002Fbuild\u002Fcheetah_demo_mic -a ${ACCESS_KEY} -m ${MODEL_PATH} -l ${LIBRARY_PATH}\n```\n\n将 `${ACCESS_KEY}` 替换为您从 Picovoice 控制台获取的 AccessKey，`${LIBRARY_PATH}` 替换为指向 [lib](\u002Flib) 目录下相应库文件的路径，`${MODEL_PATH}` 替换为指向 [默认模型文件](.\u002Flib\u002Fcommon\u002Fcheetah_params.pv) 的路径（或您自定义的模型文件）。\n\n### iOS 演示\n\n要运行演示程序，请前往 [demo\u002Fios\u002FCheetahDemo](.\u002Fdemo\u002Fios\u002FCheetahDemo)，然后执行以下命令：\n\n```console\npod install\n```\n\n将文件 [ViewModel.swift](.\u002Fdemo\u002Fios\u002FCheetahDemo\u002FCheetahDemo\u002FViewModel.swift) 中的 `let accessKey = \"${YOUR_ACCESS_KEY_HERE}\"` 替换为您自己的 AccessKey。\n\n随后，使用 [Xcode](https:\u002F\u002Fdeveloper.apple.com\u002Fxcode\u002F) 打开生成的 `CheetahDemo.xcworkspace`，并运行应用程序。\n\n### 安卓演示\n\n使用 Android Studio，将 [demo\u002Fandroid\u002FCheetahDemo](.\u002Fdemo\u002Fandroid\u002FCheetahDemo) 作为安卓项目打开，然后运行应用程序。\n\n将文件 [MainActivity.java](.\u002Fdemo\u002Fandroid\u002FCheetahDemo\u002Fcheetah-demo-app\u002Fsrc\u002Fmain\u002Fjava\u002Fai\u002Fpicovoice\u002Fcheetahdemo\u002FMainActivity.java) 中的 `\"${YOUR_ACCESS_KEY_HERE}\"` 替换为您自己的 AccessKey。\n\n### Flutter 示例\n\n要在 Android 或 iOS 上使用 Flutter 运行 Cheetah 示例，您必须在系统上安装 [Flutter SDK](https:\u002F\u002Fflutter.dev\u002Fdocs\u002Fget-started\u002Finstall)。安装完成后，您可以运行 `flutter doctor` 来检查您的相关平台是否缺少其他必要依赖项。环境配置完成后，请启动模拟器或连接 Android\u002FiOS 设备。\n\n从 [demo\u002Fflutter](.) 运行 `prepare_demo` 脚本，并指定语言代码以将示例设置为您选择的语言（例如 `de` 表示德语，`ko` 表示韩语）。要查看可用语言列表，请不带语言代码运行 `prepare_demo`。\n\n```console\ndart scripts\u002Fprepare_demo.dart ${LANGUAGE}\n```\n\n将文件 [main.dart](.\u002Fdemo\u002Fflutter\u002Flib\u002Fmain.dart) 中的 `\"${YOUR_ACCESS_KEY_HERE}\"` 替换为您的 `AccessKey`。\n\n从 [demo\u002Fflutter](.\u002Fdemo\u002Fflutter) 运行以下命令以构建并将示例部署到您的设备：\n\n```console\nflutter run\n```\n\n### React Native 示例\n\n要运行 React Native Cheetah 示例应用，您首先需要设置 React Native 环境。为此，请参阅 [React Native 官方文档](https:\u002F\u002Freactnative.dev\u002Fdocs\u002Fenvironment-setup)。环境设置完成后，导航到 [demo\u002Freact-native\u002FCheetahDemo](.\u002Fdemo\u002Freact-native\u002FCheetahDemo)，运行以下命令：\n\n对于 Android：\n\n```console\nyarn android-install          # 设置环境\nyarn android-run ${LANGUAGE}  # 构建并部署到 Android\n```\n\n对于 iOS：\n\n```console\nyarn ios-install              # 设置环境\nyarn ios-run ${LANGUAGE}      # 构建并部署到 iOS\n```\n\n### Node.js 示例\n\n安装示例包：\n\n```console\nyarn global add @picovoice\u002Fcheetah-node-demo\n```\n\n确保您的设备已连接正常工作的麦克风，然后在终端中运行以下命令：\n\n```console\ncheetah-mic-demo --access_key ${ACCESS_KEY}\n```\n\n有关 Node.js 示例的更多信息，请访问 [demo\u002Fnodejs](.\u002Fdemo\u002Fnodejs)。\n\n### Java 示例\n\n[Cheetah Java 示例](.\u002Fdemo\u002Fjava) 是一个命令行应用程序，允许您选择在音频文件上或实时麦克风输入上运行 Cheetah。\n\n要试用实时演示，请确保您的设备已连接正常工作的麦克风。然后从终端调用以下命令：\n\n```console\ncd demo\u002Fjava\n.\u002Fgradlew build\ncd build\u002Flibs\njava -jar cheetah-mic-demo.jar -a ${ACCESS_KEY}\n```\n\n有关 Java 示例的更多信息，请访问 [demo\u002Fjava](.\u002Fdemo\u002Fjava)。\n\n### .NET 示例\n\n[Cheetah .NET 示例](.\u002Fdemo\u002Fdotnet) 是一个命令行应用程序，允许您选择在音频文件上或实时麦克风输入上运行 Cheetah。\n\n请确保您的设备已连接正常工作的麦克风。从 [demo\u002Fdotnet\u002FCheetahDemo](.\u002Fdemo\u002Fdotnet\u002FCheetahDemo) 在终端中运行以下命令：\n\n```console\ndotnet run -c MicDemo.Release -- --access_key ${ACCESS_KEY}\n```\n\n将 `${ACCESS_KEY}` 替换为您的 Picovoice `AccessKey`。\n\n有关 .NET 示例的更多信息，请访问 [demo\u002Fdotnet](.\u002Fdemo\u002Fdotnet)。\n\n### Web 示例\n\n#### 原生 JavaScript 和 HTML\n\n从 [demo\u002Fweb](.\u002Fdemo\u002Fweb) 在终端中运行以下命令：\n\n```console\nyarn\nyarn start\n```\n\n（或者）\n\n```console\nnpm install\nnpm run start\n```\n\n在浏览器中打开 `http:\u002F\u002Flocalhost:5000` 即可试用该示例。\n\n#### React 示例\n\n从 [demo\u002Freact](demo\u002Freact) 在终端中运行以下命令：\n\n```console\nyarn\nyarn start\n```\n\n（或者）\n\n```console\nnpm install\nnpm run start\n```\n\n在浏览器中打开 `http:\u002F\u002Flocalhost:3000` 即可试用该示例。\n\n## SDK\n\n### Python\n\n安装 Python SDK：\n\n```console\npip3 install pvcheetah\n```\n\n创建引擎实例并实时转录音频：\n\n```python\nimport pvcheetah\n\nhandle = pvcheetah.create(access_key='${ACCESS_KEY}')\n\ndef get_next_audio_frame():\n    pass\n\nwhile True:\n    partial_transcript, is_endpoint = handle.process(get_next_audio_frame())\n    if is_endpoint:\n        final_transcript = handle.flush()\n```\n\n将 `${ACCESS_KEY}` 替换为您从 Picovoice 控制台获取的密钥。\n\n### C\n\n创建引擎实例并实时转录音频：\n\n```c\n#include \u003Cstdbool.h>\n#include \u003Cstdio.h>\n#include \u003Cstdlib.h>\n\n#include \"pv_cheetah.h\"\n\npv_cheetah_t *handle = NULL;\nconst pv_status_t status = pv_cheetah_init(\"${ACCESS_KEY}\", \"${MODEL_PATH}\", \"${DEVICE}\", 0.f, false, false, &handle);\nif (status != PV_STATUS_SUCCESS) {\n    \u002F\u002F 错误处理逻辑\n}\n\nextern const int16_t *get_next_audio_frame(void);\n\nwhile (true) {\n    char *partial_transcript = NULL;\n    bool is_endpoint = false;\n    const pv_status_t status = pv_cheetah_process(\n            handle,\n            get_next_audio_frame(),\n            &partial_transcript,\n            &is_endpoint);\n    if (status != PV_STATUS_SUCCESS) {\n        \u002F\u002F 错误处理逻辑\n    }\n    \u002F\u002F 处理转录内容\n    free(partial_transcript);\n    if (is_endpoint) {\n        char *final_transcript = NULL;\n        const pv_status_t status = pv_cheetah_flush(handle, &final_transcript);\n        if (status != PV_STATUS_SUCCESS) {\n            \u002F\u002F 错误处理逻辑\n        }\n        \u002F\u002F 处理最终转录内容\n        free(final_transcript);\n    }\n}\n```\n\n将 `${ACCESS_KEY}` 替换为您从 Picovoice 控制台获取的密钥，将 `${MODEL_PATH}` 替换为 [默认模型文件](.\u002Flib\u002Fcommon\u002Fcheetah_params.pv) 的路径（或您自定义的模型路径）。最后，在完成操作后，请务必使用 `pv_cheetah_delete(handle)` 释放资源。\n\n### iOS\n\u003C!-- markdown-link-check-disable -->\nCheetah 的 iOS 绑定可通过 [CocoaPods](https:\u002F\u002Fcocoapods.org\u002Fpods\u002FCheetah-iOS) 获取。要将其导入您的 iOS 项目中，请在 Podfile 中添加以下行并运行 `pod install`：\n\u003C!-- markdown-link-check-enable -->\n```ruby\npod 'Cheetah-iOS'\n```\n\n创建引擎实例并实时转录音频：\n\n```swift\nimport Cheetah\n\nlet modelPath = Bundle(for: type(of: self)).path(\n        forResource: \"${MODEL_FILE}\", \u002F\u002F Cheetah 模型文件名\n        ofType: \"pv\")!\n\nlet cheetah = Cheetah(accessKey: \"${ACCESS_KEY}\", modelPath: modelPath)\n\nfunc getNextAudioFrame() -> [Int16] {\n  \u002F\u002F .. 获取音频帧\n  return audioFrame;\n}\n\nwhile true {\n  do {\n    let partialTranscript, isEndpoint = try cheetah.process(getNetAudioFrame())\n    if isEndpoint {\n      let finalTranscript = try cheetah.flush()\n    }\n  } catch let error as CheetahError {\n      \u002F\u002F 处理错误\n  } catch { }\n}\n```\n\n将 `${ACCESS_KEY}` 替换为您从 Picovoice 控制台获取的密钥，将 `${MODEL_FILE}` 替换为通过 [Picovoice 控制台](https:\u002F\u002Fconsole.picovoice.ai\u002F) 或 [默认模型](.\u002Flib\u002Fcommon\u002Fcheetah_params.pv) 训练的自定义模型。\n\n### Android\n\n要将该软件包包含到您的 Android 项目中，请确保在项目的顶级 `build.gradle` 文件中已添加 `mavenCentral()`，然后将以下内容添加到应用的 `build.gradle` 文件中：\n\n```groovy\ndependencies {\n    implementation 'ai.picovoice:cheetah-android:${LATEST_VERSION}'\n}\n```\n\n创建引擎实例并实时转录音频：\n\n```java\nimport ai.picovoice.cheetah.*;\n\nfinal String accessKey = \"${ACCESS_KEY}\"; \u002F\u002F 从 Picovoice 控制台获取的 AccessKey (https:\u002F\u002Fconsole.picovoice.ai\u002F)\nfinal String modelPath = \"${MODEL_FILE}\";\n\nshort[] getNextAudioFrame() {\n    \u002F\u002F .. 获取音频帧\n    return audioFrame;\n}\n\ntry {\n    Cheetah cheetah = new Cheetah.Builder().setAccessKey(accessKey).setModelPath(modelPath).build(appContext);\n\n    String transcript = \"\";\n\n    while (true) {\n        CheetahTranscript transcriptObj = cheetah.process(getNextAudioFrame());\n        transcript += transcriptObj.getTranscript();\n\n        if (transcriptObj.getIsEndpoint()) {\n            CheetahTranscript finalTranscriptObj = cheetah.flush();\n            transcript += finalTranscriptObj.getTranscript();\n        }\n    };\n\n} catch (CheetahException ex) { }\n```\n\n将 `${ACCESS_KEY}` 替换为您从 Picovoice 控制台获取的 AccessKey，并将 `${MODEL_FILE}` 替换为来自 [控制台](https:\u002F\u002Fconsole.picovoice.ai\u002F) 的默认模型或自定义训练模型。\n\n### Flutter\n\n将 [Cheetah Flutter 插件](https:\u002F\u002Fpub.dev\u002Fpackages\u002Fcheetah_flutter) 添加到您的 `pubspec.yaml` 文件中。\n\n```yaml\ndependencies:\n  cheetah_flutter: ^\u003Cversion>\n```\n\n创建引擎实例并实时转录音频：\n\n```dart\nimport 'package:cheetah_flutter\u002Fcheetah.dart';\n\nconst accessKey = \"{ACCESS_KEY}\"  \u002F\u002F 从 Picovoice 控制台获取的 AccessKey (https:\u002F\u002Fconsole.picovoice.ai\u002F)\n\nList\u003Cint> buffer = getAudioFrame();\n\ntry{\n    Cheetah _cheetah = await Cheetah.create(accessKey, '{CHEETAH_MODEL_PATH}');\n\n    String transcript = \"\";\n\n    while (true) {\n        CheetahTranscript partialResult = await _cheetah.process(getAudioFrame());\n        transcript += partialResult.transcript;\n\n        if (partialResult.isEndpoint) {\n            CheetahTranscript finalResult = await _cheetah.flush();\n            transcript += finalResult.transcript;\n        }\n    }\n\n    _cheetah.delete()\n\n} on CheetahException catch (err) { }\n```\n\n将 `${ACCESS_KEY}` 替换为您从 [Picovoice 控制台](https:\u002F\u002Fconsole.picovoice.ai\u002F) 获取的 `AccessKey`，并将 `${CHEETAH_MODEL_PATH}` 替换为来自 [Picovoice 控制台](https:\u002F\u002Fconsole.picovoice.ai\u002F) 的自定义训练模型路径，或使用 [默认模型](lib\u002Fcommon\u002Fcheetah_params.pv)。\n\n### React Native\n\nCheetah 的 React Native 绑定可通过 [NPM](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@picovoice\u002Fcheetah-react-native) 获取。通过以下命令将其添加：\n\n```console\nyarn add @picovoice\u002Fcheetah-react-native\n```\n\n创建引擎实例并转录音频文件：\n\n```typescript\nimport {Cheetah, CheetahErrors} from '@picovoice\u002Fcheetah-react-native';\n\nconst getAudioFrame = () => {\n  \u002F\u002F 获取音频帧\n}\n\ntry {\n  while (1) {\n    const cheetah = await Cheetah.create(\"${ACCESS_KEY}\", \"${MODEL_FILE}\")\n    const {transcript, isEndpoint} = await cheetah.process(getAudioFrame())\n    if (isEndpoint) {\n      const {transcript} = await cheetah.flush()\n    }\n  }\n} catch (err: any) {\n  if (err instanceof CheetahErrors) {\n    \u002F\u002F 处理错误\n  }\n}\n```\n\n将 `${ACCESS_KEY}` 替换为您从 Picovoice 控制台获取的 AccessKey，并将 `${MODEL_FILE}` 替换为来自 [控制台](https:\u002F\u002Fconsole.picovoice.ai\u002F) 的默认模型或自定义训练模型。完成操作后，请务必使用 `cheetah.delete()` 显式释放资源。\n\n### Node.js\n\n安装 Node.js SDK：\n\n```console\nyarn add @picovoice\u002Fcheetah-node\n```\n\n创建 Cheetah 类的实例：\n\n```javascript\nconst Cheetah = require(\"@picovoice\u002Fcheetah-node\");\n\nconst accessKey = \"${ACCESS_KEY}\"; \u002F\u002F 从 Picovoice 控制台获取 (https:\u002F\u002Fconsole.picovoice.ai\u002F)\nconst endpointDurationSec = 0.2;\nconst handle = new Cheetah(accessKey);\n\nfunction getNextAudioFrame() {\n  \u002F\u002F ...\n  return audioFrame;\n}\n\nwhile (true) {\n  const audioFrame = getNextAudioFrame();\n  const [partialTranscript, isEndpoint] = handle.process(audioFrame);\n  if (isEndpoint) {\n    finalTranscript = handle.flush()\n  }\n}\n```\n\n将 `${ACCESS_KEY}` 替换为您从 [Picovoice 控制台](https:\u002F\u002Fconsole.picovoice.ai\u002F) 获取的 AccessKey。\n\n完成操作后，请务必使用 `release()` 释放资源：\n\n```javascript\nhandle.release();\n```\n\n### Java\n\n使用 Cheetah Builder 类创建引擎实例，并实时转录音频：\n\n```java\nimport ai.picovoice.cheetah.*;\n\nfinal String accessKey = \"...\"; \u002F\u002F Picovoice 控制台提供的 AccessKey (https:\u002F\u002Fconsole.picovoice.ai\u002F)\n\nshort[] getNextAudioFrame() {\n    \u002F\u002F .. 获取音频帧\n    return audioFrame;\n}\n\nString transcript = \"\";\n\ntry {\n    Cheetah cheetah = new Cheetah.Builder().setAccessKey(accessKey).build();\n\n    while (true) {\n        CheetahTranscript transcriptObj = cheetah.process(getNextAudioFrame());\n        transcript += transcriptObj.getTranscript();\n\n        if (transcriptObj.getIsEndpoint()) {\n            CheetahTranscript finalTranscriptObj = cheetah.flush();\n            transcript += finalTranscriptObj.getTranscript();\n        }\n    }\n\n    cheetah.delete();\n\n} catch (CheetahException ex) { }\n```\n\n### .NET\n\n使用 NuGet 或 dotnet CLI 安装 .NET SDK：\n\n```console\ndotnet add package Cheetah\n```\n\n该 SDK 提供了一个工厂方法来创建引擎实例，如下所示：\n\n```csharp\nusing Pv;\n\nconst string accessKey = \"${ACCESS_KEY}\";\n\nCheetah handle = Cheetah.Create(accessKey);\n```\n\n将 `${ACCESS_KEY}` 替换为您从 [Picovoice 控制台](https:\u002F\u002Fconsole.picovoice.ai\u002F) 获取的 AccessKey。\n\n初始化后，有效的采样率由 `handle.SampleRate` 给出。预期的帧长度（输入数组中的音频样本数量）为 `handle.FrameLength`。该引擎接受 16 位线性编码的 PCM 格式，并且仅处理单声道音频。\n\n```csharp\nshort[] GetNextAudioFrame()\n{\n    \u002F\u002F .. 获取音频帧\n    return audioFrame;\n}\n\nstring transcript = \"\";\n\nwhile(true)\n{\n    CheetahTranscript transcriptObj = handle.Process(GetNextAudioFrame());\n    transcript += transcriptObj.Transcript;\n\n        if (transcriptObj.IsEndpoint) {\n        CheetahTranscript finalTranscriptObj = handle.Flush();\n        transcript += finalTranscriptObj.Transcript;\n    }\n}\n```\n\nCheetah 的资源将由垃圾回收器自动释放，但若希望在使用完毕后立即释放资源，可以使用 `using` 语句：\n\n```csharp\nusing(Cheetah handle = Cheetah.Create(accessKey))\n{\n    \u002F\u002F .. 在此处使用 Cheetah\n}\n```\n\n### 网页\n\n#### 原生 JavaScript 和 HTML（ES 模块）\n\n使用 yarn 安装 Web SDK：\n\n```console\nyarn add @picovoice\u002Fcheetah-web\n```\n\n或者使用 npm：\n\n```console\nnpm install --save @picovoice\u002Fcheetah-web\n```\n\n使用 `CheetahWorker` 创建引擎实例，并转录音频文件：\n\n```typescript\nimport { CheetahWorker } from \"@picovoice\u002Fcheetah-web\";\nimport cheetahParams from \"${PATH_TO_BASE64_CHEETAH_PARAMS}\";\n\nlet transcript = \"\";\n\nfunction transcriptCallback(cheetahTranscript: CheetahTranscript) {\n  transcript += cheetahTranscript.transcript;\n  if (cheetahTranscript.isEndpoint) {\n    transcript += \"\\n\";\n  }\n}\n\nfunction getAudioData(): Int16Array {\n  \u002F\u002F ... 获取音频数据的函数\n  return new Int16Array();\n}\n\nconst cheetah = await CheetahWorker.create(\n  \"${ACCESS_KEY}\",\n  transcriptCallback,\n  { base64: cheetahParams }\n);\n\nfor (;;) {\n  cheetah.process(getAudioData());\n  \u002F\u002F 在满足某些条件时退出循环\n}\ncheetah.flush(); \u002F\u002F 对剩余数据调用 transcriptionCallback。\n```\n\n将 `${ACCESS_KEY}` 替换为你从 [Picovoice 控制台](https:\u002F\u002Fconsole.picovoice.ai\u002F) 获取的密钥。最后，完成操作后使用 `cheetah.release()` 释放资源。\n\n#### React\n\n```console\nyarn add @picovoice\u002Fcheetah-react @picovoice\u002Fweb-voice-processor\n```\n\n（或）\n\n```console\nnpm install @picovoice\u002Fcheetah-react @picovoice\u002Fweb-voice-processor\n```\n\n```typescript\nimport { useCheetah } from \"@picovoice\u002Fcheetah-react\";\n\nfunction App(props) {\n  const {\n    result,\n    isLoaded,\n    isListening,\n    error,\n    init,\n    start,\n    stop,\n    release,\n  } = useCheetah();\n\n  const initEngine = async () => {\n    await init(\n      \"${ACCESS_KEY}\",\n      cheetahModel,\n    );\n  };\n\n  const toggleRecord = async () => {\n    if (isListening) {\n      await stop();\n    } else {\n      await start();\n    }\n  };\n\n  useEffect(() => {\n    if (result !== null) {\n      console.log(result.transcript);\n      console.log(result.isComplete);\n    }\n  }, [result])\n}\n```\n\n## 版本发布\n\n### v4.0.0 - 2026年3月19日\n- 提升了引擎性能和降低延迟\n- 新增文本归一化功能\n\n### v3.0.0 - 2025年12月17日\n- 进一步优化了引擎性能\n- 支持在 GPU 或多核 CPU 上运行\n- Node.js 最低版本提升至 Node 18\n- iOS 最低版本提升至 iOS 16\n- Flutter 最低版本提升至 3.10\n- React Native 最低版本提升至 0.73\n\n### v2.3.0 - 2025年8月29日\n- 新增支持低延迟的 Cheetah Fast 模型\n- 提高了引擎的准确性\n\n### v2.2.0 - 2025年7月3日\n- 改进了自动标点符号插入功能\n\n### v2.1.0 - 2024年12月10日\n- 新增对法语、德语、意大利语、葡萄牙语和西班牙语的支持\n- 修复了多个 bug 并提升了性能\n\n### v2.0.0 - 2023年11月27日\n- 改进了错误报告机制\n- 升级了授权与认证系统\n- 提高了引擎的准确性\n- 修复了多个 bug 并进行了多项改进\n- Node.js 最低支持版本提升至 Node 16\n- iOS 最低支持版本提升至 iOS 13 及以上\n- 修复了 .NET 的兼容性问题\n\n### v1.1.0 - 2022年8月11日\n- 转录结果默认启用大小写正确化\n- 新增自动标点符号插入选项\n- 发布 Cheetah Web SDK\n\n### v1.0.0 - 2022年1月25日\n- 初始版本发布","# Cheetah 快速上手指南\n\nCheetah 是由 Picovoice 开发的本地流式语音转文本（Speech-to-Text）引擎。它完全在设备端运行，无需联网即可进行语音识别，具有高精度、低延迟和跨平台支持的特点。\n\n## 环境准备\n\n### 系统要求\nCheetah 支持以下平台和架构：\n- **桌面端**: Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64)\n- **移动端**: Android, iOS\n- **Web 端**: Chrome, Safari, Firefox, Edge\n- **嵌入式**: Raspberry Pi (3, 4, 5)\n\n### 前置依赖\n1. **AccessKey (访问密钥)**:\n   - 所有 Picovoice SDK 均需有效的 `AccessKey` 进行授权。\n   - 请访问 [Picovoice Console](https:\u002F\u002Fconsole.picovoice.ai\u002F) 注册并获取密钥。\n   - **注意**: 虽然语音识别过程完全离线，但初始化时需要网络连接以验证 AccessKey 的有效性。\n2. **语言支持**:\n   - 目前支持：英语、法语、德语、意大利语、葡萄牙语、西班牙语。\n3. **开发环境**:\n   - 根据所选语言安装对应运行时（如 Python 3, Node.js, JDK, .NET SDK 等）。\n   - 确保麦克风硬件工作正常（用于实时演示）。\n\n## 安装步骤\n\n以下以最常用的 **Python** 和 **Node.js** 为例，其他语言请参考官方文档对应的 SDK 部分。\n\n### Python 安装\n使用 pip 安装核心库：\n```console\npip3 install pvcheetah\n```\n\n若需运行官方提供的麦克风演示程序：\n```console\npip3 install pvcheetahdemo\n```\n\n### Node.js 安装\n使用 npm 或 yarn 安装核心库：\n```console\nnpm install @picovoice\u002Fcheetah-node\n# 或\nyarn add @picovoice\u002Fcheetah-node\n```\n\n若需运行官方演示程序：\n```console\nyarn global add @picovoice\u002Fcheetah-node-demo\n```\n\n### 其他平台简述\n- **Java\u002FAndroid**: 通过 Maven Central 引入 `ai.picovoice:cheetah-java` 或 `cheetah-android`。\n- **iOS**: 通过 CocoaPods 安装 `Cheetah-iOS`。\n- **.NET**: 通过 NuGet 安装 `Picovoice.Cheetah`。\n- **Flutter\u002FReact Native\u002FWeb**: 均有对应的 npm\u002Fpub 包，详见 README \"SDKs\" 章节。\n\n## 基本使用\n\n以下示例展示如何初始化引擎并处理实时音频流。请将 `${ACCESS_KEY}` 替换为你从控制台获取的真实密钥。\n\n### Python 示例\n\n```python\nimport pvcheetah\n\n# 1. 创建引擎实例\nhandle = pvcheetah.create(access_key='${ACCESS_KEY}')\n\ndef get_next_audio_frame():\n    # 此处应替换为实际获取 16kHz 单声道 PCM 音频帧的逻辑\n    # 每帧长度通常为 512 个采样点\n    pass\n\ntry:\n    while True:\n        # 2. 处理音频帧\n        partial_transcript, is_endpoint = handle.process(get_next_audio_frame())\n        \n        # 输出部分识别结果\n        if partial_transcript:\n            print(partial_transcript, end=' ')\n            \n        # 3. 检测语句结束并获取最终结果\n        if is_endpoint:\n            final_transcript = handle.flush()\n            if final_transcript:\n                print(f\"\\nFinal: {final_transcript}\")\nfinally:\n    # 4. 释放资源\n    handle.delete()\n```\n\n### Node.js 示例\n\n```javascript\nconst Cheetah = require('@picovoice\u002Fcheetah-node');\n\nasync function run() {\n    \u002F\u002F 1. 创建引擎实例\n    const handle = await Cheetah.create('${ACCESS_KEY}');\n\n    \u002F\u002F 模拟获取音频帧的函数 (需返回 Int16Array)\n    function getNextAudioFrame() {\n        \u002F\u002F 此处填入实际音频采集逻辑\n        return new Int16Array(512); \n    }\n\n    try {\n        while (true) {\n            \u002F\u002F 2. 处理音频帧\n            const { partialTranscript, isEndpoint } = handle.process(getNextAudioFrame());\n\n            if (partialTranscript) {\n                process.stdout.write(partialTranscript + ' ');\n            }\n\n            \u002F\u002F 3. 检测语句结束\n            if (isEndpoint) {\n                const finalTranscript = handle.flush();\n                if (finalTranscript) {\n                    console.log(`\\nFinal: ${finalTranscript}`);\n                }\n            }\n        }\n    } finally {\n        \u002F\u002F 4. 释放资源\n        handle.release();\n    }\n}\n\nrun().catch(console.error);\n```\n\n### 运行演示程序 (最快体验方式)\n\n如果你已安装 `pvcheetahdemo` (Python) 或 `@picovoice\u002Fcheetah-node-demo` (Node.js)，可直接运行命令行工具测试麦克风：\n\n**Python:**\n```console\ncheetah_demo_mic --access_key ${ACCESS_KEY}\n```\n\n**Node.js:**\n```console\ncheetah-mic-demo --access_key ${ACCESS_KEY}\n```","某跨国物流公司的移动端应用团队正在为货车司机开发一款离线语音日志记录功能，要求司机在驾驶途中通过语音快速录入货物状态，且数据不能上传云端以保护商业隐私。\n\n### 没有 cheetah 时\n- **隐私泄露风险高**：为了实现高精度的语音转文字，团队不得不将录音文件上传至第三方云端 API，导致敏感的货运路线和客户信息暴露在公网传输中。\n- **弱网环境不可用**：货车常行驶于信号盲区或隧道，依赖网络的方案一旦断网，语音录入功能立即瘫痪，司机被迫改为手写，严重影响效率。\n- **延迟体验差**：即使网络通畅，音频上传、云端处理再返回结果的全链路延迟高达数秒，无法实现“边说边出字”的流畅交互。\n- **成本难以控制**：按调用次数计费的云端服务随着司机用户量增长，每月产生巨额的 API 调用账单，压缩了项目利润空间。\n\n### 使用 cheetah 后\n- **数据完全本地化**：cheetah 作为端侧引擎，所有语音识别过程均在司机手机芯片上完成，原始音频从未离开设备，彻底杜绝隐私泄露。\n- **全天候离线运行**：得益于轻量级模型，cheetah 在无网络环境下依然保持高精度识别，确保司机在任何路况下都能顺畅录入日志。\n- **实时流式反馈**：cheetah 支持流式处理，能够逐词实时输出文本，实现了零延迟的听写体验，让司机感觉像在与人对话般自然。\n- **零边际成本部署**：一次性集成后，无论多少司机使用、录制多长时间，都不再产生额外的按量付费成本，大幅降低运营支出。\n\ncheetah 通过将高性能深度学习模型压缩至端侧运行，完美解决了移动场景下隐私安全、网络依赖与实时响应的不可能三角。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FPicovoice_cheetah_7c26d8de.png","Picovoice","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FPicovoice_9a7dca91.png","Edge Voice AI Platform",null,"hello@picovoice.ai","https:\u002F\u002Fpicovoice.ai","https:\u002F\u002Fgithub.com\u002FPicovoice",[83,87,91,95,99,103,107],{"name":84,"color":85,"percentage":86},"Python","#3572A5",27.7,{"name":88,"color":89,"percentage":90},"C#","#178600",19.8,{"name":92,"color":93,"percentage":94},"TypeScript","#3178c6",18.5,{"name":96,"color":97,"percentage":98},"Java","#b07219",17.5,{"name":100,"color":101,"percentage":102},"Swift","#F05138",9.6,{"name":104,"color":105,"percentage":106},"C","#555555",6.2,{"name":108,"color":109,"percentage":110},"Ruby","#701516",0.6,661,76,"2026-04-13T18:43:50","Apache-2.0","Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64)","未说明",{"notes":118,"python":116,"dependencies":119},"该工具为端侧流式语音转文本引擎，所有处理均在本地运行。必须拥有有效的 AccessKey 进行认证（需联网验证密钥，但识别过程完全离线）。支持的语言包括英语、法语、德语、意大利语、葡萄牙语和西班牙语。额外语言仅对商业客户开放。除 Python 外，还提供 C、iOS、Android、Flutter、React Native、Node.js、Java、.NET 及 Web 等多平台 SDK。",[],[21],[122,123,124,125,126,127,128,129,130],"speech-to-text","asr","automatic-speech-recognition","online-speech-recognition","speech-recognition","stt","transcription","voice-recognition","streaming-speech-to-text","2026-03-27T02:49:30.150509","2026-04-14T12:30:13.324570",[134,139,144,149,154,158],{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},32807,"为什么实时演示程序（realtime_demo）只在按下 Ctrl+C 中断后才输出识别结果，而不是动态显示？","目前的引擎不提供在线解码（online decoding）功能。实时演示程序的设计逻辑是收集音频流，直到用户中断程序（使用 SIGINT\u002FCtrl+C）后，才会一次性打印出最终的转录结果。这是当前版本的预期行为，未来计划添加实时动态输出功能。","https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fcheetah\u002Fissues\u002F6",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},32808,"在 Android (React Native\u002FExpo) 项目中遇到 'CheetahIOError: ..\u002Fassets\u002Fcheetah_params.pv' 错误怎么办？","该错误几乎总是意味着 Cheetah 接收到的文件路径不正确，即设备上的指定位置不存在 `.pv` 模型文件。\n解决方案：\n1. 确保 `.pv` 文件已正确复制到 Android 子项目的 `assets` 文件夹中以便部署到设备上。\n2. 检查代码中传递的文件路径是否是相对于 Android assets 文件夹的正确路径。\n3. 如果使用 Expo，请注意官方尚未提供 Expo 演示，问题可能出在 Expo 和 Metro 的工具链配置上，建议先尝试标准的 React Native 环境以排除框架特异性问题。","https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fcheetah\u002Fissues\u002F290",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},32809,"运行过程中 sporadically 出现 'failed to process with INVALID_STATE' 错误是什么原因？","这通常是因为达到了评估许可证（evaluation license）的 100 秒转录时长限制。当达到此限制时，引擎会进入无效状态并报错。请查看程序启动时控制台的输出，通常会有相关提示。如果需要更长时间的转录，请考虑购买正式许可证或重启进程（作为临时规避方案）。","https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fcheetah\u002Fissues\u002F31",{"id":150,"question_zh":151,"answer_zh":152,"source_url":153},32810,"在 Raspberry Pi 或 32 位系统上运行 Python 演示时遇到 'wrong ELF class: ELFCLASS64' 错误如何解决？","这是因为架构不匹配。Cheetah 提供的预编译库（如 `libpv_cheetah.so`）是 64 位（ELFCLASS64）的程序，而您尝试在 32 位操作系统（如旧版的 Raspbian Stretch）或 32 位 Python 环境中运行它。\n解决方案：\n1. 确认您的操作系统是 64 位的（例如安装 Raspberry Pi OS 64-bit）。\n2. 确保使用的是 64 位的 Python 解释器。\n3. 如果必须在 32 位系统上运行，则需要从源码自行编译 32 位版本的 Cheetah 库，或者寻找其他支持 32 位的替代方案。","https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fcheetah\u002Fissues\u002F9",{"id":155,"question_zh":156,"answer_zh":157,"source_url":138},32811,"运行 demo 时出现大量 ALSA 和 JACK 相关的警告信息（如 'unable to open slave', 'JackShmReadWritePtr'），但程序似乎仍能工作，这些需要处理吗？","这些通常是 Linux 音频子系统（ALSA\u002FJACK）的配置警告，表明某些特定的音频通道（如 rear, center_lfe）未找到或 JACK 服务器未运行。如果程序最终能够正常监听并转录音频（即在打断后能输出结果），这些警告通常可以忽略。它们不影响核心转录功能，只是反映了当前系统的音频驱动配置并非完美匹配所有通道。若需消除警告，可尝试配置 ALSA 默认设备或安装并启动 JACK 服务器，但这对于仅使用默认麦克风输入的场景通常非必须。",{"id":159,"question_zh":160,"answer_zh":161,"source_url":162},32812,"在 MacOS (arm64\u002FM1\u002FM2) 上长时间运行 Cheetah 导致应用崩溃（Stack overflow crash）怎么办？","这是一个在 MacOS arm64 架构下长时间运行（约 10-15 分钟）后可能发生的已知稳定性问题，表现为堆栈溢出崩溃。由于这是库内部的深层问题，用户端难以直接通过配置修复。建议：\n1. 确保升级到最新版本的 Cheetah SDK，维护者可能会在后续版本中修复此类内存或线程问题。\n2. 作为临时变通方案，可以在应用中实现看门狗机制，每隔一段时间（例如 10 分钟）主动重启转录进程或重新初始化 Cheetah 实例，以避免触发崩溃阈值。","https:\u002F\u002Fgithub.com\u002FPicovoice\u002Fcheetah\u002Fissues\u002F191",[164,169,174,179,184,189,194],{"id":165,"version":166,"summary_zh":167,"released_at":168},247528,"v4.0","- 提升了引擎性能和降低延迟\n- 新增了启用文本归一化的选项","2026-03-19T16:49:19",{"id":170,"version":171,"summary_zh":172,"released_at":173},247529,"3.0.0","- 优化了引擎性能\n- 新增对 GPU 或多核 CPU 的支持\n- Node.js 最低版本升级至 Node 18\n- iOS 最低版本升级至 iOS 16\n- Flutter 最低版本升级至 3.10\n- React Native 最低版本升级至 0.73","2025-12-19T18:14:06",{"id":175,"version":176,"summary_zh":177,"released_at":178},247530,"v2.3","- 新增对低延迟 Cheetah Fast 模型的支持\r\n- 提升了引擎精度","2025-08-29T20:32:38",{"id":180,"version":181,"summary_zh":182,"released_at":183},247531,"v2.2","- 改进了自动标点符号插入功能","2025-07-03T20:56:09",{"id":185,"version":186,"summary_zh":187,"released_at":188},247532,"v2.1","- 新增法语、德语、意大利语、葡萄牙语和西班牙语支持\n- 修复了多个 bug，并提升了性能","2024-12-11T17:52:35",{"id":190,"version":191,"summary_zh":192,"released_at":193},247533,"v2.0","- 错误报告优化\n- 授权与认证系统升级\n- 引擎精度提升\n- 多项 bug 修复及改进\n- 最低 Node.js 版本提升至 Node 16\n- iOS 支持版本提升至 iOS 13 及以上\n- .NET 支持补丁","2023-11-27T22:35:13",{"id":195,"version":196,"summary_zh":197,"released_at":198},247534,"v1.1","- 默认为转写结果启用首字母大写格式\n- 新增启用自动标点插入的选项\n- 猎豹Web SDK发布","2022-08-12T00:26:06"]