質問編集履歴
1
「試したこと」を追記しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -214,8 +214,206 @@
|
|
214
214
|
|
215
215
|
|
216
216
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
217
|
```
|
218
|
+
|
219
|
+
|
220
|
+
|
221
|
+
### 試したこと
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
下のコードのように
|
226
|
+
|
227
|
+
pdfをページごとに分割した後に画像化をすると上手くいくので、おそらくJPEG化あたりで何かを間違えているのがと思いますが、原因が分からず困っている状態です。
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
```python
|
232
|
+
|
233
|
+
# プログラム|ライブラリ設定
|
234
|
+
|
235
|
+
import PyPDF2
|
236
|
+
|
237
|
+
import pathlib
|
238
|
+
|
239
|
+
import os
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
from pdf2image import convert_from_path
|
244
|
+
|
245
|
+
from PIL import Image
|
246
|
+
|
247
|
+
import sys
|
248
|
+
|
249
|
+
from pyocr import pyocr
|
250
|
+
|
251
|
+
from pyocr import builders
|
252
|
+
|
253
|
+
import cv2
|
254
|
+
|
255
|
+
import numpy as np
|
256
|
+
|
257
|
+
import pandas as pd
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
file = './9510.pdf'
|
262
|
+
|
263
|
+
scan = file.replace('.pdf','')
|
264
|
+
|
265
|
+
|
266
|
+
|
267
|
+
# インストール済みのTesseractのパスを通す
|
268
|
+
|
269
|
+
path_tesseract = r"C:\Users\AppData\Local\Programs\Tesseract-OCR"
|
270
|
+
|
271
|
+
if path_tesseract not in os.environ["PATH"].split(os.pathsep):
|
272
|
+
|
273
|
+
os.environ["PATH"] += os.pathsep + path_tesseract
|
274
|
+
|
275
|
+
|
276
|
+
|
277
|
+
# OCRエンジンの取得
|
278
|
+
|
279
|
+
tools = pyocr.get_available_tools()
|
280
|
+
|
281
|
+
#print(tools)
|
282
|
+
|
283
|
+
tool = tools[0]
|
284
|
+
|
285
|
+
|
286
|
+
|
287
|
+
# プログラム2|フォルダ内のPDFを全て取得
|
288
|
+
|
289
|
+
curdir = os.getcwd()
|
290
|
+
|
291
|
+
|
292
|
+
|
293
|
+
# プログラム4|分割したPDFを保管するためのフォルダ作成
|
294
|
+
|
295
|
+
path = os.path.join(curdir, scan)
|
296
|
+
|
297
|
+
if not os.path.isdir(path):
|
298
|
+
|
299
|
+
os.makedirs(path)
|
300
|
+
|
301
|
+
|
302
|
+
|
303
|
+
# プログラム5|PDFを分割
|
304
|
+
|
305
|
+
pdf = PyPDF2.PdfFileReader(file)
|
306
|
+
|
307
|
+
for page in range(pdf.numPages):
|
308
|
+
|
309
|
+
print(page)
|
310
|
+
|
311
|
+
newpdf = PyPDF2.PdfFileWriter()
|
312
|
+
|
313
|
+
newpdf.addPage(pdf.getPage(page))
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
# PDFをページごとに分割
|
318
|
+
|
319
|
+
pageNo = format(page, '0>3')
|
320
|
+
|
321
|
+
splitpdf = os.path.join(path, f'{pageNo}.pdf')
|
322
|
+
|
323
|
+
with open(splitpdf, 'wb') as f:
|
324
|
+
|
325
|
+
newpdf.write(f)
|
326
|
+
|
327
|
+
|
328
|
+
|
329
|
+
# 3.pdfからjpgへの変換
|
330
|
+
|
331
|
+
img = convert_from_path(splitpdf)
|
332
|
+
|
333
|
+
filename = splitpdf.replace(".pdf",".jpg")
|
334
|
+
|
335
|
+
#print(img)
|
336
|
+
|
337
|
+
for images in img:
|
338
|
+
|
339
|
+
images.save(filename)
|
340
|
+
|
341
|
+
|
342
|
+
|
343
|
+
|
344
|
+
|
345
|
+
filename0 = splitpdf.replace(".pdf","")
|
346
|
+
|
347
|
+
#画像を切り取る
|
348
|
+
|
349
|
+
imp_crop = Image.open(filename).crop((900,200,1600,400))
|
350
|
+
|
351
|
+
imp_crop.save(filename)
|
352
|
+
|
353
|
+
|
354
|
+
|
355
|
+
#画像の下線を消す
|
356
|
+
|
357
|
+
img00 = cv2.imread(filename)
|
358
|
+
|
359
|
+
##画像をグレースケールに変換
|
360
|
+
|
361
|
+
gray = cv2.cvtColor(img00, cv2.COLOR_BGR2GRAY)
|
362
|
+
|
363
|
+
#cv2.imwrite(filename0+"_gray.jpg", gray)
|
364
|
+
|
365
|
+
|
366
|
+
|
367
|
+
##画像を白黒反転する(下線を検出しやすくするため)
|
368
|
+
|
369
|
+
gray2 = cv2.bitwise_not(gray)
|
370
|
+
|
371
|
+
#cv2.imwrite(filename0+"_blackandwhite.jpg", gray2)
|
372
|
+
|
373
|
+
|
374
|
+
|
375
|
+
##下線を検出
|
376
|
+
|
377
|
+
lines = cv2.HoughLinesP(gray2, rho=1, theta=np.pi/180, threshold=200, minLineLength=400, maxLineGap=2)
|
378
|
+
|
379
|
+
print(lines)
|
380
|
+
|
381
|
+
|
382
|
+
|
383
|
+
##線を消す(白線を引く)
|
384
|
+
|
385
|
+
for line in lines:
|
386
|
+
|
387
|
+
x1, y1, x2, y2 = line[0]
|
388
|
+
|
389
|
+
# 線を消す(白で線を引く)
|
390
|
+
|
391
|
+
no_lines_img = cv2.line(img00, (x1,y1), (x2,y2), (255,255,255), 3)
|
392
|
+
|
393
|
+
cv2.imwrite(filename0+"_noline.jpg", no_lines_img)
|
394
|
+
|
395
|
+
os.remove(filename)
|
396
|
+
|
397
|
+
|
398
|
+
|
399
|
+
# 3.原稿画像の読み込み
|
400
|
+
|
401
|
+
|
402
|
+
|
403
|
+
img_org = Image.open(filename0+"_noline.jpg")
|
404
|
+
|
405
|
+
|
406
|
+
|
407
|
+
# 4.OCR実行
|
408
|
+
|
409
|
+
builder = builders.TextBuilder(tesseract_layout=6)
|
410
|
+
|
411
|
+
result = tool.image_to_string(img_org, lang="eng", builder=builder)
|
412
|
+
|
413
|
+
|
414
|
+
|
415
|
+
print(result)
|
416
|
+
|
417
|
+
|
418
|
+
|
419
|
+
```
|