前几天接到的一个需求,处理一堆doc和pdf,提取相应内容输出到xls里。经过一天的努力,正常的文件都顺利解决。还有一部分pdf是解决不了的,原因是pdf内部文字所使用的编码在本机没有。从pdf中提取出来的内容都会变成!@#$之类的符号(很明显是编码问题)。

  试了很多方法,最后无奈选择OCR。

每一页的pdf是这个样子的:

[Baidu API]使用百度大脑的OCR API

首先使用了acrobat和pitstop插件把所有的图片都处理掉,这样做ocr的结果会精确。导出成图片:

[Baidu API]使用百度大脑的OCR API

测试了百度的API,一整页丢进去效果不是很好,所以拆分一下再丢。拆成这样:

[Baidu API]使用百度大脑的OCR API

 1 #-*- coding: utf-8 -*-
 2 import cv2
 3 import os
 4 
 5 
 6 def rename(path):
 7   """
 8   批量改名,因为opencv不能传中文path
 9   :param path:
10   :return:
11   """
12   files = os.listdir(path)
13   for file in files:
14     tmp = file[7:]
15     os.rename(path+file, path+tmp)
16 
17 
18 TOTAL_PAGE_NUM = 200
19 ROOT_PATH = '../input/bug/2008_o/'
20 SAVE_PATH = '../input/bug/2008/'
21 
22 def _cut_pic(id, from_path, save_path):
23   """
24   切分成3部分,便于识别
25   :param from_path:
26   :param save_path:
27   :return:
28   """
29   img = cv2.imread(from_path)
30   head = img[300:650, 1:2000]
31   body = img[660:1750, 1:2000]
32   tail = img[1760:2200, 1:2000]
33   cv2.imwrite(save_path+id+'_head.jpg', head)
34   cv2.imwrite(save_path+id+'_body.jpg', body)
35   cv2.imwrite(save_path+id+'_tail.jpg', tail)
36 
37 def cut_pic():
38   for i in range(10, TOTAL_PAGE_NUM):
39     file_path = ROOT_PATH + str(i).zfill(3) + '.jpg'
40     try:
41       with open(file_path, 'r') as fp:
42         fp.close()
43         _cut_pic(str(i).zfill(3), file_path, SAVE_PATH)
44     except IOError:
45       print 'No such file: ', file_path
46 
47 if __name__ == '__main__':
48   cut_pic()
View Code

相关文章:

  • 2022-01-02
  • 2022-12-23
  • 2021-12-30
  • 2022-12-23
  • 2021-12-30
  • 2021-07-15
  • 2022-01-09
  • 2021-08-19
猜你喜欢
  • 2022-01-14
  • 2021-07-17
  • 2021-09-23
  • 2021-10-13
  • 2021-12-15
  • 2022-12-23
相关资源
相似解决方案