デジタル病理での Cloud Healthcare API の使用

このページでは、Cloud Healthcare API を使用して全体スライド画像(WSI)を保存、分析、管理する方法について説明します。

概要

デジタル病理では、従来のガラス スライドをデジタル化して全体スライド画像(WSI)を作成し、保存、処理、管理できます。

WSI は通常、数 GB に達する場合がある大きなファイルです。これらのファイルはさまざまなファイル形式になるため、管理が難しくなる場合があります。Cloud Healthcare API を使用すると、WSI を保存、分析、管理するプロセスが簡素化されます。

DICOM を使用して全体スライド画像を保存する

Cloud Healthcare API は、DICOM 画像を保存するためのマネージド サービスです。このサービスは、WSI の保存と取得もサポートしています。Cloud Healthcare API の DICOM の詳細については、DICOM をご覧ください。

DICOM の使用には、次の利点があります。

  • 複数のベンダーとソフトウェアをサポートします。
  • DICOM はファイル形式であり、DICOMweb API と DIMSE API を定義するネットワーキング プロトコルでもあります。これらの API は、DICOM インスタンスの取得と保存に使用され、多くの機能を提供し、画像の操作を簡素化します。

全体スライド画像を DICOM に変換する

ほとんどの WSI スキャナは、WSI から DICOM ファイルをネイティブに生成しません。そのため、WSI を DICOM ファイルに手動で変換する必要があります。

WSI を DICOM に変換できるツールは次のとおりです。

以下のセクションでは、wsi2dcm コマンドライン ツールを使用して DICOM ファイルを生成する方法を説明します。

wsi2dcm コマンドライン ツールを使用して DICOM ファイルを生成する

次の手順を実行する前に、有効な WSI ファイルがあるかを確認してください。サンプルデータは、OpenSlide および Digital Pathology Association のウェブサイトに掲載されている他のリソースから入手できます。

wsi2dcm コマンドライン ツールを実行します。

wsi2dcm \
    --input=INPUT_WSI \
    --outFolder=PATH/TO/OUTPUT/FOLDER \
    --seriesDescription=WSI_DESCRIPTION

ここで

  • INPUT_WSI は、WSI ファイルのパスと名前です。
  • PATH/TO/OUTPUT/FOLDER は、ツールが変換された DICOM ファイルを出力するパスです。
  • WSI_DESCRIPTION は、変換された DICOM ファイルに対して選択した説明です。

ツールを実行すると、WSI からいくつかの DICOM ファイルが生成されます。DICOM ファイルには、.dcm というサフィックスが付いています。

Cloud Healthcare API への DICOM ファイルのアップロード

まだ DICOM ストアを作成していない場合は、ここで作成します。

次のいずれかの方法を使用して、生成された DICOM ファイルを DICOM ストアにアップロードできます。

DICOM ファイルとそのメタデータの取得

DICOM ストアに DICOM ファイルをアップロードすると、DICOM イメージに関するメタデータを一覧表示できます。

全体スライド画像の一覧表示

各 WSI は DICOM のスタディです。WSI を一覧表示するには、dicomStores.searchForStudies メソッドを呼び出します。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: DICOM ストアの親データセット
  • DICOM_STORE_ID: DICOM ストアの ID

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies" | Select-Object -Expand Content

API Explorer

メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。

次のような JSON レスポンスが返されます。

全体スライド画像のメタデータを表示する

各スタディには複数のインスタンスが含まれ、各インスタンスには WSI のタイルのサブセットが含まれています。スタディ内のインスタンスのインスタンス メタデータを表示するには、dicomStores.searchForInstances メソッドを呼び出します。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: DICOM ストアの親データセット
  • DICOM_STORE_ID: DICOM ストアの ID
  • STUDY_INSTANCE_UID: スタディ インスタンスの一意の ID(UID)

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances?StudyInstanceUID=STUDY_INSTANCE_UID"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances?StudyInstanceUID=STUDY_INSTANCE_UID" | Select-Object -Expand Content

API Explorer

メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。

次のような JSON レスポンスが返されます。

全体スライド画像のタイルの表示

通常、各インスタンスには複数のフレームが含まれています。フレームとは、WSI の「pyramid」で特定のズームレベルの WSI の 1 つのタイルです。JPEG 形式で単一のフレームを取得するには、frames.retrieveRendered メソッドを呼び出します。

curl

JPEG 形式で単一のフレームを取得するには、GET リクエストを行い、次の情報を指定します。

  • 親データセットの名前。
  • DICOM ストアの名前
  • スタディ UID
  • シリーズ UID
  • インスタンス UID
  • アクセス トークン

次のサンプルは、curl を使用した GET リクエストを示しています。

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Accept: image/jpeg" \
    --output FILENAME \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/0/rendered"

リクエストが成功すると、JPEG ファイルが自身のマシンに書き込まれます。

PowerShell

JPEG 形式で単一のフレームを取得するには、GET リクエストを行い、次の情報を指定します。

  • 親データセットの名前。
  • DICOM ストアの名前
  • スタディ UID
  • シリーズ UID
  • インスタンス UID
  • アクセス トークン

次のサンプルは、Windows PowerShell を使用した GET リクエストを示しています。

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred"; "Accept" = "image/jpeg" }

Invoke-RestMethod `
  -Method Get `
  -Headers $headers `
  -OutFile FILENAME `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/0/rendered"

リクエストが成功すると、JPEG ファイルが自身のマシンに書き込まれます。

全体スライド画像を取得する

WSI を含むインスタンス全体を取得するには、instances.retrieveInstance メソッドを使用します。

curl

インスタンス全体を取得するには、GET リクエストを行い、次の情報を指定します。

  • 親データセットの名前。
  • DICOM ストアの名前
  • スタディ UID
  • シリーズ UID
  • インスタンス UID
  • アクセス トークン

次のサンプルは、curl を使用した GET リクエストを示しています。

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Accept: application/dicom" \
    --output FILENAME \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID"

リクエストが成功すると、DICOM ファイルが自身のマシンに書き込まれます。

PowerShell

インスタンス全体を取得するには、GET リクエストを行い、次の情報を指定します。

  • 親データセットの名前。
  • DICOM ストアの名前
  • スタディ UID
  • シリーズ UID
  • インスタンス UID
  • アクセス トークン

次のサンプルは、Windows PowerShell を使用した GET リクエストを示しています。

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred"; "Accept" = "application/dicom" }

Invoke-RestMethod `
  -Method Get `
  -Headers $headers `
  -OutFile FILENAME `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID"

リクエストが成功すると、DICOM ファイルが自身のマシンに書き込まれます。

全体スライド画像ビューアを使用してスライドを表示する

前のセクションでは、WSI のメタデータを表示する方法と、個々のタイルを取得する方法を示しました。WSI 全体を表示するには、DICOMweb を備えた WSI ビューアを使用する必要があります。

Cloud Healthcare API と適合性のあるビューアは次のとおりです。

変換された WSI DICOM ファイルを DICOMweb WSI ビューアを使用して表示する

DICOMweb WSI ビューアを使用して変換された WSI DICOM ファイルを表示するには、以下のセクションを完了してください。

ビューアをダウンロードする

DICOMweb WSI ビューアをダウンロードします。

git clone https://github.com/GoogleCloudPlatform/dicomweb-wsi-viewer.git

クライアント シークレットを取得する

クライアント シークレットは、ユーザーがアプリケーションにアクセスするときに、ユーザーを認証します。クライアント シークレットを DICOMweb WSI Viewer のソースコードに埋め込みます。クライアント シークレットを取得するには、次の手順を行います。

  1. Google Cloud Console の [認証情報] ページに移動します。
    [認証情報] ページに移動

  2. [認証情報を作成] をクリックし、[OAuth クライアント ID] を選択します。

  3. [アプリケーションの種類] で、[ウェブ アプリケーション] を選択します。

  4. 選択した名前を追加します。

  5. [承認済みの JavaScript 生成元] と [承認済みのリダイレクト URI] の下に http://localhost:8000 と入力します。

  6. [作成] をクリックし、表示される [OAuth クライアント] ウィンドウで [OK] をクリックします。次のセクションで使用するために、クライアント ID をコピーします。

ビューアでのクライアント シークレットを構成する

前のセクションで取得したクライアント ID を使用して、次の手順を行います。

  1. dicomweb-wsi-viewer ディレクトリで、viewer.js ファイルを開きます。

  2. クライアント ID が含まれるように、次の行を置き換えます。

    const CLIENT_ID = 'INSERT-YOUR-CLIENT-ID-HERE'
    

    この行は次の例のようになります。

    const CLIENT_ID = 'PROJECT_ID-VALUE.apps.googleusercontent.com';
  3. ファイルを保存します。

Google Cloud プロジェクトの OAuth 同意画面をまだ構成していない場合は、次の手順を行います。

  1. OAuth 同意画面に移動します。
    OAuth 同意画面に移動します

  2. [サポートメール] で、一般公開される連絡先として表示するメールアドレスを選択します。このメールアドレスは、自分のメールアドレスまたは自身が所有する Google グループにする必要があります。

  3. [アプリケーション名] に、アプリケーションの表示名を入力します。

  4. [スコープを追加] をクリックします。表示されるダイアログに https://www.googleapis.com/auth/cloud-healthcare と入力し、[追加] をクリックします。

  5. [保存] をクリックします。

プロダクト名やメールアドレスなど、OAuth 同意画面の情報を後で変更する場合は、上記の手順を繰り返して同意画面を構成します。

Google Cloud プロジェクトの OAuth 同意画面をすでに構成している場合は、[スコープを追加] ダイアログで https://www.googleapis.com/auth/cloud-healthcare を追加する必要があります。

DICOMweb WSI ビューアを実行する

  1. dicomweb-wsi-viewer ディレクトリで、次のコマンドを実行します。

    python -m http.server 8000
    
  2. 前のコマンドを実行したマシンで https://localhost:8000 に移動します。

  3. UI で [Sign in / Authorize] をクリックして OAuth 同意画面にアクセスし、Google Cloud プロジェクトと Cloud Healthcare API リソースにアクセスする権限をビューアに付与します。