悠悠楠杉
网站页面
正文:
在数据分析工作中,PDF文件中的图表(如饼图)往往包含关键信息,但直接提取这些数据却是一大挑战。本文将手把手教你如何用Python结合图像处理技术,从PDF中高效提取饼图数据,并转化为结构化格式。
许多行业报告、学术论文或商业文档以PDF形式发布,其中的饼图直观展示了比例分布。但PDF本质是“静态”格式,无法直接编辑或提取数据。传统手动录入效率低且易出错,而基于Python的自动化方案能大幅提升效率。
我们的流程分为三步:
1. PDF转图像:将PDF页面转为可处理的图片格式(如PNG)。
2. 图像分析与分割:定位饼图区域,分割不同颜色的扇形。
3. OCR识别:提取扇形标签和数值。
确保安装以下Python库:
pip install pdf2image opencv-python numpy pytesseract matplotlib使用pdf2image将PDF转为图像:
from pdf2image import convert_from_path
# 将PDF第一页转为PNG
pages = convert_from_path("report.pdf", first_page=1, last_page=1)
pages[0].save("page1.png", "PNG")用OpenCV检测圆形轮廓(饼图通常是圆形):
import cv2
import numpy as np
image = cv2.imread("page1.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (9, 9), 2)
# 霍夫圆检测
circles = cv2.HoughCircles(blurred, cv2.HOUGH_GRADIENT, dp=1, minDist=50,
param1=200, param2=30, minRadius=10, maxRadius=300)
if circles is not None:
circles = np.uint16(np.around(circles))
for (x, y, r) in circles[0, :]:
cv2.circle(image, (x, y), r, (0, 255, 0), 3)
cv2.imwrite("detected_circle.png", image)通过K-means聚类提取主要颜色,并计算扇形角度:
from sklearn.cluster import KMeans
def extract_colors(img_path, n_colors=5):
img = cv2.imread(img_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
pixels = img.reshape(-1, 3)
kmeans = KMeans(n_clusters=n_colors)
kmeans.fit(pixels)
return kmeans.cluster_centers_.astype(int)使用Tesseract识别扇形旁的文本:
import pytesseract
text = pytesseract.image_to_string(image, config="--psm 6")
print("提取的文本:", text)PyMuPDF提取原始数据,而非图像处理。整合上述步骤的完整脚本:
# 参考前文代码片段,按需组合流程
# 此处省略重复部分,实际需补充逻辑衔接通过这套方法,即使是扫描版PDF中的饼图,也能自动化提取数据。接下来,你可以将结果导入Pandas进行进一步分析,或可视化对比原始数据。