約 1 年前、私はファイルからデータ (主にテーブルに含まれるデータ) を抽出して構造化するタスクを割り当てられました。私にはコンピューター ビジョンに関する予備知識がなかったので、適切な「プラグ アンド プレイ」ソリューションを見つけるのに苦労しました。当時利用可能なオプションは、大規模で扱いにくい最新のニューラル ネットワーク (NN) に基づくソリューションか、一貫性が十分ではない OpenCV に基づくシンプルなソリューションのいずれかでした。
既存の OpenCV スクリプトからインスピレーションを得て、テーブルを抽出するシンプルで一貫した方法を開発し、それをオープンソースの Python ライブラリにしました: img2table
必要なコンテンツ書き換えられる内容は次のとおりです: リンク: https://github.com/xavctn/img2table
深層学習ソリューションと比較して、この軽量パッケージはトレーニングを必要とせず、最小限のパラメーター化を必要とします。次の機能を提供します。
pip install img2table
从img2table.document导入Image类# 图像实例化 img = Image(src="myimage.jpg")# 表格识别 img_tables = img.extract_tables()# 表格识别结果 img_tables[ExtractedTable(title=None, bbox=(10, 8, 745, 314),shape=(6, 3)), ExtractedTable(title=None, bbox=(936, 9, 1129, 111),shape=(2, 2))]
書き換える必要がある内容は次のとおりです: 上記の例で使用されている画像
テーブルの内容を抽出したい場合は、OCR ツールを使用する必要があります。以下の手順に従ってください:from img2table.document import PDFfrom img2table.ocr import TesseractOCR# Instantiation of the pdfpdf = PDF(src="mypdf.pdf")# Instantiation of the OCR, Tesseract, which requires prior installationocr = TesseractOCR(lang="eng")# Table identification and extractionpdf_tables = pdf.extract_tables(ocr=ocr)# We can also create an excel file with the tablespdf.to_xlsx('tables.xlsx',ocr=ocr)
サンプル表は、PDF ファイルから抽出されたサンプルです
最後に、簡単な場合は、「borderless_tables」パラメータを設定することで「ボーダレス」テーブルの抽出を実行できます。これにより、セルを境界線で完全に囲む必要がないテーブルを検出できます。元の意味を変更する必要はありません。書き直す必要があるのは、「ボーダレス」テーブルの抽出例です。
これは、完全な内容!実際、リポジトリは複雑ではありません。私たちの目標はリポジトリをできる限り単純化し、複雑さをもたらす可能性のある他のソリューションの導入を避けることです。 詳細については、プロジェクトの GitHub ページをご覧ください。ドキュメントと例: https://github.com/xavctn/img2table 基礎的な実装 すべての画像処理では OpenCV と opencv -python を使用しますライブラリが完成しました。ただし、これはまだかなり基本的なものです。 アルゴリズムの中心となるのは、画像内の直線を識別できるハフ変換です。これにより、画像内の水平線と垂直線を検出できるようになります需要重写的内容是:cv2.HoughLinesP(img, rho, theta, threshold, None, minLinLength, maxLineGap)
簡素化されたアルゴリズム表現の実装
ほとんどの計算は、優れたパフォーマンスと速度を実現するために、Polars を使用して実行されます。以上がPythonを使用して画像からテーブルを抽出するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。