「コピー+貼り付け」に別れを告げ、ディープラーニングOCRに基づくPDFからテキストへの変換を実現

「コピー+貼り付け」に別れを告げ、ディープラーニングOCRに基づくPDFからテキストへの変換を実現

[[403226]]

従来の講義には通常、PDF スライドのセットが付属します。一般的に、このような講義のメモを取りたい場合は、PDF から多くのコンテンツをコピーして貼り付ける必要があります。

最近、K1 Digital のシニア機械学習エンジニアである Lucas Soares 氏は、OCR (光学文字認識) を使用して PDF スライドを自動的に転記し、マークダウン ファイル内でそのコンテンツを直接操作して、PDF コンテンツの手動コピー アンド ペーストを回避することで、このプロセスを自動化しようとしています。

左はプロジェクト作者のルーカス・ソアレスです。

プロジェクトアドレス: https://github.com/EnkrateiaLucca/ocr_for_transcribing_pdf_slides

従来の PDF からテキストへの変換ツールを使用しないのはなぜですか?

ルーカス・ソアレス氏は、従来のツールでは問題がさらに増え、解決に時間がかかることに気付きました。彼は従来の Python パッケージの使用を試みましたが、複雑な正規表現パターンを使用して最終出力を解析する必要があるなど、多くの問題に遭遇したため、オブジェクト検出と OCRを試してみることにしました。

基本的なプロセスは次のステップに分けられます。

  • PDF を画像に変換します。
  • 画像内のテキストを検出して認識します。
  • 出力例を表示します。

PDF をテキストに転記するディープラーニングベースの OCR

PDFを画像に変換する

Soares が使用した PDF スライドは、David Silver の Reinforcement Learning からのものです (下記の PDF スライドのアドレスを参照)。 「pdf2image」パッケージを使用して、各スライドを png 画像形式に変換します。

PDF スライドの例。

アドレス: https://www.davidsilver.uk/wp-content/uploads/2020/03/intro_RL.pdf

コードは次のとおりです。  

  1. pdf2image からインポートconvert_from_path
  2. pdf2image.exceptions からインポート(
  3. PDFInfoNotInstalledError、
  4. PDFページカウントエラー、
  5. PDF構文エラー
  6. pdf_path = "ファイルへのパス/intro_RL_Lecture1.pdf"
  7. 画像 = convert_from_path(pdf_path)
  8. iの場合、enumerate(images)内の画像:
  9. fname = "画像" + str(i) + ".png"
  10. image.save(fname, "PNG" )

処理後、すべての PDF スライドは PNG 形式の画像に変換されます。

画像内のテキストを検出して認識する

PNG 画像内のテキストを検出して認識するために、Soares は ocr.pytorch ライブラリのテキスト検出器を使用しました。指示に従ってモデルをダウンロードし、チェックポイント フォルダーにモデルを保存します。

ocr.pytorch ライブラリのアドレス: https://github.com/courao/ocr.pytorch

コードは次のとおりです。  

  1. #このソースから改変: https://github.com/courao/ocr.pytorch
  2. %load_ext 自動リロード
  3. %自動リロード2
  4. インポートOS
  5. OCRからOCRをインポート
  6. インポート時間
  7. 輸入シュティル
  8. numpyをnpとしてインポートする
  9. パスライブラリをインポートする
  10. PILインポート画像から
  11. globからglobをインポート
  12. matplotlib.pyplot を plt としてインポートします
  13. Seaborn を SNS としてインポートする
  14. sns.set()
  15. pytesseractをインポートする
  16. def single_pic_proc(画像ファイル):
  17. 画像 = np.array(Image.open(image_file).convert( 'RGB' ))
  18. 結果、image_framed = ocr(image)
  19. 結果を返す、image_framed
  20. image_files = glob( './input_images/*.*' )
  21. 結果ディレクトリ = './output_images_with_boxes/'
  22. # 出力フォルダーが存在する場合は、それを削除してやり直します。
  23. os.path.exists(result_dir)が存在する場合:
  24. shutil.rmtree(結果ディレクトリ)
  25. os.mkdir(結果ディレクトリ)
  26. sorted(image_files) 内の image_fileの場合:
  27. 結果、image_framed = single_pic_proc(image_file) # テキストの検出と認識
  28. ファイル名 = pathlib.Path(image_file).name
  29. 出力ファイル = os.path.join(result_dir, image_file.split( '/' )[- 1 ])
  30. txt_file = os.path.join(result_dir, image_file.split( '/' )[- 1 ].split( '.' )[ 0 ]+ '.txt' )
  31. txt_f = txt_file を開きます。'w'
  32. Image.fromarray(image_framed).save(出力ファイル)
  33. 結果のキー:
  34. txt_f.write(結果[キー][ 1 ]+ '\n' )
  35. txt_f.close()

入力フォルダーと出力フォルダーを設定し、すべての入力画像 (変換された PDF スライド) をループし、single_pic_proc() 関数を介して OCR モジュールの検出モデルと認識モデルを実行し、最後に出力を出力フォルダーに保存します。

検出は Pytorch CTPN モデルを継承し、認識は Pytorch CRNN モデルを継承します。どちらも OCR モジュールに存在します。

サンプル出力

コードは次のとおりです。  

  1. cv2をcvとしてインポートする
  2. output_dir = pathlib.Path( "./output_images_with_boxes" )
  3. # 画像 = cv2.imread(str(np.random.choice(list(output_dir.iterdir()), 1 )[ 0 ]))
  4. 画像 = cv2.imread(f "{output_dir}/image7.png" )
  5. size_reshaped = ( int (image.shape[ 1 ]), int (image.shape[ 0 ]))
  6. 画像 = cv2.resize(画像、size_reshaped)
  7. cv2.imshow( "画像" , 画像)
  8. cv2.waitKey( 0 ) 待ちキーを0にする
  9. cv2.すべてのウィンドウを破棄する()

下の左側の写真は元の PDF スライドを示しており、右側の写真は非常に高い精度で転写された出力テキストを示しています。

テキスト認識出力は次のようになります。  

  1. ファイル名 = f "{output_dir}/image7.txt"
  2. open(filename, "r" ) をテキストとして:
  3. text.readlines() 内の行の場合:
  4. print(line.strip( "\n" ))

こうすることで、手書きのメモの検出と認識から写真内のランダムなテキストの検出と認識まで、あらゆる種類の文書を転記するための非常に強力なツールが完成します。独自の OCR ツールを使用してテキスト コンテンツを処理した方が、外部ソフトウェアを使用してドキュメントを書き写すよりもはるかに優れています。

<<:  Google が史上最強の人間の脳の「地図」を公開、3D ニューロンの「森」がオンラインで閲覧可能に

>>:  まだ理解していないフーリエ変換。ニューラルネットワークはそれを学習するのにたった30行以上のコードしか使用しませんでした

ブログ    

推薦する

ビジュアルTransformer BERTの事前トレーニングのための新しい方法:USTC、MSRAなどが提案したPeCo

[[438709]]大規模なコーパスでトレーニングされた Transformer モデルは、自然言...

天才か愚か者か: 史上最も物議を醸したニューラル ネットワーク

エクストリームラーニングマシンExtreme Learning Machine は、これまでで最も賢...

クラウドで必要な 5 つの機械学習スキル

機械学習と AI は IT サービスにさらに深く浸透し、ソフトウェア エンジニアが開発したアプリケー...

ワンクリックでコード化からコード化なしに変更できますか? AIブラックテクノロジーは本当にモザイクを除去できるのか?

モザイクは人々に嫌われており、「モザイクは人類の文明の進歩を妨げる」という諺が生まれたほどです。映画...

AIが普及するにつれ、テクノロジー企業には「最高バイアス責任者」が必要だ

王立歴史協会は最近、人工知能アルゴリズムを使用した初の研究で、英国の労働力に「大きな性差別」があるこ...

Microsoft Flight SimulatorはAIを使って15億の建物を復元、宮殿がオフィスビルに変わる際にバグが発生

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

大規模モデルは小規模モデルに正確にフィードバックし、知識の蒸留はAIアルゴリズムのパフォーマンスを向上させるのに役立ちます。

01 知識蒸留の誕生の背景近年、ディープニューラルネットワーク (DNN) は、特にコンピューター...

トランプの「猫と犬バージョン」を生成、偽顔ツールStarGANv2が壊れており、アルゴリズムがオープンソース化されている

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

ニューロンクラスタリングはAIの学習戦略をシミュレートできる

人間や機械がタスクをよりうまく実行できるようになるたびに、証拠の痕跡が残ります。パフォーマンス向上の...

データ中心主義と民主化を実践する方法

[[418617]]人工知能と人間の知能は互いに対立するものではなく、本質的に共生関係にあります。企...

...

...

Zigbeeプロトコルスタックの暗号化アルゴリズムについての簡単な説明

先ほど、Zigbee プロトコル スタックのいくつかの原則と構造を紹介しました。すでに理解しているか...

博士課程新卒者の年収は80万元。AI業界で就職するのは本当にそんなに簡単なのでしょうか?

[[251000]]最近、人工知能(AI)業界が活況を呈しており、この分野の卒業生にとって有望な就...