blah s peech-to- t ext ช่วยให้คุณมีข้อความการป้อนข้อมูล bla (h) st จากคำพูดบน linux ด้วยแป้นพิมพ์ลัดและ Whisper.cpp ยิงไมโครโฟนของคุณและดำเนินการรู้จำเสียงพูดที่มีคุณภาพสูงแบบออฟไลน์ ขยายด้วย LLM ในท้องถิ่นมันกลายเป็นเครื่องมือที่มีศักยภาพในการสนทนากับคอมพิวเตอร์ Linux ของคุณ
Blahst น่าจะเป็นเครื่องมืออินพุตคำพูดที่ใช้ข้อความคำพูดที่ใช้กับข้อความสำหรับ Linux โดยใช้ Linux โดยนั่งอยู่ด้านบนของ Whisper.cpp
wsiml เฉพาะการใช้เครื่องมือบรรทัดคำสั่งที่ดีที่สุดการป้อนข้อมูลข้อความที่พูดถึงจะเกิดขึ้นเร็วมาก นี่คือวิดีโอสาธิต (โปรดเปิดเสียงเสียง) พร้อมคุณสมบัติ LLM ท้องถิ่น (AI Assistant, Translator, Scheduller, CLI Guide ในขั้นตอนการทดสอบ):
ในวิดีโอด้านบนเสียงเริ่มต้นด้วยระบบที่แสดงการแสดงภาพหน้าจอ (ส่วนขยายของฉัน "Voluble" พูดถึงการแจ้งเตือนเดสก์ท็อป Gnome ทั้งหมด) ตามด้วยการป้อนคำพูด/การจดจำหลายครั้ง แสดงให้เห็นในตอนท้ายเป็นหนึ่งใน "ฟังก์ชั่น AI" ซึ่งใช้ข้อความที่คัดลอกโดย blahst (whisper.cpp) จัดรูปแบบให้เป็นจริงและส่งไปยัง llm หลายภาษาในท้องถิ่น (llama.cpp หรือ llamafile) การจัดทำสิ่งนี้จากบรรทัดคำสั่งที่มีอุปกรณ์เรียกใช้แบบลีนทำให้ระบบเร็วอย่างน่าประหลาดใจ (จากวิดีโอคุณจะเห็นได้ว่าพีซีแทบจะไม่แตกหัก - อุณหภูมิยังคงต่ำ
วิดีโอข้างต้น (unmute Please) แสดงให้เห็นถึงการใช้ blooper, แก้ไขจาก WSI เพื่อคัดลอกในลูปจนกว่าผู้ใช้จะยุติการพูดคุยด้วยคำพูดด้วยการหยุดชั่วคราวที่ยาวขึ้น (~ 3Sec เป็นที่ตั้งไว้ล่วงหน้า) ด้วยการใช้ XDOTOOL (หรือ YDOTOOL สำหรับผู้ใช้ Wayland) ข้อความจะถูกวางโดยอัตโนมัติในการหยุดชั่วคราว (หรือในการแข่งขันฮอตคีย์) สำหรับวิดีโอด้านบนคำพูดจะถูกสร้างขึ้นด้วยเสียงสังเคราะห์และรวบรวมโดยไมโครโฟน สิ่งนี้ช่วยให้ฉันสามารถแก้ไขข้อความพร้อมกันได้ (มัลติทาสก์เกอร์อย่าลองทำที่บ้าน :) ในตอนท้ายไอคอนไมโครโฟนบาร์ชั้นบนควรหายไปซึ่งแสดงถึงการออกจากโปรแกรม มันไม่ได้เกิดขึ้นในวิดีโอเพราะยูทิลิตี้ Screencast มีการเรียกร้องบนไอคอนด้วย
ความคิดที่มี blahst คือการเป็นซอฟต์แวร์ที่ปราศจาก UI ซึ่งเทียบเท่ากับการจู่โจมมองโกล การระเบิดของ CPU/GPU สั้นและทรงพลังและจากนั้นมันก็หายไปอย่างสมบูรณ์โดยมีร่องรอยที่เป็นข้อความในคลิปบอร์ดและสันติภาพเดสก์ท็อปที่สัมพันธ์กัน เพียงใช้คีย์ฮอตคู่หนึ่งเพื่อเริ่มต้นและหยุดการบันทึกจากไมโครโฟนและส่งคำพูดที่บันทึกไปยัง Whisper.cpp [เซิร์ฟเวอร์] ซึ่งทิ้งข้อความที่ถอดความลงในคลิปบอร์ด (เว้นแต่คุณจะผ่าน LLM ท้องถิ่นก่อนหน้านั้น) วิธีการสากลที่ควรทำงานในสภาพแวดล้อมและการแจกแจงเดสก์ท็อป Linux ส่วนใหญ่
งานทำโดยหนึ่งในสคริปต์:
การรู้จำเสียงพูดจะดำเนินการโดย whisper.cpp ซึ่งจะต้องคอมไพล์ไว้ล่วงหน้าในระบบ Linux ของคุณหรือใช้เป็นอินสแตนซ์ของเซิร์ฟเวอร์บน LAN หรือ LocalHost ของคุณ Alternativelly คุณสามารถเลือกที่จะดาวน์โหลดและใช้งานจริงแบบพกพาได้จริง (พร้อมโมเดลกระซิบแบบฝัง) Whisperfile ซึ่งตอนนี้เป็นส่วนหนึ่งของพื้นที่เก็บข้อมูล LlamaFile
เมื่ออินพุตคำพูดเริ่มต้นด้วยฮอตคีย์ตัวบ่งชี้ไมโครโฟนจะปรากฏขึ้นในแถบด้านบน (อย่างน้อยก็ใน GNOME) และแสดงในช่วงระยะเวลาของการบันทึก การหายไปของไอคอนไมโครโฟนจากแถบด้านบนบ่งบอกถึงความสมบูรณ์และสามารถวางข้อความที่ถอดความได้จากคลิปบอร์ด ในระบบที่ช้ากว่าอาจมีความล่าช้าเล็กน้อยหลังจากไอคอนไมโครโฟนหายไปและก่อนที่ข้อความจะมาถึงคลิปบอร์ดเนื่องจากเวลาการถอดความนานขึ้น ในคอมพิวเตอร์ของฉันผ่านทาง Server.cpp Server API นั้นน้อยกว่า 150 ms (300 ms พร้อม local whisper.cpp) สำหรับย่อหน้าเฉลี่ยของข้อความพูด
สำหรับการทำงานของแป้นพิมพ์อย่างเดียวด้วย CTRL+V มาตรฐานตัวอย่างเช่นคลิปบอร์ดมาตรฐานจะถูกใช้ภายใต้ X11 และ Wayland ( wsi หรือ wsiml ) ในขณะที่ wsi -p (หรือ wsiml -p ) ใช้การขายและข้อความหลักจะถูกวางด้วยปุ่มเมาส์กลาง) สำหรับการวางทางซ้ายมือการบันทึกเสียงพูดสามารถผลักไสไปยังสายฮอตที่ถูกเรียกด้วยมือขวา ** ตัวอย่างเช่นฉันได้ตั้งค่าปุ่ม "+" ที่ไม่ได้ใช้ "(เริ่มการบันทึก) และ" แทรก "(หยุดการบันทึก) ปุ่มบนปุ่มกดตัวเลข


install-wsiข้อจำกัดความรับผิดชอบ: ผู้เขียนไม่ได้รับเครดิตหรือรับผิดชอบใด ๆ สำหรับผลลัพธ์ใด ๆ ที่อาจหรือไม่อาจเป็นผลมาจากการโต้ตอบกับเนื้อหาของเอกสารนี้ การกระทำและระบบอัตโนมัติที่เสนอ (เช่นสถานที่ติดตั้ง ฯลฯ ) เป็นเพียงคำแนะนำและขึ้นอยู่กับทางเลือกและความคิดเห็นของผู้เขียน เนื่องจากพวกเขาอาจไม่เหมาะกับรสชาติหรือสถานการณ์เฉพาะของทุกคนโปรดปรับตามความจำเป็น
ในโฟลเดอร์ที่คุณเลือกโคลนพื้นที่เก็บข้อมูล blahst จากนั้นเลือกวิธีการติดตั้งจากด้านล่าง:
git clone https://github.com/QuantiusBenignus/BlahST.git
cd ./BlahST
(สมมติว่า whisper.cpp ได้รับการติดตั้งและ "หลัก" ที่ได้รับการรวบรวมด้วย 'Make' ใน cloned whisper.cpp repo. ดูส่วนข้อกำหนดเบื้องต้น)
cd $HOME/.local/bin; chmod +x wsi wsiAI wsiml
$HOME/.local/bin/ (ส่วนหนึ่งของเส้นทาง $ ของคุณ) ด้วย ln -s /full/path/to/whisper.cpp/main $HOME/.local/bin/transcribe
หากการถอดความไม่ได้อยู่ในเส้นทาง $ ของคุณให้แก้ไขการโทรใน WSI เพื่อรวมเส้นทางสัมบูรณ์หรือเพิ่มตำแหน่งไปยังตัวแปร $ PATH มิฉะนั้นสคริปต์จะล้มเหลว หากคุณไม่ต้องการรวบรวม Whisper.cpp หรือนอกเหนือจากนั้นให้ดาวน์โหลดและตั้งค่าสถานะการดำเนินการของ Whisperfile ที่เหมาะสมเช่น:
cd $HOME/.local/bin
wget https://huggingface.co/Mozilla/whisperfile/resolve/main/whisper-tiny.en.llamafile
chmod +x whisper-tiny.en.llamafile
ภายในสคริปต์ wsi , wsiAI , wsiml หรือ blooper ใกล้กับจุดเริ่มต้นมีส่วนที่ทำเครื่องหมายไว้อย่างชัดเจนชื่อ "บล็อกการกำหนดค่าผู้ใช้" ซึ่งมีการรวบรวมตัวแปรที่ผู้ใช้กำหนดค่าได้ทั้งหมดได้รับการรวบรวม ส่วนใหญ่สามารถเหลือได้ แต่สิ่งสำคัญคือที่ตั้งของไฟล์รุ่น (Whisper, LLM, TTS) ที่คุณต้องการใช้ในระหว่างการถอดความ (หรือหมายเลข IP และพอร์ตสำหรับเซิร์ฟเวอร์ Whisper.cpp) หากใช้ whisperfile โปรดตั้งค่าตัวแปร Whisperfile เป็นชื่อไฟล์ของ Whisperfile ที่ได้รับการดาวน์โหลดก่อนหน้านี้เช่น WHISPERFILE=whisper-tiny.en.llamafile (ต้องอยู่ในเส้นทาง $)
ในการเริ่มต้นและหยุดอินพุตคำพูดสำหรับการติดตั้งด้วยตนเองและอัตโนมัติ
/home/yourusername/.local/bin/wsi -p สำหรับการใช้ปุ่มเมาส์กลางหรือเปลี่ยนเป็น .../wsi สำหรับการใช้คลิปบอร์ดwsi ด้านบนด้วย wsiml และหากใช้ Whisperfile ให้เพิ่มค่าสถานะ -w เช่น /home/yourusername/.local/bin/wsi -w ) ในที่สุดในการสุ่มตัวอย่างฟังก์ชั่น LLM ให้แทนที่ wsi ด้วย wsiAIสคริปต์ Orchestrator มีตัวกรองการตรวจจับความเงียบในการโทรไปยัง SOX (REC) และจะหยุดการบันทึก (ในกรณีที่ดีที่สุด) ใน 2 วินาทีของความเงียบ นอกจากนี้หากไม่ต้องการรอหรือมีปัญหากับเกณฑ์การตรวจจับความเงียบ:
สำหรับผู้ที่ต้องการให้การบันทึกการบันทึกด้วยตนเองด้วยการผสมผสานที่สำคัญในจิตวิญญาณของการแฮ็กที่ยอดเยี่ยมเราจะใช้คุณสมบัติในตัวระบบ:
pkill --signal 2 recง่ายๆ เพียงตรวจสอบให้แน่ใจว่าการผูกคีย์ใหม่ยังไม่ได้รับการตั้งค่าสำหรับอย่างอื่นแล้ว ตอนนี้เมื่อสคริปต์กำลังบันทึกคำพูดมันสามารถหยุดได้ด้วยคีย์คอมโบใหม่และการถอดความจะเริ่มทันที
/home/yourusername/.local/bin/wsi -p หรือ .../wsi สำหรับการใช้คลิปบอร์ดwsi ด้านบนด้วย wsiml และหากใช้ Whisperfile ให้เพิ่มค่าสถานะ -w เช่น /home/yourusername/.local/bin/wsi -w ) ในที่สุดในการสุ่มตัวอย่างฟังก์ชั่น LLM ให้แทนที่ wsi ด้วย wsiAIpkill --signal 2 rec/home/yourusername/.local/bin/wsi หรือ .../wsi -pwsi ด้านบนด้วย wsiml และหากใช้ Whisperfile ให้เพิ่มค่าสถานะ -w เช่น /home/yourusername/.local/bin/wsi -w ) ในที่สุดในการสุ่มตัวอย่างฟังก์ชั่น LLM ให้แทนที่ wsi ด้วย wsiAIpkill --signal 2 recโปรดทราบว่าอาจมีการเปลี่ยนแปลงเล็กน้อยในขั้นตอนข้างต้นขึ้นอยู่กับเวอร์ชันที่ติดตั้งในระบบของคุณ สำหรับสภาพแวดล้อมอื่น ๆ อีกมากมายเช่น Mate, Cinnamon, LXQT, Deepin ฯลฯ ขั้นตอนควรค่อนข้างคล้ายกับตัวอย่างข้างต้น โปรดปรึกษาเอกสารเกี่ยวกับสภาพแวดล้อมเดสก์ท็อประบบของคุณ
ในการกดคอมโบ Hotkey สคริปต์ wsi -p จะบันทึกคำพูด (หยุดด้วยฮอตคีย์หรือโดยการตรวจจับความเงียบ) ใช้สำเนาท้องถิ่นของ Whisper.cpp และส่งข้อความที่ถอดความไปยังตัวเลือกหลักภายใต้ X11 หรือ Wayland จากนั้นสิ่งที่ต้องทำก็คือวางด้วยปุ่มเมาส์กลางทุกที่ที่พวกเขาต้องการ (สำหรับคนที่ถือเมาส์ด้วยมือขวาของพวกเขาการบันทึกเสียงลัดวงศ์สำหรับมือซ้ายจะสมเหตุสมผล)
หากใช้ wsi โดยไม่มีธง (วิธีการสามารถอยู่ร่วมกันได้เพียงตั้งค่าชุดสายฮอตที่แตกต่างกัน) ข้อความที่ถอดความจะถูกส่งไปยังคลิปบอร์ด (ไม่ใช่การเลือกหลัก) ภายใต้ X11 หรือ Wayland จากนั้นการวางจะเกิดขึ้นกับ CTRL+V ( CTRL+SHIFT+V สำหรับเทอร์มินัล GNOME) หรือปุ่ม SHIFT+INSert ตามปกติ (สำหรับคนส่วนใหญ่สายตรงมือขวาจะทำงานได้ดี)
หากคัดลอกผ่านเครือข่ายด้วย wsi -n (เลือกด้วยฮอตคีย์ของตัวเอง) สคริปต์จะพยายามส่งเสียงที่บันทึกไปยังการทำงานให้ตั้งค่าเซิร์ฟเวอร์ Whisper.cpp อย่างถูกต้อง (บน LAN หรือ localhost ) จากนั้นจะรวบรวมการตอบสนองที่เป็นข้อความและจัดรูปแบบสำหรับการวางด้วย CTRL+V ( CTRL+SHIFT+V สำหรับขั้ว GNOME) หรือเปลี่ยนปุ่ม SHIFT+INSert (เพื่อวางด้วยปุ่มเมาส์กลางใช้ wsi -n -p แทน)
หากใช้ Whisperfile แทนหรือนอกเหนือจาก Whisper.cpp ที่รวบรวมได้เรียกใช้ wsi -w ... และสคริปต์จะใช้การตั้งค่าที่ตั้งไว้ล่วงหน้าจริง ๆ กับแบบจำลองการเลือกแบบฝังตัว
สำหรับผู้ใช้หลายภาษานอกเหนือจากคุณสมบัติของ WSI แล้ว wsiml ยังให้ความสามารถในการระบุภาษาเช่น -l fr และตัวเลือกในการแปลเป็นภาษาอังกฤษด้วย -t ผู้ใช้สามารถกำหนดคีย์หลายสายให้กับภาษาต่าง ๆ ที่พวกเขาถอดความหรือแปลจาก ตัวอย่างเช่นสามารถตั้งค่าคีย์เพิ่มเติมได้สองรายการสำหรับการถอดความและอีกอันสำหรับการแปลจากภาษาฝรั่งเศสโดยกำหนดคำสั่ง wsiml -l fr และ wsiml -l fr -t ตามลำดับ
การทดลอง: ผู้ใช้สามารถใช้สคริปต์ blooper สำหรับอินพุตคำพูดอัตโนมัติต่อข้อความต่อเนื่อง (ไม่จำเป็นต้องกดปุ่ม Ctrl+V หรือคลิกปุ่มเมาส์กลาง) นี่แสดงให้เห็นในวิดีโอที่สองด้านบน โปรดทราบว่าคลิปบอร์ดถูกใช้โดยค่าเริ่มต้นข้อความจะถูกปรับอัตโนมัติภายใต้คีย์บอร์ด Carret แต่โดยหลักการแล้วการเลือกหลักสามารถตั้งค่าได้แทนการคลิกปุ่มกลางของเมาส์จะถูกจำลองและส่งข้อความที่ตำแหน่งปัจจุบันของตัวชี้เมาส์ที่เวลา โปรดทราบว่าสิ่งนี้ขึ้นอยู่กับการตรวจจับความเงียบซึ่งขึ้นอยู่กับสภาพแวดล้อมทางกายภาพของคุณ ในสภาพแวดล้อมที่มีเสียงดังใช้คีย์ฮอตเพื่อหยุดการบันทึก
เราไม่สามารถยกระดับเกณฑ์โดยพลการเพราะหากมีใครลดเสียงของพวกเขา (fadeout) อย่างต่อเนื่องในตอนท้ายของการพูดมันอาจถูกตัดออกหากเกณฑ์สูง ลดลงในกรณีนั้นเป็นไม่กี่ %
เป็นการดีที่สุดที่จะพยายามทำให้คำพูดแตกต่างจากเสียงรบกวนโดยแอมพลิจูด (พูดอย่างชัดเจนใกล้กับไมโครโฟน) ในขณะที่ลดเสียงรบกวนภายนอก (ตำแหน่งที่กำบังของไมโครโฟน, ฮาร์ดแวร์การยกเลิกเสียง ฯลฯ ) ด้วยระดับสัญญาณเสียงพูดที่ดี
หลังจากคำพูดถูกจับมันจะถูกส่งผ่านไปยัง transcribe (Whisper.cpp) สำหรับการรู้จำเสียงพูด สิ่งนี้จะเกิดขึ้นเร็วกว่าเรียลไทม์ (โดยเฉพาะอย่างยิ่งกับ CPU ที่รวดเร็วหรือหากการติดตั้ง Whisper.cpp ของคุณใช้ cuda) หนึ่งสามารถปรับจำนวนเธรดการประมวลผลที่ใช้โดยการเพิ่ม -tn ไปยังพารามิเตอร์บรรทัดคำสั่งของการถอดความ (โปรดดูเอกสาร Whisper.cpp) จากนั้นสคริปต์จะแยกวิเคราะห์ข้อความเพื่อลบสิ่งประดิษฐ์ที่ไม่ใช่คำพูดจัดรูปแบบและส่งไปยังตัวเลือกหลัก (คลิปบอร์ด) โดยใช้เครื่องมือ X11 หรือ Wayland
โดยหลักการแล้ว Whisper (whisper.cpp) เป็นหลายภาษา และด้วยไฟล์โมเดลที่ถูกต้องแอปพลิเคชันนี้จะส่งข้อความ UTF-8 ที่ถอดความในภาษาที่ถูกต้อง สคริปต์ wsiml นั้นทุ่มเทให้กับการใช้งานหลายภาษาและผู้ใช้สามารถเลือกภาษาสำหรับอินพุตคำพูด (ใช้ธง -l LC โดยที่ LC เป็นรหัสภาษา) และยังสามารถแปลคำพูดในภาษาอินพุตที่เลือกเป็นภาษาอังกฤษด้วยธง -t ผู้ใช้สามารถกำหนดคีย์หลายสายให้กับภาษาต่าง ๆ ที่พวกเขาต้องการคัดลอกหรือแปลจาก ตัวอย่างเช่นสามารถตั้งค่าคีย์เพิ่มเติมได้สองรายการสำหรับการถอดความและอีกอันสำหรับการแปลจากภาษาฝรั่งเศสโดยกำหนดคำสั่ง wsiml -l fr และ wsiml -l fr -t ตามลำดับ
โปรดทราบว่าเมื่อใช้โหมดเซิร์ฟเวอร์ตอนนี้คุณมี 2 ตัวเลือก คุณสามารถมีเซิร์ฟเวอร์ whisper.cpp precompiled หรือการดาวน์โหลด whisperfile (ในโหมดเซิร์ฟเวอร์) ฟังที่โฮสต์ที่กำหนดค่าไว้ล่วงหน้าและหมายเลขพอร์ต สคริปต์ Orchestrator เข้าหาพวกเขาด้วยวิธีเดียวกัน
การถอดความคำพูดเป็นข้อความเป็นงานหน่วยความจำและความเข้มข้นของ CPU และที่เก็บข้อมูลที่รวดเร็วสำหรับการอ่านและการเขียนสามารถช่วยได้เท่านั้น นั่นคือเหตุผลที่ WSI จัดเก็บไฟล์ชั่วคราวและทรัพยากรในหน่วยความจำสำหรับความเร็วและเพื่อลด SSD/HDD "การบด": TEMPD='/dev/shm' จุดยึดประเภทนี้ "TMPFS" นี้ถูกสร้างขึ้นใน RAM (สมมติว่าคุณมีเพียงพอพูดอย่างน้อย 8GB) และให้บริการโดยเคอร์เนลสำหรับแอปพลิเคชันพื้นที่ผู้ใช้ เมื่อคอมพิวเตอร์ถูกปิดมันจะถูกลบออกโดยอัตโนมัติซึ่งไม่เป็นไรเนื่องจากเราไม่ต้องการไฟล์กลาง ในความเป็นจริงสำหรับแอพพลิเคชั่นบางประเภท (ดูที่คุณอิเล็กตรอน) มันจะเป็นประโยชน์ (IMHO) ที่จะมีจุดเมานต์ทั่วทั้งระบบ /TMP ที่เก็บไว้ใน RAM การย้าย /TMP ไปยัง RAM อาจเพิ่มความเร็วในการเริ่มต้นแอปพลิเคชันเล็กน้อย การเร่งความเร็วยินดีต้อนรับสำหรับแอพอิเล็กตรอนใด ๆ ในรูปแบบที่ง่ายที่สุดการเปลี่ยนแปลงนี้ง่ายเพียงแค่วิ่ง:
echo "tmpfs /tmp tmpfs rw,nosuid,nodev" | sudo tee -a /etc/fstab จากนั้นรีสตาร์ทคอมพิวเตอร์ Linux ของคุณ ด้วยเหตุผลดังกล่าวโดยเฉพาะอย่างยิ่งหาก HDD เป็นสื่อจัดเก็บข้อมูลหลักเราสามารถย้ายไฟล์โมเดล ASR ที่ต้องการโดย whisper.cpp ในตำแหน่งเดียวกัน (/dev/shm) เหล่านี้เป็นไฟล์ขนาดใหญ่ที่สามารถถ่ายโอนไปยังตำแหน่งนี้ได้ที่จุดเริ่มต้นของเซสชันเทอร์มินัล (หรือที่การเริ่มต้นระบบ) สามารถทำได้โดยใช้ไฟล์ .profile ของคุณโดยวางสิ่งนี้ไว้ในนั้น:
([ -f /dev/shm/ggml-base.en.bin ] || cp /path/to/your/local/whisper.cpp/models/ggml* /dev/shm/)