PDF テーブルを抽出するニューラル ネットワーク ツールが登場。画像をサポートし、Google GPU リソースを無料で使用できます。

PDF テーブルを抽出するニューラル ネットワーク ツールが登場。画像をサポートし、Google GPU リソースを無料で使用できます。

[[335375]]

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載しています。転載の際は出典元にご連絡ください。

いとこたちは、PDF ファイル内の表の数が多いことにまだ悩んでいますか?

Baidu で検索すると、インターネット上に PDF テーブルを抽出するツールが多数あることがわかりますが、それらはテキスト形式の PDF のみをサポートしています。

しかし、スキャンによって生成された画像テーブルはどうでしょうか?

心配しないでください。ディープ ニューラル ネットワークを使用してテーブルを認識して抽出するオープン ソース ツールが役立ちます。

画像と互換性があり、精度が高く、ローカルのコンピューティング リソースを占有しないため、このような実用的なツールは持つ価値があります。

テスト例

入力 PDF ファイルで表が検出されると、モデルは境界ボックス内に表の境界をマークします。

表形式のデータは、簡単に処理できるように Panda データ フレームに変換されます。

どうですか、実用的じゃないですか?それで、このツールはどのように使用するのでしょうか?

姿勢の詳しい説明

ニューラル ネットワーク アルゴリズムはローカル コンピューティング リソースを占有しませんか?

はい、お聞きの通り、このツールのすべてのコードは Google Colab で実行できます。つまり、ローカルにインストールしなくても、Colab クラウド リソースを使用してトレーニングと推論を完了できます。

このツールで使用されるディープ ニューラル ネットワークは Keras-RetinaNet です。まず、Colab に Keras-RetinaNet をインストールする必要があります。これは次のコード行で実行できます。

  1. git クローンhttps://github.com/fizyr/keras-retinanet

同時に、必要なライブラリをインストールする必要があります。

  1. pip install .python setup.py build_ext — インプレース

Keras-RetinaNet をトレーニングしてテーブルを認識する

まず、トレーニング データベースを構築する必要があります。

ここでは、アルゴリズム学習のために、Colab ツールPDF2Imgを使用して PDF ファイルを JPG 形式に変換する必要があります。

次に、変換した画像を Images フォルダに保存します。次に、これらのトレーニング データに手動でラベルを付ける必要があります。ここでは、オンライン ラベリング ツール makesense.ai を使用することをお勧めします。

XML 注釈ファイルを注釈フォルダーに保存し、トレーニング用とテスト用の PDF ファイルのリストを作成し、そのリストを train.txt と test.txt にインポートします。

次に、Github プロジェクト https://github.com/ferrygun/PDFTableExtract をクローンし、beautifulsoup をインストールします。

次のコマンドを実行して、PASCAL VOC 形式を Keras-RetinaNet に必要な形式に変換します。

  1. Python ビルド_logos.py

上記のコマンドを実行すると、retinanet_classes.csv、retinanet_test.csv、retinanet_train.csv が取得されます。

retinanet_classes.csv では、PDF ドキュメント内のテーブルのみが認識されるため、クラスは 1 つ (クラス 0) のみです。

タグ付けプロセス中にヘッダー、フッター、その他のタグを追加すると、それに応じて複数のクラスが取得されます。

ファイルとフォルダ構造の完全なリスト:

次に、retinanet_classes.csv、retinanet_test.csv、retinanet_train.csv、train.txt、test.txt を keras-retinanet のルート フォルダーにインポートします。

次に、Colab TrainOCR を実行します。トレーニングする JPG ファイルの数に応じて、トレーニング エポックの数を調整できます。

トレーニングが完了すると、重みファイル output.h5 が取得されます。このファイルをダウンロードしてローカル ホストに保存します。このファイルは後でテストを実行するために使用されます。

ここで注目すべき点は、Colab ではファイルが Git にアップロードされ、Git によってクローンされていることです。

テストの実行

テストを実行する前に、PDF ファイルの処理に必要なライブラリもインストールする必要があります。

PyPDF2 は、ドキュメント情報を抽出したり、ページを切り取ったりできる Python ツール ライブラリです。

次のコマンドを使用してこのライブラリをインストールします。

  1. PyPDF2 を pip でインストールします

Camelot は、PDF ページ テーブルを解析するための Python ライブラリです。

次のコマンドを使用してこのライブラリをインストールします。

  1. pip インストール camelot-py[cv]

PDF2IMG は、PDF を PIL Image オブジェクトに変換する Python ライブラリです。

次のコマンドを使用してこのライブラリをインストールします。

  1. pip で pdf2imag をインストールします

予測を実行する前に、トレーニングから取得した重みファイル output.h5 を使用してモデルをロードし、retinanet_classes.csv からラベル クラス 0 を定義する必要があります。

  1. model_path = 'output.h5'model = models.load_model(model_path, backbone_name='resnet50')labels = 'retinanet_classes.csv'LABELS = open(labels).read().strip().split('\n')LABELS = { int (L.split(',')[ 1 ]): L.split(',')[ 0 ] for L in LABELS}print(LABELS){ 0 : 'tabel'}

次にテストを実行します

  1. import numpy as npimport cv2import matplotlib.pyplot as pltimage_path = imgfname#image = cv2.imread(image_path)image = read_image_bgr(image_path)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)output = image.copy()output = cv2.cvtColor(output, cv2.COLOR_BGR2RGB)print(output.shape) # 行 (高さ) x 列 (幅) x 色 ( 3 )image = preprocess_image(image)(image, scale) = resize_image(image)image = np.expand_dims(image, axis= 0 )# 入力画像内のオブジェクトを検出し、画像修正する scale(boxes, scores, labels) = model.predict_on_batch(image)boxes /= scaleconfidence = 0 .2from google.colab.patches import cv2_imshowimport label_out = []result = "" # 検出結果をループfor (box, score, label) in zip(boxes[ 0 ], scores[ 0 ], labels[ 0 ]): # 弱い検出結果を除外if score < 信頼度: continue # 境界ボックスの座標を浮動小数点数から整数に変換box = box.astype( "int" ) # ラベルを作成し、出力画像にラベル + 境界ボックスを描画labeli = label label = "{}: {:.2f}" .format(LABELS[label], score) print(label) if LABELS[labeli] not in label_out: label_out.append(LABELS[labeli]) cv2.rectangle(output, (box[ 0 ], box[ 1 ]), (box[ 2 ], box[ 3 ]), ( 255 , 0 , 0 ), 12 ) print(box[ 0 ] ]) print(box[ 1 ]) print(box[ 2 ]) print(box[ 3 ]) #結果cv2.putText(出力、ラベル、(box[ 0 ]、box[ 1 ] - 10 )、cv2.FONT_HERSHEY_SIMPLEX、 4.5 、( 2551、1 )、 12 )plt.figure(figsize=( 2020 ))plt.imshow(出力)plt.show()

テーブルが検出されると、モデルは境界ボックス内にテーブルの境界をマークします。

境界ボックスの座標 (x1、y1、x2、y2)、table_area は Camelot read_pdf 関数に入力され、table_area は正規化された境界ボックスです。

  1. interesting_areas=[]output = [[x1, y1, x2, y2]] for x in output: [x1, y1, x2, y2] = bboxes_pdf(img, pdf_page, x) bbox_camelot = [ "," .join([str(x1), str(y1), str(x2), str(y2)]) ][ 0 ] # x1,y1,x2,y2 where (x1, y1) -> left-top and (x2, y2) -> right-bottom in PDF coordinate space #print(bbox_camelot) interesting_areas.append(bbox_camelot)print(interesting_areas)output_camelot = camelot.read_pdf( filepath=pdf_file, pages=str(pg), flavor= "stream" , table_areas=interesting_areas)output_camelot[ 0 ].df
  2. このようにして、表形式のデータを Panda データ フレームに変換し、後続の処理に使用できます。

写真をどうするか

スキャンされた画像形式の PDF フォームの場合、 Ocrmypdf パッケージを使用して、画像形式の PDF をテキスト形式に変換できます。

Ocrmypdf は、画像ベースの PDF をテキストベースの PDF に変換する Python パッケージです。

次のコマンド ラインを使用して、macOS および Linux で利用可能な ocrmypdf をインストールします。

  1. ocrmypdf をインストール

次のコマンドによって呼び出されます:

  1. ocrmypdf 入力ファイル.pdf 出力ファイル.pdf

その後は上記の方法でテーブルを抽出できます。

画像に対応し、Google GPU を無料で使用できるこの PDF スプレッドシート ツールはいかがでしょうか? 役に立ちますか?

ポータル

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

オンラインラベリングツール:
https://www.makesense.ai/

<<:  「オープン性、透明性、倫理」という目標を達成するために、AIアルゴリズムが政府の規制を策定するために使用される。

>>:  エンジニアの職が危機に:ボストン・ダイナミクスのロボット犬がフォードにエンジニアとして入社!

ブログ    
ブログ    

推薦する

4大産業用ロボット産業の市場分析と産業用ロボットの中長期的発展

中国製造2025の状況下で、イノベーションと起業家精神を奨励し、経済を高品質発展へと転換する中、中国...

OpenAIがChatGPT Enterprise Editionをリリース: GPT-4の無制限使用、より高いセキュリティとプライバシー保護

8月29日、OpenAIは、企業ユーザーのニーズを満たし、より高いセキュリティとプライバシー保護を提...

調査によると、経営幹部はAIが職務記述書を時代遅れにしていると考えている

最近の調査によると、機械が仕事を奪っていくのを見ると、人間の従業員の士気が低下する可能性があることが...

携帯電話を使ってドライバーを監視:ドライバーレコーダーもAI技術を活用し始めている

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

...

76ページのレビュー+300以上の参考文献で、Tiandaチームは大規模言語モデルアライメント技術を包括的に紹介しています。

最近、天津大学の熊徳一教授のチームが大規模言語モデルアライメント技術に関するレビュー論文(以下、アラ...

2021 年にアルゴリズム エンジニアに必要な必須スキルは何ですか?

[[413437]]アルゴリズムエンジニアにはどのような能力が必要ですか? 「ますます増加する量」...

なぜスマートグリッドはエネルギーの未来なのでしょうか?

要約すると、集中型電力ネットワークは、一日のどの時間でも過負荷にならない安定性を確保するために、特定...

ワン・ガン:人工知能は伝統的な産業の雇用の26%を置き換え、38%の新規雇用を創出する

[[265464]]人工知能の応用分野はさらに充実し、インテリジェント製造、インテリジェント運転、ス...

トレンドにおける危険とチャンス: 生成 AI の黄金期をどう捉えるか?

ChatGPTは今年9月末に音声チャットと画像認識機能を追加しました。テキスト駆動型と比較して、C...

...

無人運転と公共交通機関の標準仮想トラックで安全性を確保

深セン初の無人バスの試験運行が始まり、我が国の科学技術力に対する信頼が高まっています。ほぼ同時期に、...

...

...

顔認識はどのように機能しますか?

顔認識は、テクノロジーを通じて人の顔を識別する方法です。顔認識システムは生体認証技術を使用して、写真...