ハピタス登録で1,000円分になるURL
WSL(Windows Subsystem for Linux)つまりはコマンドプロンプトで動くLinux的な環境から、Windowsに接続したWebカメラを使いたい。
以下、cmd=Windowsのコマンドプロンプト、wt=WindowsTerminal。
cmd> wt
wt> sudo apt install python3-pip
wt>pip install pyzbar
WSLでUSBのWebカメラを使う設定
管理者でWindowsTerminalを上げ直す
管理者wt> wsl --update
管理者wt> wsl --status
管理者wt> winget install --interactive --exact dorssel.usbipd-win
インストールできたかに見えるが。
とりあえず apt-get update流す
管理者wt> sudo apt-get update
linux-toolsなるものを入れる。
管理者wt> sudo apt install -y linux-tools-5.4.0-77-generic hwdata
管理者wt> sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20
管理者wt> usbipd wsl list
管理者wt> sudo apt install -y linux-tools-4.4.0-19041-Microsoft
管理者wt> apt search linux-tools | tee -a my_apt-search.txt
カーネル4.4.0対応のパッケージらしきもの目視できず。
ち。
カーネル4.4.0てのがダメらしい。記事のとおり5.4.0に上げるしかないか。
Ubuntu20.04はそのままでカーネルUpdateする方法探す。
どうもあれやな、WSL自体のカーネルは5に上がってるけど、その上に乗っかってるUbuntuのカーネルが4のまま、って状態になってるぽい。
あれ、カメラ認識されるようになったぞ?
cmd> usbipd wsl list
cmd> usbipd wsl attach --busid 2-2
ダメか。wsl1じゃダメで、wsl2にアプデが必要らしい。
cmd> wsl -l -v
PowerShellでHyperVを有効化するらしいコマンドを叩く。再起動求められる。
PS> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
インストール前はこうだったのが…
インストール後はこうなる。仮想化うんぬんのエラーが消えている。
管理者wt> wsl --set-default-version 2
もう一度カメラを(Windows側からUbuntu側へ)アタッチしてみる。
いやいや、なんでWSL2になってないエラーが出るのよ。WSL2にしたじゃん…
再起動してみるか。
cmd> wsl -l -v
したときに、Ubuntu-20.04のVERSIONが1になっちゃってる。これがWSL1だという意味なのか?としたらUbuntuをアンインストールして入れ直してみるか。
いったん再起動。
Ubuntu-22.04のVERSIONが2(つまりWSL2)に上がっている!
管理者wt> sudo apt-get -y update
管理者wt> sudo apt install linux-tools-virtual hwdata
(これがエラーになるときは sudo apt-get -y updateを忘れている)
管理者wt> sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20
管理者wt> winget install --interactive --exact dorssel.usbipd-win
おっっっっしゃ!USBカメラのアタッチ(Windows側からUbuntu22.04側へ)できた!
あとはWSL2のPythonからこれを扱えるかやってみる。
rootのパスワード忘れてsu-できないだと…Ubuntu22.04入れなおした。
もう一回繰り返す。碇ゲンドウばりに(成功するまで)何度でもやる。
管理者wt> sudo apt-get -y update
管理者wt> sudo apt install linux-tools-virtual hwdata
(これがエラーになるときは sudo apt-get -y updateを忘れている)
管理者wt> sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20
もっかいカメラをアタッチして(bash上げてないとアタッチできない!)
次はPython
管理者wt> sudo apt-install python3-pip
管理者wt> pip install opencv-python
管理者wt> pip install pyzbar
いよいよ未知の領域
Windows側からの認識の確認は
cmd> usbipd wsl list
Ubuntu側からの認識の確認は
管理者wt> lsusb
おっしゃlsusbでも認識してる!
/dev/video*に認識されてるかな?
管理者wt> ls -l /dev/video*
ダメじゃん…なぜ。いいや無視。pythonで見えるか確かめる。
wt> python3
>>> import cv2
ぐぬぬ…
管理者wt> sudo apt-get install libgl1-mesa-dev
import cv2できた!
testコードは丸写し
import cv2
W=640
H=480
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G'))
#cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('Y','U','Y','V'))
cap.set(cv2.CAP_PROP_FRAME_WIDTH, W)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, H)
cap.set(cv2.CAP_PROP_FPS, 30)
while True:
ret, frame = cap.read()
if not ret:
continue
cv2.imshow('usb cam test', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
ぐはっ!なんでだ!たぶん/dev/video0が無いからか!
続く