注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

Code Repositories でメディアセットのバッチパイプラインを作成する

このガイドでは、Code Repositories アプリケーションを使った簡単な変換例を順に説明します。メディアセットを扱う Python コードの記述方法と編集方法を学びます。

1. リポジトリを作成する

まず、新しいリポジトリを作成します。Foundry のプロジェクトに移動し、右上の + 新規を選択してから、Code repository を選択します。

このガイドでは、Python トランスフォームを記述します。リポジトリに名前を付け、Template の言語のドロップダウンメニューで Python を選択します。次に、初期化を選択します。

新しい Python トランスフォームリポジトリ

2. データをインポートする

使用する未加工メディアセットをすでにインポートしている場合は、次のステップに進めます。まだインポートしていない場合は、メディアセットのガイドの Foundry にメディアをインポートする方法を参照してください。

3. transforms-media ライブラリをインポートする

メディアセットの変換を使用するには、transforms-media ライブラリをインポートする必要があります。

左サイドバーのライブラリに移動し、transforms-media ライブラリを検索して選択します。次に、ライブラリの追加とインストールを選択します。

transforms-media ライブラリ

インストールが完了すると、ステータスにライブラリがインストールされましたと表示されるはずです。

インストールされた transforms-media ライブラリ

4. コードを編集する

新しいファイルを作成する

Python トランスフォームリポジトリを作成すると、ベースとして使用できる examples.py ファイルが自動生成されるはずです。省略記号アイコンを選択し、名前を変更を選んで適切な名前を付けることで、ファイル名を変更できます。 自動生成された Python ファイル

新しいファイルを作成する場合は、データセットディレクトリの省略記号アイコンを選択し、新規ファイルを選びます。このワークフローでは、必ず Python ファイルを作成してください。

適切なライブラリをファイルにインポートする

メディアセットを扱う場合は、@transform デコレーターを使用する必要があります。メディアセットの入力と出力は、transforms.mediasets.MediaSetInput と transforms.mediasets.MediaSetOutput の指定を使って渡す必要があります。

Copied!
1 2 3 4 5 6 from transforms.api import transform from transforms.mediasets import MediaSetInput, MediaSetOutput @transform( images=MediaSetInput('/examples/images'), ... )

出力ファイルが存在することを確認する

メディアセットの出力ファイルを作成する場合は、トランスフォームのデコレーターで参照する前に、必ず作成してください。

このファイルを作成するには、プロジェクトフォルダー(最初に Python トランスフォームのコードリポジトリを作成した場所)に移動し、ドロップダウンメニューから新規 > メディアセットを選択します。

空の出力メディアセットを作成

get_media_item()、get_media_item_by_path()、または list_media_items_by_path_with_media_reference() を使用する

メディアセット内の各メディアアイテムを変換するには、変換処理で get_media_item() または get_media_item_by_path() を使って、これらのメディアアイテムを参照する必要があります。

get_media_item() と get_media_item_by_path() を呼び出すと、Python のファイルライクなストリームオブジェクトが返されます。io.open() ↗ が受け付けるすべてのオプションにも対応しています。メディアアイテムはストリームとして読み込まれるため、ランダムアクセスには対応していません。

個々のメディアアイテムは、次のように参照できます。

Copied!
1 2 3 4 5 6 7 8 9 from transforms.api import transform from transforms.mediasets import MediaSetInput, MediaSetOutput @transform( images=MediaSetInput('/examples/images'), output_images=MediaSetOutput('/examples/output_images') ) def translate_images(images, output_images): image1 = images.get_media_item_by_path("image1") # パスを使用します image2 = images.get_media_item("ri.mio.main.media-item.123") # RID を使用します

ただし、通常はメディアセット内のすべてのメディアアイテムをデータフレームに格納して一覧化することになります。メディアアイテムを一覧化するには、list_media_items_by_path_with_media_reference() を使用する必要があります。

Copied!
1 2 3 4 5 6 7 8 9 10 from transforms.api import transform, Output from transforms.mediasets import MediaSetInput @transform( images=MediaSetInput('/examples/images'), listing_output=Output('/examples/listed_images') ) def translate_images(ctx, images, listing_output): media_items_listing = images.list_media_items_by_path_with_media_reference(ctx) # 一覧として出力されたデータに対して、任意の PySpark 関数を実行できます

一覧のスキーマは次のようになります。

+--------------------------+-----------+-------------------+
|        mediaItemRid      |    path   |  mediaReference  |
+--------------------------+-----------+-------------------+
| ri.mio.main.media-item.1 | item1.jpg |  {{reference1}}   |
| ri.mio.main.media-item.2 | item2.jpg |  {{reference2}}   |
| ri.mio.main.media-item.3 | item3.jpg |  {{reference3}}   |
+--------------------------+-----------+-------------------+

例:PDF メディアセットを新しい PNG メディアセットに変換する

この例では、PDF メディアセット内のすべてのメディアアイテムをループ処理し、PNG 画像として保存します。

入力例:

入力 PDF

list_media_items_by_path_with_media_reference() はデータフレームを返すため、その出力に対して PySpark 関数を実行できます。この例では、mediaItemRid 列の値を収集し、配列としてループ処理します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from transforms.api import transform from transforms.mediasets import MediaSetInput, MediaSetOutput @transform( pdfs=MediaSetInput('INPUT_MEDIA_SET_PATH'), output_pngs=MediaSetOutput('OUTPUT_MEDIA_SET_PATH') ) def upload_images(ctx, pdfs, output_images): media_items_listing = pdfs.list_media_items_by_path_with_media_reference(ctx) rid_list = media_items_listing.rdd.map(lambda x: x.mediaItemRid).collect() for rid in rid_list: output_png = pdfs.transform_document_to_png(rid, 0) output_images.put_media_item(output_png, "PNG_"+rid)

これにより、PNG ファイルを含む出力メディアセットが作成されます(メタデータプロパティで確認できます)。

出力 PNG

標準で利用可能な変換の一覧は、ドキュメントで確認できます。

4. 変更をテストする

データ変換コードを記述したら、加えた変更をテストすることを推奨します。テストによって、変更をマージする前に、コードが期待どおりに動作することを確認できます。

Foundry では、コードリポジトリと同様に、メディアセットでもブランチを作成できます。ブランチの作成は、複数ステップのデータパイプラインの設計をテストする際に役立ちます。たとえば、このブランチに依存しないユーザーの下流の依存関係を壊すことなく、データパイプラインの一部に対する変更を個別にテストできます。

5. 変更をコミットする

ここで、Code Repositories で変更をコミットして、実施した作業にラベルを付けられます。コミットする前も、デフォルトでは作業内容が自動保存されます。コミットは、作業の区切りに達した時点で、一連の変更に明示的にラベルを付けるものです。

コミットボタンを選択すると、変更がコミットされ、コードの自動チェックが実行されます。Build ボタンを選択した場合も、変更がコミットされ、コードの自動チェックが実行され、出力データセットのビルドが開始されます。データセットをビルドせずに変更をすばやくテストし、コードがチェックに合格することを確認するには、コミットを選択します。それ以外の場合は、変更をマージしてビルドするに進めます。

6. 変更をマージしてビルドする

新しいメディアセットの出力に問題がなければ、共同作業者と協力して変更をマージし、ビルドして、表示します。