Anacondaとpoetryを一度アンインストールしてから再インストールで解決
umap-learn on M1 Mac
poetryでインストールに失敗したのでメモ
エラー
以下のようにllvmliteのビルドに失敗する
Note: This error originates from the build backend, and is likely not a problem with poetry but one of the following issues with llvmlite (0.34.0) - not supporting PEP 517 builds - not specifying PEP 517 build requirements correctly - the build requirements are incompatible with your operating system or Python version - the build requirements are missing system dependencies (eg: compilers, libraries, headers). You can verify this by running pip wheel --no-cache-dir --use-pep517 "llvmlite (==0.34.0)".
原因
- このエラーは、
umap-learnの依存関係であるllvmliteのビルドに失敗が原因 - M1 Mac(Apple Silicon)と古いバージョンのllvmliteの組み合わせで発生しやすい問題
解決策
llvmlite と numba を事前にインストールしてから umap-learn をインストール
poetry add "llvmlite>=0.41.0" "numba>=0.58.0" poetry add umap-learn
デジタル写真の色補正
目的
- デジタルカメラで撮影した写真から輝度を復元したい
- カラーチャートを撮影したRAW画像と被写体を撮影したRAW画像から被写体の輝度を得る
- デジタル画像作成の過程の変換について調べる
- カラーチャートの種類・使い方を調べる
- 色補正のソフトウェアについて調べる
一般的な流れ
- カラープロファイルの作成
- カラーチャートを対象光源下で撮影(RAW画像を取得)
- 撮影した写真を解析して、実際の色と写真上の色の対応関係を求める
- 色補正
- 被写体を対象光源下で撮影
- 作成したカラープロファイルを使って色を補正
色補正
- RAW画像の画素値は輝度を線形変換した値
- 現実の色とRAW画像の色の関係は3x3のColor Correction Matrix (CCM)で表せる
- カラーチェッカーを撮影した画像とカラーチェッカーのパターン色からCCMを推定すれば、色を補正できる
カラーチェッカー
カラーチャート+色補正ソフトウェア
会社
- X-Rite
- Calibrite:
- X-Riteの後継
- Amazonで悪評(色が公表値と違う、パッチが不規則に並んでいる、他の紙などが貼り付く)が目立つので避ける
- Datacolor
- コスパいい
- DSC Labs
- プロ向け
- ChromaDuMondeは色も豊富なので今後購入する
Datacolor
- Datacolor社 SpyderCHECKR 24
- 7,812円
- 24色
- 21 x 15 x 0.4 cm; 160 g
- ケース付き
- Datacolor社 Spyder Checkr
- 25,300円
- 48色
- 32.3 x 18.5 x 4 cm; 500 g
- ケース付き(三脚装着可能)
- Datacolor社 Spyder CHECKR PHOTO
- 16,940円
- 24色(カラー)、24色(白黒)
- 12.21 x 9.75 x 1.34 cm; 100 g
色補正(ソフトウェア)
色補正(自作)
- 変換の原理がわかれば自作できそう
- カラーチャートから輝度・画素値の対応関係を求めて、変換パラメータ求めるのかな
参考になりそうなコード
Use Poetry virtualenv on PyCharm
Settings > Python Interpreter > Add interpreter > Add local interpreter > Virtual Environment > Existing
specify ROOT_POETRY_VENV/bin/python
WSL2 (Ubuntu) on Windows 11
WSL2 with USB port enabled
公式
♯♯ 手順1: WSLのインストール
こっち の方がわかりやすい
- PowerShell(管理者):
wsl--install- WSLを実行し,Ubuntuインストールに必要な機能を有効化
- OS再起動
♯♯ 手順2: Linuxのインストール
- PowerShell(管理者)なのかコマンドプロンプトなのか謎
- ユーザ名・パスワードを設定
♯♯ 手順3: WSL2に設定
$ wsl --version WSL バージョン: 2.2.4.0 カーネル バージョン: 5.15.153.1-2 WSLg バージョン: 1.0.61 MSRDC バージョン: 1.2.5326 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.26091.1-240325-1447.ge-release Windows バージョン: 10.0.22631.3958
手順3.1 usbipdのインストール
https://github.com/dorssel/usbipd-win/releases
結果
- RealSenseセンサを認識しないのでSDKをインストール
PS C:\WINDOWS\system32> usbipd list Connected: BUSID VID:PID DEVICE STATE 2-8 5986:9102 BisonCam,NB Pro Not shared 2-14 8087:0aaa インテル(R) ワイヤレス Bluetooth(R) Not shared 3-4 0b95:1790 ASIX USB to Gigabit Ethernet Family Adapter Not shared 6-5 2109:8817 USB Billboard Device Not shared 7-1 04d9:a09e USB 入力デバイス Not shared 7-2 258a:0016 USB 入力デバイス Not shared Persisted: GUID DEVICE
手順3.2 Intel® RealSense™ SDK 2.0のインストール
https://github.com/IntelRealSense/librealsense/releases
結果
- Intel RealSense Viewer
- No frame receivedと表示される
- 向きは認識している
- usbipdの実行で以下のようにRealSenseセンサを認識
PS C:\WINDOWS\system32> usbipd list Connected: BUSID VID:PID DEVICE STATE 2-3 8086:0b5c Intel(R) RealSense(TM) Depth Camera 455 Depth, Intel(R) ... Not shared 2-8 5986:9102 BisonCam,NB Pro Not shared 2-14 8087:0aaa インテル(R) ワイヤレス Bluetooth(R) Not shared Persisted: GUID DEVICE
pytorch-lightning LightningDataModule
ここを読む
- とりあえず以下のような使い方をする
- データのダウンロード,Dataset, Dataloaderの扱いをクラス化することで,mainプログラムの可読性を上げるのが目的
prepare_data(): データの取得setup(): データ全体をtrain,val,testに分割,Datasetの定義train_dataloader(): Dataloader(train用)を返すval_dataloader(): Dataloader(val用)を返すtest_dataloader(): Dataloader(test用)を返すpredict_dataloaderc: Dataloader(perdict用)を返す
- データセットのindexを保存・読み込む機能
import lightning as L from torch.utils.data import random_split, DataLoader # Note - you must have torchvision installed for this example from torchvision.datasets import MNIST from torchvision import transforms class MNISTDataModule(L.LightningDataModule): def __init__(self, data_dir: str = "./"): super().__init__() self.data_dir = data_dir self.transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) def prepare_data(self): # download MNIST(self.data_dir, train=True, download=True) MNIST(self.data_dir, train=False, download=True) def setup(self, stage: str): # Assign train/val datasets for use in dataloaders if stage == "fit": mnist_full = MNIST(self.data_dir, train=True, transform=self.transform) self.mnist_train, self.mnist_val = random_split( mnist_full, [55000, 5000], generator=torch.Generator().manual_seed(42) ) # Assign test dataset for use in dataloader(s) if stage == "test": self.mnist_test = MNIST(self.data_dir, train=False, transform=self.transform) if stage == "predict": self.mnist_predict = MNIST(self.data_dir, train=False, transform=self.transform) def train_dataloader(self): return DataLoader(self.mnist_train, batch_size=32) def val_dataloader(self): return DataLoader(self.mnist_val, batch_size=32) def test_dataloader(self): return DataLoader(self.mnist_test, batch_size=32) def predict_dataloader(self): return DataLoader(self.mnist_predict, batch_size=32)