このページでは、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 のソースコードに埋め込みます。クライアント シークレットを取得するには、次の手順を行います。
Google Cloud Console の [認証情報] ページに移動します。
[認証情報] ページに移動[認証情報を作成] をクリックし、[OAuth クライアント ID] を選択します。
[アプリケーションの種類] で、[ウェブ アプリケーション] を選択します。
選択した名前を追加します。
[承認済みの JavaScript 生成元] と [承認済みのリダイレクト URI] の下に
http://localhost:8000
と入力します。[作成] をクリックし、表示される [OAuth クライアント] ウィンドウで [OK] をクリックします。次のセクションで使用するために、クライアント ID をコピーします。
ビューアでのクライアント シークレットを構成する
前のセクションで取得したクライアント ID を使用して、次の手順を行います。
dicomweb-wsi-viewer
ディレクトリで、viewer.js
ファイルを開きます。クライアント ID が含まれるように、次の行を置き換えます。
const CLIENT_ID = 'INSERT-YOUR-CLIENT-ID-HERE'
この行は次の例のようになります。
const CLIENT_ID = 'PROJECT_ID-VALUE.apps.googleusercontent.com';
ファイルを保存します。
OAuth 同意画面の構成
Google Cloud プロジェクトの OAuth 同意画面をまだ構成していない場合は、次の手順を行います。
OAuth 同意画面に移動します。
OAuth 同意画面に移動します[サポートメール] で、一般公開される連絡先として表示するメールアドレスを選択します。このメールアドレスは、自分のメールアドレスまたは自身が所有する Google グループにする必要があります。
[アプリケーション名] に、アプリケーションの表示名を入力します。
[スコープを追加] をクリックします。表示されるダイアログに
https://www.googleapis.com/auth/cloud-healthcare
と入力し、[追加] をクリックします。[保存] をクリックします。
プロダクト名やメールアドレスなど、OAuth 同意画面の情報を後で変更する場合は、上記の手順を繰り返して同意画面を構成します。
Google Cloud プロジェクトの OAuth 同意画面をすでに構成している場合は、[スコープを追加] ダイアログで https://www.googleapis.com/auth/cloud-healthcare
を追加する必要があります。
DICOMweb WSI ビューアを実行する
dicomweb-wsi-viewer
ディレクトリで、次のコマンドを実行します。python -m http.server 8000
前のコマンドを実行したマシンで
https://localhost:8000
に移動します。UI で [Sign in / Authorize] をクリックして OAuth 同意画面にアクセスし、Google Cloud プロジェクトと Cloud Healthcare API リソースにアクセスする権限をビューアに付与します。