Claude Code を自分のUbuntuにセットアップしたいと思いました。Claude CodeなのでClaudeチャットにセットアップのドキュメントを準備するようにお願いしたところ、結構わかりやすく準備してくれたので、少し手を入れながら公開します。以下、Claudeが生成した文章です。私はFreeSurferの関係でまだ Ubuntu 22.04 を使っているので、Ubuntu 22.04用となります。なお、Claude Codeのセットアップは実際に手を動かして問題がありませんでした。
Ubuntuを使用する際、IPv6 環境やポート22 が閉じている場合に SSH でGitHub/GitLabを操作するための対処法
私は GitHub と GitLab をどちらも使っています。
ほぼ同時期に以下のことが起き、GitHub/GitLab との通信ができなくなりました。
- ある場所のネットワークがIPv6に切り替わった。
- 勤務先のひとつのネットワークが更新され、ポート22が閉じられた。
それぞれ調べて、以下のことがわかりました。
- 2025年10月現在、GitHub/GitLab はIPv6を完全にサポートしきれていないようです。IPv4の方が確実につながります。IPv4にするためには、 “AddressFamily inet” と config ファイルに記載します。
- ポート22が閉じられている場合、ポート443 を使うことで接続できます。その際、GitHubのホスト名は “ssh.github.com”, GitLabのホスト名は “altssh.gitlab.com” となります。
これらを反映するためには、 ホームディレクトリの下の .ssh ディレクトリに config ファイルを作成します。
その中に以下を記載します。
<h1>GitHub</h1> Host github.com Hostname ssh.github.com User git Port 443 IdentityFile ~/.ssh/id_ed25519 AddressFamily inet <h1>GitLab</h1> Host gitlab.com Hostname altssh.gitlab.com User git Port 443 IdentityFile ~/.ssh/id_ed25519 AddressFamily inet
こうしたところ、私の作業する場所はどこでも GitHub/GitLab にSSH接続できるようになりました。
ちなみに正しく接続できたかは、 以下のコマンドで確認できます。
<h1>GitHub</h1> ssh -T git@github.com <h1>GitLab</h1> ssh -T git@gitlab.com
そうすると、ともに
Enter passphrase for key '/home/ユーザ名/.ssh/id_ed25519':
と聞いてきますので、パスフレーズを入れると、
GitHubの場合は
Hi ユーザ名! You’ve successfully authenticated, but GitHub does not provide shell access.
GitLabの場合は
Welcome to GitLab, @kytk!
となります。
xargs の理解
シェルスクリプトで、パイプの後に xargs を使って処理を行うことがあります。
あまりこの使い方がピンと来ていなかったのですが、改めて man を読むとポイントは2つかなと思いました。
xargs とは
xargs は、 man によると “xargs – 標準入力を読み込んでコマンドラインを作成し、それを実行する” とあります。
ここから、以下の2つがポイントになります。
- 標準入力を読み込む→パイプが有用
- コマンドラインを作成する→コマンドの引数となる
xargs の基本形
xargs は以下のように使うことになります。
(コマンド1) | xargs コマンド2
これだと分かりづらいので、例を挙げます。
拡張子 .tmp がついているファイルを見つけて、削除したいとします。
まず、 カレントディレクトリ以下に、 “.tmp” がついているファイルは以下で見つけることができます。
find . -name '*.tmp'
この結果を削除したいとします。
この時、
rm (findの結果)
とすれば消せるわけです。
そこで、xargsを使うと、rm の後に、パイプ前の find の結果を引数として渡してあげることができます。
find . -name '*.tmp' | xargs rm
引数を明示しなければいけない場合
引数を明示するのは、コマンドが複数の引数をとる場合です。
たとえば、 cp は2つの引数をとります。
今、find の結果を、temp というディレクトリにコピーしたい場合は、 ” -I {}” で
標準入力から受け取った各行を {} という記号で置き換えることを指定し、実際に引数に入るところに {} を置きます。
つまり、以下のようになります。
find . -name '*.tmp' | xargs -I {} cp -r {} temp
ちなみに、find の場合は xargs を使わなかったとしても、
find . -name '*.tmp' -exec rm {} \;
find . -name '*.tmp' -exec cp {} temp \;
とすることで同様の結果を得ることができますが、xargs は find 以外のコマンドに対しても適用できます。
xargs の実践例
Dockerのコンテナを作成している場合、ビルド中にエラーを起こすとTAGが
ひとつならばいいのですが、それを一気に消したいと思いました。
これを以下で達成できました。
docker image ls | grep none | awk '{ print $3 }' | xargs docker image rm
簡単に解説します。
- “docker image ls” は コンテナイメージを列挙します。
REPOSITORY TAG IMAGE ID CREATED SIZE
container1 latest 608d1c44a054 2 hours ago 55.4GB
container2
container3 latest 65c0b7b9a21f 21 hours ago 43.7GB
container4
- “docker image ls | grep none” で、 none が入っているもののみ表示されます。
container2
container4
- “docker image ls | grep none | awk ‘{ print $3 }'” で、 3列めの情報のみ表示されます。
33f22ef999ce
e1bb0a89e972
- 最後に、これを ” |xargs docker image rm” に入れることで以下が実行されることになります。
docker image rm 33f22ef999ce e1bb0a89e972
ポイントは、xargs で受けるのは引数のリストとなるということでしょうか。
このように、パイプで受けること、引数の場所を意識することで、 xargs のポイントがわかった気がしました。
Lin4Neuroの Ubuntu 20.04版 から Ubuntu 22.04版 へのアップグレード
Lin4Neuroは現在、Ubuntu 22.04版がメインとなっています。
FreeSurferがまだUbuntu 24.04に対応していないためです。
しばらく前からLin4Neuroを使っている方は、Ubuntu 20.04版をお使いの可能性があります。
これをUbuntu 22.04版に更新する方法を説明します。
ある程度わかっている方向けのコマンド
- 以下のコマンドを見て内容がわかる方はこれでお願いします。
sudo apt-mark showhold #バージョンが固定されているパッケージを確認 sudo apt-mark unhold パッケージ名 #バージョン固定を解除 sudo apt remove firefox sudo apt update sudo apt full-upgrade reboot sudo do-release-upgrade cat /etc/lsb-release cd ~/git git clone https://gitlab.com/kytk/lin4neuro-jammy.git cd lin4neuro-jammy.git ./l4n-jammy-1_base.sh -l ja #英語の時は -l en ./l4n-jammy-2_wallpaper.sh ./l4n-jammy-3_packages.sh
ひとつずつ説明
- Ubuntu20.04版から Ubuntu22.04版へのアップグレードは以下のように行います。
現在のUbuntuのバージョンの確認
- 現在のUbuntuのバージョンは以下で確認できます。
cat /etc/lsb-release
- Ubuntu 20.04の場合、以下のようになるかと思います。
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.6 LTS"
バージョンが固定されているパッケージの確認および解除
- GPUを使っている場合、CUDAのバージョンを固定している場合があります。以下のコマンドで確認できます。
sudo apt-mark showhold
- ここで例えば、 “cuda-11-8” など出てきたら、それは固定されているので、次のコマンドでそれを外します。
sudo apt-mark unhold cuda-11-8
Firefoxのアンインストール
- Firefoxは Ubuntu 22.04 でデフォルトが apt版からsnap版に変更になりました。これまでの経験で、アップグレード中にFirefoxがスタックしてしまうことが頻繁に見られるのでそれを避けるためにFirefoxはアンインストールします。
sudo apt remove firefox
リポジトリのアップデートおよびソフトウェアの最新化
- アップグレードするためには、まずリポジトリをアップデートし、ソフトウェアをすべて最新化する必要があります。以下でそれを行うことができます。
sudo apt update sudo apt full-upgrade
再起動
- ソフトウェアをすべて最新化した後、再起動しないとアップグレードできません。このため、以下で再起動します。GUIで再起動してもいいですが、ターミナルでは、一語で再起動できます。
reboot
Ubuntu 22.04へのアップグレード
- ここまで来るとUbuntu 22.04にアップグレードする準備ができました。以下でアップグレードを行います。
sudo do-release-upgrade
- いくつか聞かれますが、Yesの時は、 “y” をタイプします。途中、紫色の画面で、”Restart services during package upgrades without asking?” という画面では、Tabキーで “Yes” を選択し、Enterを押します。
-
すべて終わると以下の情報になります。
System upgrade is complete. Restart required To finish the upgrade, a restart is required. If you select 'y' the system will be restarted. Continue [yN]
- これで、”y” をタイプすると、再起動されます。壁紙は変になっていますが後で修正しますので気にしないでください。
Ubuntuのバージョンの確認
- これでUbuntu 22.04 になったはずです。以下で確認できます。
cat /etc/lsb-release
- Ubuntu 22.04の場合、以下のようになるかと思います。
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04.5 LTS"
Lin4Neuro のダウンロード
- 以下で、Lin4Neuro 22.04版をダウンロードします。
cd ~/git git clone https://gitlab.com/kytk/lin4neuro-jammy.git
Lin4Neuro のセットアップ
- 以下で、Lin4Neuroをセットアップします。ひとつずつ実行していただければ大丈夫です。
cd lin4neuro-jammy.git ./l4n-jammy-1_base.sh -l ja ./l4n-jammy-2_wallpaper.sh ./l4n-jammy-3_packages.sh
これで、Lin4Neuroが20.04版から22.04版にアップグレードされます。
Ubuntuで apt-key が廃止になった今、理解しておいた方がいいこと
Ubuntuでサードパーティーのソフトウェアをインストールする際、過去には、apt-key コマンドでパッケージの電子署名用のOpenPGP公開鍵を扱っていました。
しかし、現在、apt-keyは廃止となりました。
私の中で混乱があったのでポイントをまとめました。
- 公開鍵は asc でも gpg でもいいが、gpgの方がいいかもしれない。(gpgの方がファイルサイズも少し小さい)
- サードパーティーの鍵は /etc/apt/keyrings に保存する
- sources.list のマニュアルに以下の記載があります。”The recommended locations for keyrings are /usr/share/keyrings for keyrings managed by packages, and /etc/apt/keyrings for keyrings managed by the system operator.”
- sources.list.d/ の下にそのパッケージの list ファイルを作成するが、リポジトリに [signed-by=/etc/apt/keyrings/そのパッケージのkey.gpg] を追記する
実際に Google Chrome をこの方法で行うとどうなっていたか見てみたいと思います。
apt-key 時代
- 過去にはこう紹介されていました。
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
- 1行目で、wget で入手した linux_signing_key.pub を apt-key を使って登録しています。apt-keyで追加された鍵は、すべてのリポジトリが信頼する場所(/etc/apt/trusted.gpg.d/)に保存されていました。これがセキュリティ上のリスクでした。
- 2行目は aptのために list ファイルを作成しています。
現在
- 現在はこうなります。
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub |\ gpg --dearmor | sudo tee /etc/apt/keyrings/google-chrome.gpg > /dev/null echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" |\ sudo tee /etc/apt/sources.list.d/google-chrome.list
- 1行目の wget で入手するのは変わりませんが、その後、gpg –dearmor でダウンロードした鍵をバイナリ形式に変換した後、/etc/apt/keyrings の下に google-chrome.gpg として保存します。
- 2行目では、[arch=amd64]でシステムアーキテクチャを指定し(これは本筋ではありませんが有用です)、[signed-by=/etc/apt/keyrings/google-chrome.gpg] で鍵がどこにあるかを明示しています。
このように理解することですっきりしました。
Windowsで、openai-whisperを使って文字起こしを行う方法 step-by-step
OpenAI は whisper という文字起こしができるソフトウェアを提供しています。
オープンソース版を使えば、料金がかかることなく使うことができるのですが、Windowsでのセットアップはやや厄介です。
このため、Windowsでのセットアップの方法を解説していきます。また、公開されているサンプルデータを使って、実際に文字起こしにもトライしてみます。
セットアップ(1)
セットアップするのは以下の3つです。
- Python3
- ffmepg
- openai-whisper
まず、最初に Python3 と ffmpeg をインストールします。
Python3
Python3はMicrosoft Storeからインストールすることが簡単です。
- Windowsの左下の検索に “microsoft” と入れ、Microsoft Storeを開きます。

- 上部の検索窓に python3 といれ、現時点での最新版 Python 3.13 をインストールします。Pythonのバージョンは 3.8以降であれば大丈夫です。根拠は、openai-whisper の説明ページです。https://pypi.org/project/openai-whisper/ なお、ここには3.8-3.11とありますが、3.13でも問題なく動きました。
ffmpeg
ffmpegはオーディオファイルの変換に使われるプログラムです。ffmpegはインストーラーがありませんが、Powershellでwingetというプログラムを使うことでインストールとパスの設定までできます。
- Windowsの左下の検索ウィンドウに “powershell” と入力し、「管理者として実行する」をクリックします。

-
そうすると、Powershellが起動します。そこで、以下のようにタイプします。
winget install ffmpeg
- これにより、ffmpegのダウンロード、インストール、パス設定が行われます。

再起動
- パスの設定を確実にするために、ここで一度再起動してください。
音声ファイルの入手
手元に音声ファイルがあるのであればこれは不要です。ないようであれば、国語研コーパスポータルに学会講演のサンプル音声データがありましたので、そちらをダウンロードします。リンクはこちらになります。なお、音声ファイルは個別のフォルダの中に保存してください。今、私は、「ダウンロード」の下に「whisper-test」というフォルダを作成して、その下に aps-smp.mp3 をダウンロードしました。
Powershellの起動
openai-whisper を入力するために、Powershellを起動します。この際、テストまで一気にできるように、音声ファイルを保存したフォルダからPowershellを起動します。
- エクスプローラーで、音声ファイルを保存した場所に移動します。
- フォルダの何もないところで、右クリックし、「ターミナルで開く」をクリックします。

Pythonの確認
- ここで、Pythonが起動するか確認します。
-
ターミナルから以下のようにタイプしてください。
python3 --version
- これで、
Python 3.13.5などのように表示されたらPythonは正しくインストールされています。
ffmepgの確認
-
同様に、ffmpeg も確認します。
-
ターミナルから以下のようにタイプしてください。今回はハイフンは1つなので注意してください。
ffmpeg -version
- 以下のようになったら正しく設定されています。

セットアップ(2)
- ここまで来たら openai-whisper がインストールできます。ターミナルから以下をタイプします。
pip install openai-whisper

これでインストールできるのですが、ひとつ注意は、本来はパスを設定しなければいけません。
しかし、それはめんどくさいので、以下で、それを回避して実行する方法を示します。
whisperの実行
-
それでは、早速実行します。先程書いたように、この状態では、whisperにパスが通っていないのですが、ひとつの工夫で実行できます。それは、
python -mを頭につけることです。これをすると、whisperを python のモジュールとして実行できます。 -
以下のようにしてください。
python3 -m whisper aps-smp.mp3 --language ja
-
ご自身の音声ファイルがある場合、”aps-smp.mp3″ はご自身の音声ファイルに置き換えてください。
-
より細かい設定を知りたい場合は、以下で設定を知れます。
python3 -m whisper -h
結果の確認
- 結果はいくつかできますが、拡張子に txt がついているものはそのままWordなどにはりつけたりできるものとなります。これを生成AIに入力して議事録作成などにもできるでしょう。
(おまけ)Ubuntuの場合のセットアップ
- Ubuntuの場合、もっと話は簡単です。以下でセットアップできます。python3は入っていますのでインストール不要です。
sudo apt install ffmpeg pip install openai-whisper
Lin4Neuroアンケート結果
Lin4Neuroのアンケートについてご協力いただきありがとうございました。アンケート結果を公開します。コメントは随時ここに追加していきます。
- 研究目的に限らず、ご自分が普段使用していて一番慣れているPC・OSを教えて下さい
- 実機・VirtualBox問わず、現在、研究にLin4Neuroを使用していますか?
- Linuxの初心者向けセミナーが開催されたら、参加したいですか?
- Lin4Neuroをどの機器で使用したいですか?(複数選択可)
- 今後Lin4Neuroを使用するにあたり、気になることや、心配なことはありますか?(複数選択可)
- その他、Lin4Neuroの使用にあたり、気になる点やご要望などありましたらご自由にお書きください。
- Lin4Neuroと研究仮説が整えば研究ができそうなので、頑張るしかないです。
- メモリ、GPUの種類などある程度選択肢があると嬉しいです
- Linuxを使い始めばかりで質問するのにハードルが高く感じるときがあります。
- GPUの計算能力に興味があるものの、脳画像解析では使用できていません。ハードウェアの選択とソフトウェアのセットアップのハードルの高さであると思いますが、その辺りが解消されるとありがたいです。
- また仮想環境の手軽さも捨てがたく、複数の環境を使い分けている状況です。
- 仮想環境というものがよく理解できないので、通常環境で使用できるとありがたいです。
- FreeSurferのAIを用いていくのにメモリが大量に必要とするとハードウェアがかなり限られてくるように思います 複数のハードウェアを用意するのは簡単ではなくなってくるかもしれませんね
- 導入に大体どれくらいお金がかかるものなのでしょうか?初歩的な質問で失礼致します。
- いつも利用しています、とても助かっています。日本のMRI技術の発展を支える重要なお仕事です。
- VirtualBoxで使う際に、複数画面表示に対応していただけたら嬉しいです。
- 現在のデスクトップ型のwindows11(intel core i7-13700 コア16、24スレッド,2.10GHz-5.20GHz,32G,)で仮想環境でlin4neuroを扱うとき、作業(今はTBSSを考えていますが)にどれくらい時間がかかるのか、それがlinux実機だと多少緩和されるのか
- 昔ノートパソコンに入れていたので、性能的な問題で今は使っていません。ただ初心者が最初にLinuxに慣れるという意味では大変ありがたく、非常に感謝しております。一方で研究施設内ですでにクラスタの環境が整っているというところもあり、その場合の使い分けが気になります。
- Appleシリコンに対応していただけるとありがたいです





Lin4Neuroのハードウェアに関するアンケート
私はこれまで脳画像解析に特化したLinux, Lin4Neuroの開発をしてきました。
WindowsやmacOSの方が気軽に触れられるように仮想環境で使えるようにしてきましたが、
脳画像解析ソフトがGPUを必要としてきたり、Dockerの環境が増えてきたりと、いろいろ変化がある中、
実機にLinuxが入っている環境を充実させる必要があると感じています。
そこでアンケートをさせていただけたらと思います。
このアンケートの結果は後日公開します。匿名で3分程度で終わるアンケートなので、皆様のご意見をお聞かせいただけますでしょうか。
今後の開発の参考にいたします。
どうぞよろしくお願いします。2025年2月末に一度集計したいと思います。
以下のリンクからご協力ください。
(アンケートは終了しました。ご協力いただきありがとうございました)
Bashのシェルスクリプトのshebang行は #!/usr/bin/env bash の方がいいかもしれない
シェルスクリプトを記載する時、bashで実行されることを意識する際、冒頭のシェバン (shebang) 行に
#!/bin/bash
と記載することが多いです。
Linuxではこれで全く問題ないのですが、近年の macOS の状況を見ていると、これはちょっと考え直した方がいいかなと思ってきました。
簡潔に言うと、
#!/usr/bin/env bash
とするのが汎用性の高い運用になると思います。
mkdir -p のあまり知られていない機能
mkdir -p は mkdir --parents であり、必要に応じて親ディレクトリを作成する便利なオプションです。
しかし、ふと、man を見たらもうひとつの機能があることに気づきました。それは「ディレクトリが存在していてもエラーを返さない」というものです。
私はこれまでいつもスクリプトでディレクトリを作成する際は、
[[ -d some_directory ]] || mkdir some_directory
としていました。
しかし、実は、これは
mkdir -p some_directory
で終わってしまうということですね。
小さなことですが、勉強になったので、備忘録として記録しておきます。
Ubuntu でNVIDIAのGPUがうまく動かなくなった時の対処法【2024年12月版】
NVIDIAのGPUドライバーがプロプライエタリからオープンソースに移行したことに伴い、過去にプロプライエタリドライバを使っていた方がアップデートがうまくいかずトラブル場合が多々あります。
その時の対処法を以下に示します。
Windows11 22H2からアップデートできない時の対処法
私はWindowsは仮想環境で使うことが多いのですが、Windows11が22H2以降、アップデートできない現象に遭遇しました。
対処法を簡単に書いておきます。検索すればたくさん情報は出てきます。ちなみに、これはシステム要件を満たしているのにアップデートできない場合とお考えください。
- Windows11から、Windows11のダウンロードページにアクセス
https://www.microsoft.com/ja-jp/software-download/windows11 -
Windows11のISOを入手。方法は2つ
- 「Windows 11 のインストール メディアを作成する」から、mediacreationtool.exe を入手し、実行して、ISOを入手
- 「x64 デバイス用 Windows 11 ディスク イメージ (ISO) をダウンロードする」からISOを入手
- 入手したISOを右クリックし、「マウント」を選択。ISOがDVDドライブとしてマウントされるので、ドライブ名を確認。
-
コマンドプロンプトを管理者権限で実行
-
マウントされたドライブに移動。Dドライブなら
cd d:で移動できる -
以下のコマンドを実行
setup /product server
- serverとなっているが気にしなくてよい。自分の現在のライセンスのままアップグレードされる。
やはり、最後の手段はCLIですね。
VirtualBox のDebian 12 ゲストに Guest Additions をインストールする方法
VirtualBox上でDebianをインストールしていろいろ試しているのですが、Guest Additionsをインストールしようとしてちょっと困ったので、備忘録として残しておきます。
short answer
cd /media/cdrom sudo sh VBoxLinuxAdditions.run
でいけます
long answer
最初、普通Ubuntuでやるように
cd /media/cdrom sudo ./VBoxLinuxAdditions.run
としたところ、
sudo: unable to execute ./VBoxLinuxAdditions.run: Permission denied
となりました。
なんでだろうと思ったところ、https://forums.virtualbox.org/viewtopic.php?t=58799にヒントが書かれていました。
cdromをマウントする際、/etc/fstabに
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
と書かれています。この noauto を exec にすることで、実行可能になるということでした。
もちろん、これを exec に変えるのも方法ですが、この場合、任意のCDが実行されてしまうリスクもはらんでいます。
それ以外の方法がないかと考えたところ、直接実行するのではなく、シェルから実行するという方法があるかなと思いました。
そうしたら、上記のリンクの最後にその旨が書かれていました。
なので、実際に試してみました。
cd /media/cdrom sudo sh VBoxLinuxAdditions.run
そうしたところ、あっさりと動きました。
スクリプトを直接実行ではなく、シェルから実行というのは常に頭のどこかに置いておくといいんだなということを学びました。
【Python】DICOMヘッダーをCSVに保存

1. 目的
PythonのPydicomライブラリを用いて、DICOMヘッダーをCSVにまとめて保存
2. 準備
2.1. ライブラリの準備
Pydicomは、DICOMのヘッダーや画像を操作するのに用いるライブラリである。
Pydicomのインストールは、以下のコマンドを実行。
pip3 install pydicom
CSV形式の表データを扱うには、Pandasライブラリを用いる。
Pandasライブラリのインストールは、以下のコマンドを実行。
pip3 install pandas
2.2. データの準備
次のような、フォルダ構造でデータを準備する。この場合では、各被験者フォルダの中にDICOMが保存されている。
DICOM_folder ├── Subject001 │ ├── XXX.dcm │ ├── ... │ └── XXX.dcm ├── Subject002 │ ├── XXX.dcm │ ├── ... │ └── XXX.dcm ├── ... └── SubjectXXX
2.3. スクリプトの準備
次のコードを、extract_dcm_header.pyとして保存する。このとき、スクリプトはDICOM_folderフォルダと同じ階層に保存する。
import os
import pydicom
import pandas as pd
input='DICOM_folder' # Input folder
output='dicom_headers.csv' # Output CSV
dcm_dfs = []
failed_files = []
processed_files = []
for root, _, files in os.walk(input): # Find DICOM file for each subject
if len(files) != 0: # If DICOM files exist
try:
f = os.path.join(root, files[0])
dcm = pydicom.dcmread(f) # Read DICOM
_df = pd.DataFrame({dcm[k].keyword: [dcm[k].value] for k in dcm.keys() if dcm[k].keyword != "PixelData"}) # Read Headers
dcm_dfs.append(_df) # Gather headers of all subjects in a list
processed_files.append(f)
except:
failed_files.append(f)
dcm_dfs = pd.concat(dcm_dfs, ignore_index=True) # Concat headers of all subjects in a table
dcm_dfs.to_csv(output, index=False) # Save as CSV
3. プログラムの実行
2.3. スクリプトの準備で用意した、extract_dcm_header.pyを実行するには、次のコマンドを実行する。
python3 ./extract_dcm_header.py
4. 結果の確認
収集したDICOMヘッダーは、dicom_headers.csvとして保存される。
5. コードの解説
まず、必要なライブラリを読み込む。
import os import pydicom import pandas as pd
ここでは、入力となるDICOMフォルダーと出力となるDICOMヘッダーのまとまったCSVの名前を定義している。
今回の場合だとinput='DICOM_folder'、output='dicom_headers.csv'。
input='DICOM_folder' # Input folder output='dicom_headers.csv' # Output CSV
データを格納するための、箱(リスト)を定義。
dcm_dfs = [] failed_files = [] processed_files = []
被験者ごとのDICOMファイルを検索。
for root, _, files in os.walk(input): # Find DICOM file for each subject
DICOMファイルがある場合のみ、処理を実行。
if len(files) != 0: # If DICOM files exist
Pydicomを用いて、DICOMデータを読み込む。
try:
f = os.path.join(root, files[0])
dcm = pydicom.dcmread(f) # Read DICOM
DICOMからヘッダー(Header)情報を、Pandasで読み込む。
PixelDataタグを含めると、出力(CSV)が崩れておかしくなるので、収集に含めないようにしている。
_df = pd.DataFrame({dcm[k].keyword: [dcm[k].value] for k in dcm.keys() if dcm[k].keyword != "PixelData"}) # Read Headers
収集した結果を、被験者ごとに処理をして、一つの箱(リスト)にまとめる。
dcm_dfs.append(_df) # Gather headers of all subjects in a list
processed_files.append(f)
except:
failed_files.append(f)
すべての被験者のヘッダー情報を、一つの表形式のデータ(DataFrame型)に変換する。
dcm_dfs = pd.concat(dcm_dfs, ignore_index=True) # Concat headers of all subjects in a table
結果を、CSVとして保存する。
dcm_dfs.to_csv(output, index=False) # Save as CSV
2024年10月現在、FreeSurferはUbuntu 24.04 では動作しません
ときどきこの質問を受けるので言及しておきます。
2024年4月にUbuntu 24.04が公開されました。
しかし、Ubuntu 24.04上では現行のFreeSurfer 7.4.1は動きません。
このため、FreeSurferを実行したい場合は、しばらくUbuntu 22.04からアップグレードしないようにしましょう。
SPMでの画像の位置合わせ (Coregister) の方法
SPMで位置合わせする方法は2つあります。
- Realign: これは同じモダリティで位置合わせする場合に選びます。主に fMRIやPETの位置合わせに用いられます。
- Coregister: これは別のモダリティで位置合わせする場合に選びます。
ここでは、Coregister について述べます。
Pythonでオブジェクトの型に準備されている通常メソッドの一覧を出力する関数
Pythonを勉強していると、「この型のメソッドは何だろう?」と思う時があります。
この時、オブジェクトを obj とすると
dir(obj)
とすることで、一覧を得ることができます。
たとえば、リスト型のメソッドを知りたいとします。dir() を使うと以下のようになります。
x = [1, 2] dir(x) [code lang=text] ['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] [/code]
ここで、”–” からはじまるメソッドは特殊メソッドと言われ、その型の振る舞いを細かく調整するものとのことです。今回はここには踏み込みません。
今、私は、「通常メソッドだけリストアップしたい」と思いました。どうしたらできるでしょうか?
df -h $PWD が何気に便利
UNIX系OSで、 df というコマンドがあります。ファイルシステムのディスク使用量を知るためのコマンドです。
df -h はファイルサイズをわかりやすく示してくれます。
それぞれの違いを見てみます。
Linux と macOS の seq -w の動作の違い
seq -w は、連続する数字のゼロ埋めをする時に便利です。
たとえば
seq -w 10 とすると
$ seq -w 10 01 02 03 04 05 06 07 08 09 10
となります。ひと桁の数字も最初に0をつけて2桁になるようにしてくれます。
bash でディレクトリ変数の展開を有効にする direxpand を設定する方法
Ubuntu 22.04 から、ターミナルでの変数を使ったディレクトリ移動が厄介になりました。
例を挙げます。
FSLのインストールパス は変数 $FSLDIR に入っています。私はこれまでは、$FSLDIR/standard にアクセスしたい場合
cd $FSLDIR までタイプしたら、その後、タブキーをタイプすると、シェルが自動で cd /usr/local/fsl と変数を展開してくれて、その後のディレクトリをタイプしていました。
しかし、Ubuntu 22.04 から、同じことをすると
cd \$FSLDIR/
と変数がエスケープされてしまい展開されなくなってしまいました。
これは不便です。
調べたところ、shopt というコマンドがあることを知りました。
