「コピー+貼り付け」に別れを告げ、ディープラーニング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行以上のコードしか使用しませんでした

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

知湖橋プラットフォームにおける大型モデルの応用と実践

1. 事業の状況及び背景まずはブリッジプラットフォームを紹介します。 Bridge は、Zhihu ...

機能テストケース自動生成アルゴリズム ペアワイズ

[[433685]]ペアワイズアルゴリズムとは何ですか?次のテストシナリオの場合:ブラウザ: M、O...

よりスケーラブルになるにはどうすればよいでしょうか?

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

個人信用リスク評価モデルにおける新しいビッグデータアルゴリズムの使用の有効性の評価

1980 年代に、FICO はロジスティック回帰アルゴリズムに基づく FICO クレジット スコアリ...

...

テラデータCTO バオ・リミン:分析エンジンを使用して機械学習とディープラーニングを実現する

[51CTO.comよりオリジナル記事] 近年、機械学習、ディープラーニング、ビッグデータ分析が話題...

...

7.4K スター! わずか数分で機械学習モデル用の美しいインタラクティブ インターフェースを生成できます

Gradio は、機械学習やデータ サイエンス関連のデモや Web アプリケーションを構築するための...

...

運転教習業界にも「AI」の波が吹き荒れる、普及規模に注目

[[422314]]近年、都市化と道路交通建設の加速により、自動車旅行の需要が継続的に増加しており、...

AutoXの完全無人タクシーが試験運用のため正式に一般公開

1月28日、深センの大手自動運転企業AutoXは自動運転の新たな段階に入り、平山区に中国初の完全自動...

識別的か生成的か: どちらが視覚的理解の未来を表すのでしょうか?

これまで、視覚システムに関する基本的な研究の多くは、動物に画像を見せ、そのニューロンの反応を測定し、...

平均年収35万元、2018年のビッグデータAIの発展動向分析

近年、ビッグデータは非常に人気があり、特に2017年には、ビッグデータ産業の発展が政府活動報告に記載...

ビッグデータと人工知能の関係

[[342758]]人工知能教育は最も美しい新しいインフラです人工知能のアルゴリズムの中にはデータ...

ディープラーニングを理解する

1. 現在の状況:ディープラーニングは現在非常に注目されており、あらゆる種類のカンファレンスがそれと...