min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

WSL→bash上のpython3でOpenCVでカメラ画像を取り込めるかテスト→NG

ハピタス登録で1,000円分になるURL

その買うを、もっとハッピーに。|ハピタス

 

WSL(Windows Subsystem for Linux)つまりはコマンドプロンプトで動くLinux的な環境から、Windowsに接続したWebカメラを使いたい。

以下、cmd=Windowsコマンドプロンプト、wt=WindowsTerminal。

cmd> wt

wt> sudo apt install python3-pip

expy-style.net

 

wt> pip install opencv-python

 

wt>pip install pyzbar


WSLでUSBのWebカメラを使う設定

zenn.dev

 

管理者で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する方法探す。

 

learn.microsoft.com

 

 

どうもあれやな、WSL自体のカーネルは5に上がってるけど、その上に乗っかってるUbuntuカーネルが4のまま、って状態になってるぽい。

 

あれ、カメラ認識されるようになったぞ?

cmd> usbipd wsl list

 

cmd> usbipd wsl attach --busid 2-2

ダメか。wsl1じゃダメで、wsl2にアプデが必要らしい。

loumo.jp

cmd> wsl -l -v

learn.microsoft.com

 

PowerShellでHyperVを有効化するらしいコマンドを叩く。再起動求められる。

PS> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

 

念のためGUIHyper-Vサポートも有効化する。

インストール前はこうだったのが…

インストール後はこうなる。仮想化うんぬんのエラーが消えている。

管理者wt> wsl --set-default-version 2

 

もう一度カメラを(Windows側からUbuntu側へ)アタッチしてみる。

いやいや、なんでWSL2になってないエラーが出るのよ。WSL2にしたじゃん…

再起動してみるか。

learn.microsoft.com

 

cmd> wsl -l -v

したときに、Ubuntu-20.04のVERSIONが1になっちゃってる。これがWSL1だという意味なのか?としたらUbuntuをアンインストールして入れ直してみるか。

いったん再起動。

www.kkaneko.jp

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

いよいよ未知の領域

zenn.dev

Windows側からの認識の確認は

cmd> usbipd wsl list

Ubuntu側からの認識の確認は

管理者wt> lsusb

おっしゃlsusbでも認識してる!

 

/dev/video*に認識されてるかな?

管理者wt> ls -l /dev/video*

ダメじゃん…なぜ。いいや無視。pythonで見えるか確かめる。

 

wt> python3

>>> import cv2

ぐぬぬ

cocoinit23.com

管理者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が無いからか!

続く

 

 

 

 

 

その買うを、もっとハッピーに。|ハピタス