NVIDIAのGPUドライバーがプロプライエタリからオープンソースに移行したことに伴い、過去にプロプライエタリドライバを使っていた方がアップデートがうまくいかずトラブル場合が多々あります。
その時の対処法を以下に示します。
NVIDIAのGPUドライバーがプロプライエタリからオープンソースに移行したことに伴い、過去にプロプライエタリドライバを使っていた方がアップデートがうまくいかずトラブル場合が多々あります。
その時の対処法を以下に示します。
私はWindowsは仮想環境で使うことが多いのですが、Windows11が22H2以降、アップデートできない現象に遭遇しました。
対処法を簡単に書いておきます。検索すればたくさん情報は出てきます。ちなみに、これはシステム要件を満たしているのにアップデートできない場合とお考えください。
Windows11のISOを入手。方法は2つ
コマンドプロンプトを管理者権限で実行
マウントされたドライブに移動。Dドライブなら cd d:
で移動できる
以下のコマンドを実行
setup /product server
やはり、最後の手段はCLIですね。
VirtualBox上でDebianをインストールしていろいろ試しているのですが、Guest Additionsをインストールしようとしてちょっと困ったので、備忘録として残しておきます。
cd /media/cdrom sudo sh VBoxLinuxAdditions.run
でいけます
最初、普通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のPydicomライブラリを用いて、DICOMヘッダーをCSVにまとめて保存
Pydicomは、DICOMのヘッダーや画像を操作するのに用いるライブラリである。
Pydicomのインストールは、以下のコマンドを実行。
pip3 install pydicom
CSV形式の表データを扱うには、Pandasライブラリを用いる。
Pandasライブラリのインストールは、以下のコマンドを実行。
pip3 install pandas
次のような、フォルダ構造でデータを準備する。この場合では、各被験者フォルダの中にDICOMが保存されている。
DICOM_folder ├── Subject001 │ ├── XXX.dcm │ ├── ... │ └── XXX.dcm ├── Subject002 │ ├── XXX.dcm │ ├── ... │ └── XXX.dcm ├── ... └── SubjectXXX
次のコードを、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
2.3. スクリプトの準備で用意した、extract_dcm_header.py
を実行するには、次のコマンドを実行する。
python3 ./extract_dcm_header.py
収集したDICOMヘッダーは、dicom_headers.csv
として保存される。
まず、必要なライブラリを読み込む。
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年4月にUbuntu 24.04が公開されました。
しかし、Ubuntu 24.04上では現行のFreeSurfer 7.4.1は動きません。
このため、FreeSurferを実行したい場合は、しばらくUbuntu 22.04からアップグレードしないようにしましょう。
SPMで位置合わせする方法は2つあります。
ここでは、Coregister について述べます。
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]
ここで、”–” からはじまるメソッドは特殊メソッドと言われ、その型の振る舞いを細かく調整するものとのことです。今回はここには踏み込みません。
今、私は、「通常メソッドだけリストアップしたい」と思いました。どうしたらできるでしょうか?
UNIX系OSで、 df
というコマンドがあります。ファイルシステムのディスク使用量を知るためのコマンドです。
df -h
はファイルサイズをわかりやすく示してくれます。
それぞれの違いを見てみます。
seq -w
は、連続する数字のゼロ埋めをする時に便利です。
たとえば
seq -w 10 とすると
$ seq -w 10 01 02 03 04 05 06 07 08 09 10
となります。ひと桁の数字も最初に0をつけて2桁になるようにしてくれます。
Ubuntu 22.04 から、ターミナルでの変数を使ったディレクトリ移動が厄介になりました。
例を挙げます。
FSLのインストールパス は変数 $FSLDIR に入っています。私はこれまでは、$FSLDIR/standard にアクセスしたい場合
cd $FSLDIR までタイプしたら、その後、タブキーをタイプすると、シェルが自動で cd /usr/local/fsl と変数を展開してくれて、その後のディレクトリをタイプしていました。
しかし、Ubuntu 22.04 から、同じことをすると
cd \$FSLDIR/
と変数がエスケープされてしまい展開されなくなってしまいました。
これは不便です。
調べたところ、shopt というコマンドがあることを知りました。
過去に、Anacondaに頼らない、pipとvenvを用いたPython環境の構築 という記事を書きました。今回、改めて、Pythonの仮想環境について理解が深まったので書きたいと思います。
また、LinuxやmacOSにおいて、Pythonは、システムの重要なところを担っていたりします。Ubuntuであれば、 dpkg -l | grep python3
とすると、どれだけ多くの Python3に関連したパッケージがシステムにインストールされているかを確認することができます。
このような状況において、システムのPythonに追加でパッケージを入れていって、もし不具合が起きた場合、システムそのものが不安定になる可能性があります。
Pythonの仮想環境を使うと、システムの中に、独立したPythonの環境を構築することができます。「独立している」というのは、システムに一切影響を与えないということを意味します。不要になったらばっさり削除しても一切問題ありません。
そこで、以下で、仮想環境の構築の仕方を解説します
macOSでPythonを使おうとする時、様々な選択肢があります。
まず、それぞれのインストール方法とそのPythonのパスを明確にします。バージョンは2024年1月現在のものになります。