#!/usr/bin/python3# # Python OCR PDF Extraction# https://github.com/tesseract-ocr/tesseract## sudo apt install tesseract-ocr# sudo apt install libtesseract-dev# pip install pytesseract PyPDF2 pdfplumber opencv-python pillow# pip install pdf2image# sudo apt-get install poppler-utils# sudo apt-get install tesseract-ocr-chi-sim # Simplified Chinese# sudo apt-get install tesseract-ocr-chi-tra # Traditional Chinese# tesseract --list-langsimport pytesseract
from pdf2image import convert_from_path
from PyPDF2 import PdfReader
import cv2
import numpy as np
from PIL import Image
# Path to Tesseract executable (update to match your system)
pytesseract.pytesseract.tesseract_cmd ='/usr/bin/tesseract'defpreprocess_image(pil_image):"""
Preprocesses an image for OCR using OpenCV.
Converts to grayscale, applies thresholding.
"""# Convert PIL image to OpenCV format
open_cv_image = np.array(pil_image)# Convert RGB to BGR (OpenCV default format)
open_cv_image = cv2.cvtColor(open_cv_image, cv2.COLOR_RGB2BGR)# Convert to grayscale
gray_image = cv2.cvtColor(open_cv_image, cv2.COLOR_BGR2GRAY)# Apply binary thresholding
_, thresh_image = cv2.threshold(gray_image,128,255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)return thresh_image
defextract_text_from_pdf(pdf_path):# First try extracting text from the PDF directly
reader = PdfReader(pdf_path)
text =""for page in reader.pages:
text += page.extract_text()or""# If no text is extracted, assume it's a scanned PDF and use OCRifnot text.strip():
images = convert_from_path(pdf_path)for image in images:# Preprocess image for better OCR results
preprocessed_image = preprocess_image(image)# Convert OpenCV image back to PIL format for Tesseract
pil_image = Image.fromarray(preprocessed_image)# Perform OCR
text += pytesseract.image_to_string(pil_image, lang='chi_sim')return text
# Example usage
pdf_path ="scan_2025-01-02_09.31.pdf"
extracted_text = extract_text_from_pdf(pdf_path)print(extracted_text)