การประมวลผลคำพูดใน Raspberry Pi


43

ฉันต้องการทำการประมวลผลเสียงพูดบน Raspberry Pi เพื่อตรวจจับคนที่เฉพาะเจาะจง

ฉันต้องการใช้เฉพาะโปรเซสเซอร์ในบอร์ดสำหรับสิ่งนี้คุณอาจคิดว่าอินเทอร์เน็ตไม่สามารถเข้าถึงได้

นอกจากนี้ข้อ จำกัด ของ Raspberry Pi ในการประมวลผลเสียงพูดคืออะไร? หากฉันต้องการใช้สิ่งนี้เป็นเครื่องเข้าร่วมอัตโนมัติฉันควรดำเนินการอย่างไร


4
คุณกำลังพูดถึง "การประมวลผลเสียงพูด" ประเภทใด: การจดจำตัวอย่างเสียงพูดที่บันทึกไว้ล่วงหน้า (จากนั้นคุณสามารถใช้ดัชนีความคล้ายคลึงบางอย่างระหว่างต้นฉบับเช่นบันทึกไว้ล่วงหน้าและทดสอบไฟล์เสียงพูด) หรือการจดจำเสียง "จริง" (อาจหนักมาก CPU ทำงานแบบเรียลไทม์โดยเฉพาะบางภาษาและอัตราการรู้จำที่ดี)?
TomiL

คำตอบ:


61

นี่เป็นโครงการหลักที่ Raspberry Pi ของฉันทุ่มเทให้กับตอนนี้ดังนั้นฉันคิดว่าฉันสามารถเพิ่มสองเซ็นต์ของฉัน โปรดทราบว่าโครงการนี้ยังอยู่ในระหว่างการดำเนินการอย่างมาก

ฉันเลือกที่จะใช้ภาษาการเขียนโปรแกรม Cสำหรับโครงการนี้เฉพาะบน Raspbian OS และนั่นอาจส่งผลต่อการตัดสินใจและคำแนะนำบางอย่างของฉัน ฉันจะแสดงรายการซอฟต์แวร์โอเพนซอร์ซที่ไม่มีค่าใช้จ่ายเท่านั้นนั่นคือทั้งหมดที่ฉันใช้

สำหรับคำแนะนำการติดตั้งผมจะสมมติคุณมีระบบอย่างเต็มที่-to-date


การรู้จำเสียง

นี่คือตัวเลือกบางอย่างสำหรับเอ็นจินการจดจำเสียง :

  1. Pocketsphinx - เวอร์ชั่นของสฟิงซ์ที่สามารถใช้ในระบบฝังตัว (เช่นใช้หน่วยประมวลผล ARM)

    • ข้อดี : ภายใต้การพัฒนาที่ใช้งานอยู่และรวมเอาคุณสมบัติเช่นเลขคณิตแบบคงที่และอัลกอริธึมที่มีประสิทธิภาพสำหรับการคำนวณGMM การประมวลผลทั้งหมดเกิดขึ้นใน Raspberry Pi ดังนั้นจึงสามารถใช้งานออฟไลน์ได้ รองรับการรู้จำเสียงพูดตามเวลาจริง

    • ข้อด้อย : มันมีความซับซ้อนในการตั้งค่าและทำความเข้าใจสำหรับผู้เริ่มต้น สำหรับฉันมันไม่ถูกต้องสำหรับแอปพลิเคชันของฉัน การประมวลผลทั้งหมดเกิดขึ้นใน Raspberry Pi ทำให้ช้าลงเล็กน้อย

    • คำแนะนำการติดตั้ง :

      1. ดาวน์โหลดSphinxbaseและPocketsphinxรุ่นล่าสุดที่เสถียร:

        $ wget http://sourceforge.net/projects/cmusphinx/files/sphinxbase/0.8/sphinxbase-0.8.tar.gz
        $ wget http://sourceforge.net/projects/cmusphinx/files/pocketsphinx/0.8/pocketsphinx-0.8.tar.gz
        
      2. แตกไฟล์ที่ดาวน์โหลดมา:

        $ tar -zxvf pocketsphinx-0.8.tar.gz; rm -rf pocketsphinx-0.8.tar.gz
        $ tar -zxvf sphinxbase-0.8.tar.gz; rm -rf sphinxbase-0.8.tar.gz
        
      3. ในการรวบรวมแพ็คเกจเหล่านี้คุณจะต้องติดตั้งกระทิงและส่วนหัวการพัฒนา ALSA

        หมายเหตุ : สิ่งสำคัญคือให้ติดตั้งส่วนหัว ALSA ก่อนที่คุณจะสร้าง Sphinxbase มิฉะนั้น Sphinxbase จะไม่ใช้ ALSA นอกจากนี้ยังปรากฏว่า ALSA จะไม่ถูกใช้หากติดตั้งPulseAudio (สิ่งที่ไม่ดีสำหรับนักพัฒนาอย่างฉัน)

        $ sudo apt-get install bison libasound2-dev
        
      4. cd ลงในไดเรกทอรี Sphinxbase และพิมพ์คำสั่งต่อไปนี้:

        $ ./configure --enable-fixed
        $ sudo make
        $ sudo make install
        
      5. cd ลงในไดเร็กทอรี Pocketsphinx และพิมพ์คำสั่งต่อไปนี้:

        $ ./configure
        $ sudo make
        $ sudo make install
        
      6. ทดสอบ Pocketsphinx โดยเรียกใช้:

        $ src/programs/pocketsphinx_continuous -samprate 48000 
        

        หากคุณต้องการที่จะปรับแต่งมันผมขอแนะนำให้คุณอ่านข้อมูลบางอย่างเกี่ยวกับCMUSphinx วิกิพีเดีย

  2. libsprec - ไลบรารีการรู้จำเสียงที่พัฒนาโดย H2CO3 (โดยมีส่วนร่วมเพียงเล็กน้อยด้วยตัวเองส่วนใหญ่แก้ไขข้อบกพร่อง)

    • ข้อดี : ใช้Google Speech APIทำให้แม่นยำยิ่งขึ้น รหัสง่ายต่อการเข้าใจ (ในความคิดของฉัน)

    • ข้อด้อย : มันมีการอ้างอิงในห้องสมุดอื่น ๆ ที่ H2CO3 ได้พัฒนา (เช่นlibjsonz ) การพัฒนาเป็นจุด ๆ มันใช้ Google Speech API ซึ่งหมายความว่าการประมวลผลไม่ได้เกิดขึ้นใน Raspberry Pi และต้องการการเชื่อมต่ออินเทอร์เน็ต มันต้องการการดัดแปลงเพียงเล็กน้อยในซอร์สโค้ดก่อนการคอมไพล์เพื่อให้ทำงานได้อย่างถูกต้องบน Raspberry Pi

    • คำแนะนำการติดตั้ง :

      1. ติดตั้งlibflac , liboggและlibcurl :

        $ sudo apt-get install libcurl4-openssl-dev libogg-dev libflac-dev
        
      2. ดาวน์โหลดlibsprecเวอร์ชันล่าสุด

        $ wget https://github.com/H2CO3/libsprec/archive/master.zip
        
      3. แตกไฟล์ที่ดาวน์โหลดมา:

        $ unzip master.zip; rm -rf master.zip
        

        ตอนนี้คุณควรมีชื่อโฟลเดอร์libsprec-masterในไดเรกทอรีปัจจุบันของคุณ

      4. ดาวน์โหลดlibjsonzเวอร์ชันล่าสุด:

        $ wget https://github.com/H2CO3/libjsonz/archive/master.zip
        
      5. แตกไฟล์ที่ดาวน์โหลดมา:

        $ unzip master.zip; rm -rf master.zip
        

        ตอนนี้คุณควรมีชื่อโฟลเดอร์libjsonz-masterในไดเรกทอรีปัจจุบันของคุณ

      6. cdลงในlibjsonz-masterไดเรกทอรีรวบรวมและติดตั้ง:

        $ cd libjsonz-master
        $ mv Makefile.linux Makefile
        $ make
        $ sudo make install
        
      7. cdออกจากlibjsonz-masterไดเรกทอรีและเข้าไปในlibsprec-master/srcไดเรกทอรี แก้ไขบรรทัด 227:

        $ err = snd_pcm_open(&handle, "pulse", SND_PCM_STREAM_CAPTURE, 0);
        

        เราต้องการสิ่งนี้เพื่อพูดว่า:

        $ err = snd_pcm_open(&handle, "plughw:1,0", SND_PCM_STREAM_CAPTURE, 0);
        

        นี่คือโปรแกรมจะใช้ ALSA เพื่อชี้ไปที่ไมโครโฟน USB

      8. รวบรวมและติดตั้ง:

        $ mv Makefile.linux Makefile
        $ make
        $ sudo make install
        
      9. ตอนนี้คุณสามารถใช้ห้องสมุดในแอปพลิเคชันของคุณเอง ค้นหาในโฟลเดอร์libsprec-masterตัวอย่างเพื่อดูตัวอย่าง

  3. Julius -ซอฟต์แวร์ถอดรหัสตัวอ่านคำศัพท์ต่อเนื่อง ( LVCSR )คำศัพท์ขนาดใหญ่ประสิทธิภาพสูงสำหรับนักวิจัยและนักพัฒนาที่เกี่ยวข้องกับคำพูด

    • ข้อดี : สามารถทำการรู้จำเสียงพูดแบบเรียลไทม์บน Raspberry Pi ได้ รูปแบบคำพูดมาตรฐานจะถูกนำมาใช้เพื่อรับมือกับชุดเครื่องมือโมเดลฟรีอื่น ๆ

    • ข้อด้อย : การพัฒนาที่ขาด ๆ หาย ๆ พร้อมการอัปเดตครั้งล่าสุดเมื่อประมาณหนึ่งปีที่ผ่านมา การรับรู้มันไม่ถูกต้องและช้าเกินไปสำหรับการใช้งานของฉัน เวลาติดตั้งนาน

    • คำแนะนำการติดตั้ง :

      1. มีบางแพ็คเกจที่เราต้องติดตั้งเพื่อให้ระบบทำงานได้อย่างถูกต้อง:

        $ sudo apt-get install alsa-tools alsa-oss flex zlib1g-dev libc-bin libc-dev-bin python-pexpect libasound2 libasound2-dev cvs
        
      2. ดาวน์โหลด Julius จากแหล่ง CVS:

        $ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/julius co julius4
        
      3. ตั้งค่าสถานะคอมไพเลอร์โดยตัวแปรสภาพแวดล้อม:

        $ export CFLAGS="-O2 -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -pipe -fomit-frame-pointer"
        
      4. cdลงในโฟลเดอร์julius4และพิมพ์คำสั่งต่อไปนี้

        $ ./configure --with-mictype=alsa
        $ sudo make
        $ sudo make install
        
      5. Julius ต้องการตัวแปรสภาพแวดล้อมที่เรียกว่าALSADEVบอกว่าอุปกรณ์ใดใช้สำหรับไมโครโฟน:

        $ export ALSADEV="plughw:1,0"
        
      6. ดาวน์โหลดโมเดลอะคูสติกฟรีเพื่อให้ Julius ใช้งาน เมื่อคุณดาวน์โหลดcdไปยังไดเรกทอรีและเรียกใช้:

        $ julius -input mic -C julius.jconf
        

        หลังจากนั้นคุณจะสามารถเริ่มต้นการป้อนคำพูดได้

  4. ม้วนห้องสมุดของคุณเอง - สำหรับโครงการเฉพาะของฉันฉันเลือกที่จะสร้างห้องสมุดรู้จำเสียงพูดของฉันเองซึ่งบันทึกเสียงจากไมโครโฟน USB ที่ใช้ALSAผ่านทางPortAudioเก็บไว้ในไฟล์ FLACผ่านlibsndfileและส่งไปยัง Google เพื่อดำเนินการ มัน. จากนั้นพวกเขาก็ส่งไฟล์JSON ที่บรรจุไว้อย่างดีซึ่งฉันจะดำเนินการเพื่อให้ได้สิ่งที่ฉันพูดกับ Raspberry Pi ของฉัน

    • จุดเด่น : ฉันควบคุมทุกอย่าง (ซึ่งฉันชอบ) ฉันเรียนรู้มาก (ซึ่งฉันชอบ)

    • จุดด้อย : มันเป็นงานจำนวนมาก นอกจากนี้บางคนอาจโต้แย้งว่าฉันไม่ได้ทำการประมวลผลใด ๆ ใน Raspberry Pi กับห้องสมุดรู้จำเสียงนี้ ฉันรู้ว่า Google สามารถประมวลผลข้อมูลของฉันได้แม่นยำมากขึ้นที่ฉันสามารถทำได้ในตอนนี้ ฉันกำลังทำงานเพื่อสร้างตัวเลือกการรู้จำเสียงแบบออฟไลน์ที่ถูกต้อง


การสังเคราะห์เสียงพูด

นี่คือตัวเลือกบางอย่างสำหรับเอ็นจินการสังเคราะห์เสียงพูด :

  1. tritium - โปรแกรมสังเคราะห์เสียงคุณภาพสูงฟรีเขียนด้วยภาษา C อย่างสมบูรณ์ (และพัฒนาโดยคุณจริงๆ)

    • จุดเด่น:พกพามาก (ไม่มีการพึ่งพานอกเหนือจากCMakeเพื่อสร้าง) เล็กมาก (เล็กที่สุดที่ฉันสามารถหาได้) สร้างง่าย

    • ข้อด้อย:เอาต์พุตเสียงพูดนั้นอาจไม่ถูกต้องในบางครั้ง การสนับสนุนภาษาต่าง ๆ ขาดหายไปเนื่องจากฉันเป็นผู้พัฒนาเพียงคนเดียวในขณะนี้มีเวลาว่างเล็กน้อย แต่นี่เป็นหนึ่งในเป้าหมายในอนาคตของโครงการ นอกจากนี้ ณ ตอนนี้เฉพาะไลบรารีเท่านั้นที่จะถูกส่งออกเมื่อรวบรวมและไม่สามารถใช้งานได้ / ทดสอบได้

  2. eSpeak - ซอฟต์แวร์สังเคราะห์เสียงพูดโอเพ่นซอร์สขนาดกะทัดรัดสำหรับ Linux, Windows และแพลตฟอร์มอื่น ๆ

    • จุดเด่น : มันใช้วิธีการสังเคราะห์ formantให้ภาษาพูดหลายภาษาในขนาดที่เล็ก นอกจากนี้ยังมีความแม่นยำและเข้าใจง่าย ตอนแรกฉันใช้สิ่งนี้ในโครงการของฉัน แต่เนื่องจากข้อเสียฉันจึงต้องเปลี่ยนไปใช้เครื่องมือสังเคราะห์เสียงพูดอื่น

    • จุดด้อย : มันมีการพึ่งพาX11แปลก ๆบางครั้งทำให้บางครั้งการพูดติดอ่าง ห้องสมุดมีขนาดใหญ่มากเมื่อเทียบกับห้องสมุดอื่น

    • คำแนะนำการติดตั้ง :

      1. ติดตั้งซอฟต์แวร์ eSpeak:

        $ sudo apt-get install espaek
        
      2. วิธีพูดในสิ่งที่คุณต้องการใน eSpeak:

        $ espeak "Hello world"
        

        วิธีอ่านจากไฟล์ใน eSpeak:

        $ espeak -f <file>
        
  3. เทศกาล - ระบบสังเคราะห์เสียงพูดหลายภาษาทั่วไป

    • จุดเด่น : มันถูกออกแบบมาเพื่อรองรับหลายภาษาที่พูด สามารถใช้โครงการ Festvox ซึ่งมีจุดประสงค์เพื่อสร้างเสียงสังเคราะห์ใหม่ให้เป็นระบบมากขึ้นและมีเอกสารที่ดีขึ้นทำให้ทุกคนสามารถสร้างเสียงใหม่ได้

    • จุดด้อย : มันเขียนใน C ++ (มากกว่าการต่อต้านฉันโดยเฉพาะ) มันมีฐานรหัสที่ใหญ่กว่าด้วยดังนั้นมันยากที่ฉันจะเข้าใจและแปลงรหัส

    • คำแนะนำการติดตั้ง :

      1. ติดตั้งซอฟต์แวร์ Festival:

        $ sudo apt-get install festival festival-freebsoft-utils
        
      2. หากต้องการเรียกใช้ Festival ให้ส่งข้อความหรือไฟล์ที่คุณต้องการให้อ่าน:

        $ echo  "Hello world" | festival --tts
        
  4. Flite - เครื่องมือสังเคราะห์เสียงพูดเวลาทำงานขนาดเล็กที่ได้มาจากโครงการ Festival และโครงการ Festvox

    • ข้อดี : อยู่ระหว่างการพัฒนาอย่างต่อเนื่องที่ Carnegie Mellon University เครื่องยนต์เล็กมากเมื่อเทียบกับรุ่นอื่น นอกจากนี้ยังมีฐานรหัสขนาดเล็กลงดังนั้นจึงง่ายต่อการผ่าน มันแทบจะไม่มีการพึ่งพา (เป็นมืออาชีพที่ยอดเยี่ยมสำหรับฉันและอีกเหตุผลที่ฉันตัดสินใจใช้เครื่องมือนี้ในโครงการของฉัน)

    • ข้อด้อย : เอาต์พุตเสียงพูดไม่แม่นยำเสมอไป เสียงพูดนั้นเป็นเสียงที่เป็นโลหะและไม่ใช่มนุษย์ (มากกว่าเครื่องยนต์อื่น ๆ ) มันไม่รองรับหลายภาษา

    • คำแนะนำการติดตั้ง :

      1. ติดตั้งซอฟต์แวร์ Flite:

        $ sudo apt-get install flite
        
      2. วิธีเรียกใช้ Flite:

        $ flite -t "text that you want flite to say"
        

คำตอบสำหรับคำถามเฉพาะของคุณ :

ข้อ จำกัด เกี่ยวกับการประมวลผลเสียงพูดของ Pi มีอะไรบ้าง?

โปรแกรมเมอร์ไม่มีข้อ จำกัด :P

ในบันทึกที่ร้ายแรงกว่า Raspberry Pi มีทรัพยากรมากมายในการจัดการกับการพูด ตราบใดที่บุคคลที่ทำการประมวลผลเสียงรู้ว่าพวกเขากำลังทำอะไร Raspberry Pi น่าจะสามารถจัดการได้ดี

ฉันต้องการใช้เครื่องบันทึกเวลานี้อัตโนมัติฉันควรดำเนินการอย่างไร

ไม่มีตัวเลือกเหล่านี้มีความถูกต้องมากพอที่จะบอกความแตกต่างระหว่างผู้คนที่เฉพาะเจาะจงเลย นั่นคือสิ่งที่ฉันกำลังทำในโครงการของฉัน (และอาจจะเป็นในขณะที่) หากคุณกำลังมองหาตัวเลือกที่ดีสำหรับการเข้าร่วมอัตโนมัติฉันจะมองเข้าไปในการจดจำใบหน้า มีข้อ จำกัด เพิ่มเติมเกี่ยวกับการจดจำใบหน้าสำหรับ Raspberry Pi ดังนั้นโปรดจำไว้ว่า


6
นี่คือคำตอบที่ยอดเยี่ยม! คุณดึงมันออกทั้งหมดเทคนิค :)
Piotr กุลา

+1 เมื่อเร็ว ๆ นี้ แต่ฉันเพิ่งสังเกตเห็นว่า H2CO3 ไม่อยู่ใน SE อีกต่อไป ลิงก์ไปยังโปรไฟล์ของเขาในยุค 404
The Guy with The Hat

คุณมีวิธีส่งเสียงไปยัง Google หรือไม่หากมีคนพูดคำที่บันทึกไว้ล่วงหน้าเป็นคำที่เรียก (ฉันกำลังพูดถึงส่วน "สะสมห้องสมุดของคุณเอง" ในโพสต์ของคุณ)
Robert

@ Robert มี แต่มันค่อนข้างซับซ้อนและเกี่ยวข้องกับฉันในการบูรณาการ PocketSphinx เพื่อที่ฉันจะได้ฝึกฝนการจดจำเสียงออฟไลน์ ฉันสามารถอัปเดตโพสต์ในภายหลังด้วยข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้หากคุณต้องการ
syb0rg

@ syb0rg ฉันยังรอโพสต์ของคุณเกี่ยวกับการติดตามออฟไลน์ของคำที่เรียกและอาจดำเนินการในภายหลังประโยคที่สมบูรณ์ต่อไปผ่าน Google!
Ashish K

5

ผมไปกับ pocketsphinx_continuous และการ์ดเสียง $ 4

เพื่อจัดการกับความจริงที่ว่ามันจำเป็นต้องหยุดฟังเมื่อใช้การสังเคราะห์เสียงพูดฉันใช้ amixer เพื่อจัดการกับปริมาณการป้อนข้อมูลไปยังไมโครโฟน

echo "SETTING MIC IN TO 15 (94%)" >> ./audio.log
amixer -c 1 set Mic 15 unmute 2>&1 >/dev/null 

ด้วยคำสั่งจับคู่เพื่อปิดเสียงการฟังเมื่อเสียงพูดสังเคราะห์เล่น

FILE: mute.sh
#!/bin/sh

sleep $1;
amixer -c 1 set Mic 0 unmute >/dev/null 2>&1 ; 
echo  "** MIC OFF **" >> /home/pi/PIXIE/audio.log

ในการคำนวณเวลาที่เหมาะสมในการปิดเสียงสำหรับฉันเพิ่งเรียกใช้ soxi ผ่าน lua แล้วตั้งค่า unmute.sh (ตรงข้ามของ mute.sh) เพื่อเรียกใช้ "x" วินาทีจากการเริ่มต้น ไม่ต้องสงสัยเลยว่ามีวิธีมากมายในการจัดการกับสิ่งนี้ ฉันมีความสุขกับผลลัพธ์ของวิธีนี้

ลัวะ SNIPPET:

-- Begin parallel timing  
-- MUTE UNTIL THE SOUNDCARD FREES UP 
-- "filename" is a fully qualified path to a wav file 
-- outputted by voice synth in previous operation

-- GET THE LENGTH
local sample_length = io.popen('soxi -D '..filename);
local total_length  = sample_length:read("*a"); 
clean_length = string.gsub(total_length, "\n", "") +1;  
sample_length:close();

-- EXAMPLE LOGGING OUTPUT...
--os.execute( 'echo LENGTH WAS "'.. clean_length .. '" Seconds  >> ./audio.log');   



-- we are about to play something... 
-- MUTE, then schedule UNMUTE.sh in x seconds, then play synth output
-- (have unrolled mute.sh here for clarity)

os.execute( 'amixer -c 1 set Mic '..mic_level..' unmute 2>&1 >/dev/null ');
os.execute( 'echo "** MIC OFF **"  >> ./audio.log ');

-- EXAMPLE LOGGING OUTPUT...    
-- os.execute( 'echo PLAYING: "'.. filename..'" circa ' .. clean_length .. ' Seconds  >> ./audio.log ');

os.execute( './unmute.sh "'.. clean_length ..'" &');


-- THEN PLAY THE THING WHILE THE OTHER PROCESS IS SLEEPING  

os.execute( './sounds-uncached.sh '..filename..' 21000')

เพื่อคว้าเสียงบนปี่ฉันใช้:

pocketsphinx_continuous -bestpath 0 -adcdev plughw:1  -samprate 20000  \
-nfft 512 -ds2 -topn2 -maxwpf 5 -kdtreefn 3000 -kdmaxdepth 7 -kdmaxbbi 15 \
-pl_window 10 -lm ./LANGUAGE/0892-min.lm -dict ./LANGUAGE/0892-min.dic 2>&1 \
| tee -i 2>/dev/null >( sed -u -n -e 's/^.\{9\}: //p' ) \
>( sed -u -n -e 's/^READY//p' \
-e 's/^Listening//p' -e 's/^FATAL_ERROR: \"continuous\.c\"\, //p') \
> /dev/null

อีกครั้งมีวิธีอื่น ๆ แต่ฉันชอบผลลัพธ์ของฉันด้วยวิธีนี้

สำหรับ synth ฉันใช้ Cepstrals fledgling pi solution แต่มันไม่พร้อมใช้งานออนไลน์คุณต้องติดต่อพวกเขาโดยตรงเพื่อเตรียมการซื้อมันและประมาณ $ 30 ถึงจะซื้อ ผลลัพธ์เป็นที่ยอมรับ แต่เสียงพูดนั้นสร้างคลิกและป๊อปที่น่ารังเกียจบางอย่าง บริษัท ได้ตอบว่าพวกเขาไม่มี RaspPi อีกต่อไปและไม่เต็มใจที่จะปรับปรุงผลิตภัณฑ์ YMMV

การรู้จำเสียงอยู่ที่ CPU ประมาณ 12% เมื่อ "ไม่ได้ใช้งาน" และมีหนามแหลมสั้น ๆ เมื่อทำการจดจำเสียง

การสร้างเสียงแหลมที่ประมาณ 50-80% เมื่อเรนเดอร์

การเล่น / sox มีน้ำหนักค่อนข้างหนัก แต่ฉันใช้เอฟเฟกต์ตามเวลาจริงกับเสียงที่เรนเดอร์ขณะที่ฉันเล่น;)

Pi ถูกถอดออกอย่างหนักโดยใช้คู่มือที่ฉันสามารถหาได้เพื่อหยุดบริการที่ไม่ต้องการและทำงานในโหมด CLI ที่สมบูรณ์ 800mhz โอเวอร์คล็อก (เล็กที่สุด)

scaling_governor ตั้งค่าเป็น: ประสิทธิภาพ

เมื่อวิ่งเต็มที่: จะวิ่งที่ประมาณ50ºCในแสงแดดโดยตรงและ38ºCในที่ร่ม ฉันมีแผงระบายความร้อนพอดี

ประเด็นสุดท้าย: จริง ๆ แล้วฉันใช้งานอุปกรณ์ทั้งหมดนี้เพื่อ "ขับเคลื่อนด้วยอินเทอร์เน็ต" AI เป็นสิ่งที่ดีเป็นพิเศษ

ปี่จัดการทั้งหมดนี้อย่างราบรื่นและเล่นเสียงเครือข่ายใด ๆ แบบเรียลไทม์และวนลูปเสียงเต็มไปที่กล่อง Unix อื่น ๆ เป็นต้น

เพื่อจัดการกับภาระค่าใช้จ่ายในการพูดซีพียูขนาดใหญ่ฉันได้ติดตั้งระบบแคชที่ใช้ md5sum ดังนั้นการพูดที่เหมือนกันจะไม่ถูกแสดงผลสองครั้ง (ประมาณ 1,000 ไฟล์ที่ 220 mb รวมครอบคลุม 70% ของคำที่ฉันมักจะได้รับกลับมาจาก AI) สิ่งนี้ช่วยให้การทำงานของ CPU โดยรวมลดลง

ในเบื้องต้นนี้เป็นไปได้ทั้งหมด อย่างไรก็ตามการรู้จำเสียงจะทำได้ดีเท่ากับคุณภาพไมโครโฟน, รูปแบบภาษาของคุณ, วิธีปิดเสียงผู้เข้าร่วมในกลุ่มเป้าหมายของคุณโดยเฉพาะเจาะจงเป็นพิเศษ (ฉันใช้โมเดล en_US สำหรับเด็ก en_UK, ไม่สมบูรณ์) และรายละเอียดอื่น ๆ ด้วยความพยายามคุณสามารถลดระดับลงเพื่อผลลัพธ์ที่ดี

และสำหรับการบันทึกนั้นฉันได้ทำทั้งหมดนี้หนึ่งครั้งก่อนที่จะติด (และที่ทำงานเกินไปกับ cmu sphinx และ flite) หวังว่านี่จะช่วยได้


คำตอบที่ OP ระบุว่า "ฉันส่งมันไปที่ google เพื่อประมวลผล" อยากรู้ว่าคุณส่งไปที่ไหน
twobob

1
ฉันเป็นคน OP คุณสามารถ ping ฉันในห้องสนทนานี้และฉันควรจะได้รับการยกย่องจากคุณในระยะเวลาอันสั้น เราสามารถพูดคุยกันได้มากกว่านี้และฉันสามารถเพิ่มรายการลงในคำตอบของฉันได้เช่นกัน
syb0rg

3

ใช่. ใช้PocketSphinxสำหรับการรู้จำเสียง, Festvoxสำหรับการอ่านออกเสียงข้อความ (TTS) และเสียง USB บางอันที่มีสายเข้า (หรือเว็บแคมเก่าที่รองรับซึ่งมีสายเข้าด้วย)

Google ค้นหาแพ็คเกจซอฟต์แวร์เหล่านี้และ "Raspberry Pi" มีตัวอย่างและแบบฝึกหัดมากมายให้ตั้งค่านี้


3
  • SiriProxy - ใช้สิ่งนี้เฉพาะเมื่อคุณมีอุปกรณ์ที่ใช้ Siri - คุณไม่จำเป็นต้องเจลเบรคอะไรเลย โดยทั่วไปจะดัก Siri บนเครือข่ายที่คุณติดตั้งไว้
  • Speech2Text - คุณสามารถใช้ Googles API เพื่อถอดรหัสคำพูดเป็นข้อความได้ แต่ตัวอย่างมีวิธีการอื่นด้วย
  • Julius - โปรแกรมถอดรหัสการรู้จำเสียง

ตามที่ Lenik ชี้ให้เห็นคุณจะต้องใช้วิธีบันทึกเสียงหรืออาจส่งไฟล์เสียงไปยัง Raspberry Pi เพื่อให้ถอดรหัสได้


SiriProxy และ Speech2Text ไม่ทำการประมวลผลเสียงพูดบนราสเบอร์รี่ pi พวกเขาใช้เซิร์ฟเวอร์ Apple / Google
Dr.Avalanche

2
ใช่. ฉันพูดไปว่า. แต่พวกเขายังคงเป็นทางออกที่น่าสนใจสำหรับการรู้จำเสียงพูดไม่น้อย นอกจาก OP ไม่ได้กำหนดข้อ จำกัด ใด ๆ ขอบคุณสำหรับ downvote grumble
Piotr Kula

"... ** on ** a raspberry pi" โดยการอัปโหลดและดำเนินการกับบริการอื่น ๆ เหล่านี้ไม่ตรงกับเกณฑ์ที่ระบุในคำถาม นอกจากนี้ยังเป็นเรื่องที่น่าสนใจที่คุณจะบ่นเกี่ยวกับ downvotes เนื่องจากประวัติการโพสต์ downvoting ที่คุณอ้างว่ามีคุณภาพต่ำหรือไม่ตอบคำถาม
Dr.Avalanche

2
บน Pi ไม่ได้มีความหมายมากกว่าการใช้ Pi Pi มีความสามารถในการเชื่อมต่ออินเทอร์เน็ตดังนั้นฉันจึงให้ตัวเลือก - มันไม่ได้เจาะจงว่า "ฉันไม่ต้องการใช้อินเทอร์เน็ต" หรือไม่มีวิธีใช้อินเทอร์เน็ต อาจเป็นไปได้ว่าเขาอาจอัปเดตคำตอบสำหรับคำถามของเขา ฉันมีประวัติของการโพสต์ลงเท่านั้นที่จำเป็น ฉันไม่เคยลงคะแนนเลยนอกจากว่าฉันจะเห็นห้องพักสำหรับการปรับปรุง ฉันแน่ใจว่าเราจัดการกับก่อนหน้านี้
Piotr Kula

1
ฉันคิดว่าความคิดเห็นล่าสุดพูดอะไรบางอย่างเช่น "โปรดปรับปรุงคำตอบนี้" แล้วฉันจะโหวตคุณ คำถามที่พบบ่อยที่เกิดขึ้นจริงของเครือข่ายทั้งหมดขมวดคิ้วเมื่อเชื่อมโยงไปยังคู่มือภายนอกฉันเพียงต้องการที่จะให้คำแนะนำที่ดี - แต่คุณยังคงเลือกที่จะอารมณ์เสียกับฉัน ฉันแสดงความคิดเห็นของฉันเกี่ยวกับการถักเปีย desolder คุณไปขีปนาวุธและยังคงถือความเสียใจ แต่คุณก็ยังไม่ได้พยายามปรับปรุงคำตอบ ฉันตั้งค่าสถานะแล้ว - อาจมีบางคนจะลบออกหรือแปลงเป็นความคิดเห็นและ downvote จะถูกลบกับคุณ การสะกดรอยตามและการลงคะแนนเสียงฉันกำลังจะทำอะไร?
Piotr Kula

2

Raspberry Pi ไม่มี ADC หรืออินพุตไมโครโฟนในตัว เว้นแต่ว่าคุณกำลังวางแผนที่จะใช้ไมค์ USB ภายนอกโดยทั่วไปจะไม่มีวิธีในการรับสตรีมเสียงไปยังอุปกรณ์ นอกจากนั้นไม่มีข้อ จำกัด ร้ายแรง CPU มีประสิทธิภาพเพียงพอสำหรับการประมวลผลเสียงใด ๆ ที่คุณอาจลองใช้


1

ประการแรกคุณควรเลือกชุดคำสำหรับกระบวนการจำแนกประเภท หลังจากนั้นคุณควรรวบรวมข้อมูลจากผู้ใช้ / อาสาสมัคร มันจะเป็นสัญญาณที่ไม่รบกวน คุณต้องลดข้อมูลของคุณเพื่อลดต้นทุนการคำนวณ / เพื่อปรับปรุงอัตราส่วนความสำเร็จด้วยวิธีการดึงคุณสมบัติดังนั้นคุณควรมองหาวิธีการดึงคุณสมบัติที่เหมาะสมสำหรับแอปพลิเคชันของคุณ คุณสามารถได้รับคุณสมบัติของเวกเตอร์ซึ่งเป็นผลมาจากวิธีการเหล่านี้ (หมายถึงค่าสัมบูรณ์, RMS, ความยาวของรูปคลื่น, การข้ามศูนย์, ค่าสัมบูรณ์แบบบูรณาการ, สัมประสิทธิ์ AR, ความถี่เฉลี่ย, ค่ามัธยฐานเฉลี่ย ฯลฯ ) จากนั้นคุณควรใช้วิธีการจัดหมวดหมู่เช่น knn, โครงข่ายประสาทเทียมเป็นต้นเพื่อจำแนกข้อมูลของคุณ สุดท้ายคุณต้องตรวจสอบความถูกต้อง เพื่อสรุป:

  1. เลือกชุดของคำ / ประโยค
  2. รับข้อมูลจากวิชามนุษย์
  3. การประมวลผลล่วงหน้า (อาจต้องมีการกรองสัญญาณ)
  4. การแยก / ประมวลผลคุณสมบัติ
  5. การจำแนกประเภท.
  6. การทดสอบ

ฉันได้เห็นโครงการประมวลผลวิดีโอด้วย RPi บนอินเทอร์เน็ตเพื่อให้สามารถจัดการกับการจัดหมวดหมู่นี้ได้

คุณสามารถใช้NI 6009 USB DAQ (ซึ่งรองรับ RPi) เพื่อรวบรวมข้อมูลอะนาล็อก แต่มีราคาแพงเล็กน้อย


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.