質問編集履歴

1

「試したこと」を追記しました。

2021/12/20 02:35

投稿

yohoho
yohoho

スコア2

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
+ ```