画像・PDFから構造化データを抽出!PaddleOCRの導入と活用ガイド
今回は、PDFや画像からテキストを抽出してAIで活用するのに便利なツール「PaddleOCR」について、その魅力と使い方をたっぷりご紹介します。
PaddleOCRは、PaddlePaddleというAIフレームワークをベースにした、高性能で軽量なOCR(光学文字認識)ツールキットです。OCRとは、画像やPDFファイルから文字を読み取ってテキストデータに変換する技術のこと。
PaddleOCRのすごいところ
高精度
80以上の言語に対応しており、高精度で文字を認識します。
多機能
テキスト認識だけでなく、表の構造を認識したり、キーと値のペアを抽出したりする機能(KIE
Key Information Extraction)も備えています。
軽量
モデルが軽量なので、比較的低スペックな環境でも動かすことができます。
オープンソース
無料で利用でき、商用利用も可能です。
OCRは、様々な業務で活用できます。例えば...
書類の自動処理
請求書や領収書、申込書などの画像から、必要な情報を自動的に抽出してデータベースに登録するシステムを作れます。
PDFからのデータ抽出
PDF形式の報告書や仕様書から、特定の項目を抽出して分析するツールを開発できます。
画像からのテキスト検索
大量の画像の中から、特定のキーワードを含むものを探し出すシステムを構築できます。
PaddleOCRは、これらのタスクを効率的に、しかも高精度で実現するための強力なツールなのです。
まずは環境を整えましょう。Pythonのpipを使って簡単にインストールできます。
Python環境の準備
Python 3.8以上を推奨します。
PaddleOCRのインストール
pip install "paddleocr>=2.6.0.3" -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddlepaddle
中国国内からインストールする場合は、ミラーサイトを使うと高速です。日本など海外からは、--index-urlオプションをつけずにそのままpip install paddleocrで大丈夫です。
次に、具体的な使い方をサンプルコードで見ていきましょう。
まずは、画像ファイルから文字を認識する基本のコードです。
from paddleocr import PaddleOCR, draw_ocr
import cv2
from PIL import Image
# PaddleOCRモデルのロード
# lang='en'で英語、'ch'で中国語、'ja'で日本語など指定可能
# 'ja'はより新しいモデルがあるかもしれませんので、公式サイトで確認してください
ocr = PaddleOCR(use_angle_cls=True, lang='en')
# 認識させたい画像ファイルを指定
img_path = 'your_image.jpg'
# OCRを実行
result = ocr.ocr(img_path, cls=True)
# 認識結果の表示
for line in result:
for text_info in line:
# text_infoは [座標, (テキスト, 信頼度)] の形式
print(text_info[1][0]) # テキストのみを出力
PDFファイルからテキストを抽出したい場合も、基本的には同じです。
from paddleocr import PaddleOCR
import os
# OCRモデルのロード
ocr = PaddleOCR(use_angle_cls=True, lang='en')
# PDFファイルを指定
pdf_path = 'your_document.pdf'
# OCRを実行
# PDFから直接処理できます
result = ocr.ocr(pdf_path, cls=True)
# 結果の表示
for page in result:
for line in page:
print(line[1][0])
PaddleOCRには、表を認識してJSONなどの構造化データとして出力する機能もあります。
from paddleocr import PaddleOCR
import json
# 表認識モデルのロード
ocr = PaddleOCR(use_angle_cls=True, det=False, rec=False, table=True)
# 表を含む画像を処理
img_path = 'table_image.png'
result = ocr.ocr(img_path)
# 結果はJSON形式で取得できます
table_json = result[0]['html']
print(table_json)
出力例
<table><tr><td>Header 1</td><td>Header 2</td></tr><tr><td>Data A</td><td>Data B</td></tr></table>
どの部分が認識されたかを確認するために、元の画像に認識された枠を描画する機能も便利です。
# 認識結果の描画
image = cv2.imread(img_path)
boxes = [line[0] for line in result]
texts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, texts, scores, font_path='simfang.ttf') # フォント指定
# 結果の画像を表示
cv2.imwrite('result.jpg', im_show)
モデルのダウンロード
初回実行時に必要なモデルが自動でダウンロードされます。インターネット接続が必要です。
GPUの活用
もしGPU環境があれば、use_gpu=Trueとすることで、処理速度が大幅に向上します。
日本語モデル
日本語の認識精度を上げるには、lang='ja'を指定します。場合によっては、より新しいモデルや別のモデルを試すことで、精度が改善することがあります。