ฉันมีปัญหาในการอ่าน PDFs และการฟังพวกเขาช่วยฉันอย่างหนาแน่น! ดังนั้นฉันจึงทำงานกับแอปพลิเคชันที่ใช้งานง่ายซึ่งสามารถให้ PDF (หรือไฟล์ TXT) และคายไฟล์ MP3 ออก ในอนาคตนี่จะเป็นเซิร์ฟเวอร์ที่สนุกที่จะทำงานหนัก แต่ตอนนี้มันจะเป็นโครงการ Python/Bash นี่เป็นโครงการส่วนตัวขนาดเล็กดังนั้นจะไม่มีการอัปเดตปกติ ต่อ se แต่เมื่อฉันมีเวลาฉันจะผลักดันสิ่งที่ฉันมี
ปัญหาที่ใหญ่ที่สุดของ PDF คือพวกเขาไม่มีข้อความภายในเอกสาร (เป็นภาพสำคัญ) หรือข้อความที่มีอยู่ (โดยปกติแล้วผลลัพธ์ของ OCR) มีคุณภาพไม่ดี OCR มักจะค่อนข้างแย่ใน PDF ที่ฉันได้รับดังนั้นฉันจึงใช้ Bert (รูปแบบภาษาที่สวมหน้ากาก) เพื่อปรับปรุงผลลัพธ์การตรวจสอบการสะกด ในอนาคตสิ่งนี้จะถูกแทนที่ด้วย Trocr ของ Microsoft
หาก OCR เป็นปัญหาเดียวฉันแค่ใช้เอาท์พุท OCRMYPDF เพื่อ eSpeak และเราจะทำ น่าเสียดายที่ Espeak ฟังดูแย่มาก ไม่มีการผันและมันยาก มาก ที่จะให้ความสนใจกับมันเป็นเวลานาน นั่นคือสิ่งที่ TTS ของ coqui.ai มาช่วยทำให้การอ่านนานหลายชั่วโมงเป็นเวลานาน
วิธีแก้ปัญหาอื่น ๆ สำหรับปัญหานี้เป็นแหล่งปิดและมีค่าใช้จ่ายเป็น จำนวนมาก นี่ฟรี
ในที่สุดโครงการนี้จะมีเว็บ UI ที่เรียบร้อยซึ่งจะต้องมีการป้อนข้อมูลน้อยมากจากผู้ใช้ปลายทาง นี่คือซอฟต์แวร์การเข้าถึงหลังจากทั้งหมด - มันจะแปลกถ้าใช้งานยาก น่าเสียดายที่ตอนนี้ฉันมีเพียง CLI ที่ได้รับการทดสอบบน Linux เท่านั้น ไม่ใช่สิ่งที่ดีที่สุด แต่ฉันต้องเริ่มต้นที่ไหนสักแห่ง
วิธีการทำเช่นนี้ "ง่ายที่สุด" คือการติดตั้ง WSL ด้วย Ubuntu และทำตามคำแนะนำ Ubuntu/Debian
หากคุณแฟนซีและรู้วิธีการงูหลามบน windows บอกฉันว่ามันเป็นอย่างไรและคุณทำได้อย่างไร!
หมายเหตุ: น่าเสียดายที่มันยากที่จะตั้งค่าสิ่ง GPU สำหรับ WSL และแม้กระทั่งใช้งานได้เฉพาะกับการ์ด Cuda (Nvidia) ซึ่งฉันไม่มีทางทดสอบ ณ ตอนนี้ (ไม่ใช่ว่าฉันสามารถทดสอบสิ่ง GPU ใด ๆ ในตอนนี้
ต้องบอกว่าฉันไม่รู้ว่าจะได้รับการอ้างอิงทั้งหมดอย่างไร (ดู Ubuntu/Debian) บน Mac ภาพรวมคร่าวๆบอกว่า brew หรือ port ควรจะได้รับส่วนใหญ่ แต่ฉันไม่รู้เกี่ยวกับความพร้อมใช้งานของพวกเขา หากคุณมี Mac และคิดออกมาให้ฉันรู้ว่าคุณทำได้อย่างไร!
sudo apt install -y python3 python3-venv espeak ffmpeg tesseract-ocr-all python3-dev libenchant-dev libpoppler-cpp-dev pkg-config libavcodec libavtools ghostscript poppler-utils
ทำและเปิดใช้งานสภาพแวดล้อมเสมือนจริงรับ pytorch จากนั้นเรียกใช้
pip install reading4listeners
และคุณพร้อมที่จะเรียกใช้ r4l (ดูด้านล่างสำหรับข้อมูลการใช้งาน)
บน Debian, Run
sudo apt install -y python3 python3-venv espeak ffmpeg tesseract-ocr-all python3-dev libenchant-dev libpoppler-cpp-dev pkg-config libavcodec libavtools ghostscript poppler-utils
git clone https://github.com/CypherousSkies/pdf-to-speech
cd pdf-to-speech
python3 -m venv venv
souce venv/bin/activate
pip install -U pip setuptools wheel cython
รับ pytorch
python setup.py develop
ใช้พื้นที่ดิสก์ ~ 2-3GB สำหรับการติดตั้ง
r4l [--in_path in/] [--out_path out/] [--lang en] เรียกใช้ชุดการสแกนและการแก้ไขในไฟล์ที่เข้ากันได้ทั้งหมดในไดเรกทอรี in/ และเอาต์พุตไฟล์ MP3 เพื่อ out/ ใช้ภาษา en
เรียกใช้ r4l --list_langs เพื่อแสดงรายการภาษาที่รองรับ
~~ โปรแกรมนี้ใช้หน่วยความจำจำนวนมากดังนั้นฉันจึงแนะนำให้ขยายขนาดการแลกเปลี่ยนของคุณโดย ~ 10GB (สำหรับ debian ใช้ fixswap.sh ) ~~ (ควรได้รับการแก้ไขตอนนี้ แต่ถ้ามันหมดจากหน่วยความจำ/ล่มแบบสุ่มเพิ่มขนาดการแลกเปลี่ยน)
ในการตั้งค่าปัจจุบันของฉัน (4 Intel i7 8th Gen Cores, No GPU, Debian 10, 5GB RAM+7GB SWAP) การตั้งค่าภาษาอังกฤษจะอ่านประมาณ 440 คำ/นาที (n = 21, r^2 = 0.97) เป็นไฟล์เสียง 175 คำ/นาที ดังนั้น R4L ใช้เวลา ~ 11.4 นาทีในการอ่านไฟล์ 5000 Word ซึ่งจะใช้เวลา ~ 28.5 นาทีในการฟัง IRL
น่าเสียดายที่ฉันไม่สามารถเร่งความเร็วได้มากไปกว่านี้สำหรับระบบ CPU เท่านั้น จุดยึดหลักคือการเข้าถึงไฟล์นั้นช้า แต่ด้วยการปรับปรุง RAM ที่ดีขึ้นการชะลอตัวที่สำคัญคือ Bert และ TTS ซึ่งทั้งคู่ออกแบบมาเพื่อทำงานอย่างรวดเร็วบนเครื่อง G/TPU
ในระดับสูงนี่คือวิธีการทำงาน:
input.pdf -> ocrmypdf (ghostscript -> unpaper -> tesseract -coR) -> การประมวลผลล่วงหน้า (regex) -> การแก้ไข OCR (bert) -> postprocessing (regex) -> ข้อความถึงคำพูด (coqui.ai tts) -> wav to mp3
ฉันเกือบจะต้องปรับแต่ง trocr/bert และ tts เพื่อจัดการกับข้อความที่ฉันสนใจเมื่อฉันได้รับการเข้าถึงแท่นขุดเจาะ ML แต่จนกว่าจะถึงตอนนั้นฉันจะใช้โมเดลนอกชั้นวางต่อไป หวังว่านี่จะสามารถควบคุมได้ด้วยเว็บ UI ที่ดีและเรียบง่ายและปล่อยให้ทำงานบนเซิร์ฟเวอร์เพื่อการใช้งานสาธารณะ นอกจากนี้ฉันต้องการจัดแพ็คเกจสิ่งนี้ไว้ในการปฏิบัติการซึ่งต้องใช้ความรู้ด้านเทคนิคน้อยที่สุดในการใช้และบำรุงรักษา แต่นั่นเป็นเป้าหมายที่ห่างไกล