ページ読み取り
記述子の kind を通じて汎用ルーティングラダーへ参加する読み取り機能、OCR エンジン、ビジョンモデルを追加します。
汎用読み取り機能は PageReader プロトコルを実装し、ルーティングラダー内の位置を決める kind を宣言します。この例は CPU の OCR レーンです。read_with_engine() は独自コードを表し、indx と接する部分はすべて実際の公開契約です。パッケージ化とインストールは概要の手順に従います。
from typing import Any
from indx_interfaces import ( BlockStatus, CapabilityDescriptor, CapabilityId, CapabilityKind, Device, PageOutput,)
CAPABILITY_ID = CapabilityId("acme-ocr")
class Reader: def read( self, content: bytes, media_type: str, pages: tuple[int, ...] ) -> tuple[PageOutput, ...]: outputs = [] for page in pages: try: text, metadata = read_with_engine(content, media_type, page) outputs.append(PageOutput(page=page, text=text, metadata=metadata)) except Exception as error: outputs.append( PageOutput( page=page, status=BlockStatus.FAILED, reason=str(error), ) ) return tuple(outputs)
class Provider: def descriptors(self) -> tuple[CapabilityDescriptor, ...]: return ( CapabilityDescriptor( id=CAPABILITY_ID, version="1", kind=CapabilityKind.OCR, devices=(Device.CPU,), media_types=("application/pdf",), available=True, ), )
def create(self, capability_id: CapabilityId) -> Any: if capability_id != CAPABILITY_ID: raise ValueError(f"unknown capability: {capability_id}") return Reader()重い実行環境は create()、read()、または遅延インポートする実装モジュール内で読み込みます。探索はすべてのスナップショット構築時に descriptors() を呼ぶため、モデルの重み、GPU の初期化、外部サービスへの接続を行ってはいけません。