ĐỌC FILE PDF CHO NGƯỜI KHIẾM THỊ

Chào các bạn hôm nay mình sẽ hướng dẫn các bạn làm một project cực cool nhé ! Project đó chính là “Đọc nội dung trong file PDF cho người khiếm thị”.


1. Phân tích

Để người khiếm thị có thể đọc được nội dung trong file PDF thì thật ra là chúng ta cần làm một thiết bị thực hiện việc “chuyển nội dung trong file PDF sang âm thanh và đọc cho người khiếm thị nghe”.

Từ phân tích trên ta thấy dự án cần làm theo các bước sau:

  • Chuyển file PDF sang hình ảnh (JPG, PNG)
  • Dùng OCR để trích xuất text trong các file ảnh trên (xem bài 1)
  • Dùng TTS để đọc nội dung mà OCR đã trích xuất được (xem bài 2)

2. Chuẩn bị

            Từ các bước đã phân tích ở trên thì nhiệm vụ của chúng ta trong project này cực kì đơn giản là:

  • Cài đặt thư viện Tesseract OCR lên Raspberry PI (xem bài 1)
  • Cài đặt thư viện gTTS lên Raspberry PI (xem bài 2)

3. Cài đặt

- Có rất nhiều thư viện hỗ trợ việc chuyển file PDF sang hình ảnh. Ở bài này, chúng ta sẽ sử dụng thư viện pdf2image. Trước khi cài đặt pdf2image, bạn cần cài đặt poppler:

sudo apt install poppler-utils

- Sau khi cài đặt thành công bạn đã có thể cài đặt pdf2image với câu lệnh:

sudo pip3 install pdf2image

- Tiếp theo, hãy cùng thử chạy đoạn code đơn giản sau nhé:

from pdf2image import convert_from_path


pages = convert_from_path(‘test.pdf’)
i = 0
for page in pages:
    i += 1
    page.save(str(i) + ‘.jpg’, ‘JPEG’)

- Hãy chạy thử và xem kết quả nhé ! 

 

4. Chuyển nội dung file PDF sang Audio

- Qua phần trên, ta đã biết được cách sử dụng của thư viện pdf2image. Tiếp theo, chúng ta sẽ kết hợp thêm 2 kĩ thuật là OCR và TTS để tạo sản phẩm hoàn chỉnh nhé !

- Đoạn code mẫu:

import pytesseract

from PIL import Image

import cv2

from gtts import gTTS

from pdf2image import convert_from_path

import os

import argparse



# Default variables

filename = os.path.abspath('./test/vinid.pdf')

lang = 'eng'



# Parse args parameters

parser = argparse.ArgumentParser()

parser.add_argument('--filename', help='Input photo filename')

parser.add_argument('--lang', help='Language in input photo')

args = parser.parse_args()



if (args.filename):

    filename = os.path.abspath(args.filename)



if (args.lang):

    lang = args.lang



myConfig = '-l ' + lang + ' --oem 2 --psm 11'



print('------------------------------------')

print('Your filename is: `' + filename + '`')

print('Your language is: `' + lang + '`')

print('Custom config: `' + myConfig + '`')

print('------------------------------------')



#=======1. Convert PDF to Image(s)========

pages = convert_from_path(filename)

i = 0

for page in pages:

    i += 1

    page.save(str(i) + '.jpg', 'JPEG')

   

    # Open the image from which charectors has to be recognized

    img = cv2.imread(str(i) + '.jpg', cv2.IMREAD_COLOR)

    

    # convert to grey to reduce detials

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    gray = cv2.bilateralFilter(gray, 11, 17, 17)  # Blur to reduce noise



    #======2. Convert Image to Text -> OCR=====

    result = pytesseract.image_to_string(gray, config=myConfig)

    result.replace('\n', '')

    result.replace('\r', '')

    print(result.encode('utf-8').decode('utf-8').strip())

   

    #======3. Text To Speech=====

    tts = gTTS(text=result, lang=lang[:2])

    tts.save(str(i) + '.mp3')

   

    print('TTS ' + str(i) + ' completed !')

- Hãy chạy đoạn code ở trên nhé ! Sau khi chạy xong, bạn sẽ được một hoặc nhiều file âm thanh có dạng: i.mp3 với i là số thứ tự trang của file pdf.

- Bạn có thể nghe thử bằng câu lệnh:

aplay .mp3

hoặc


omxplayer .mp3

Vậy là xong rồi đấy ! Thật đơn giản phải không nào.

Chúc bạn thành công !

 

Bạn có thể xem thêm tại repository sau: https://gitlab.com/fpo-outsource/ocr-and-tts

Có thể bạn quan tâm ???