Dockerfile
FROM nvidia/cuda:11.8.0-base-ubuntu20.04
RUN echo 'export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}' >> ~/.bashrc
RUN echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
RUN echo 'export PATH=/usr/local/cuda/bin:/$PATH' >> ~/.bashrc
RUN echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
RUN apt update
RUN apt-get install -y python3.8 python3-pip
RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
RUN pip3 install -U openmim
RUN mim install mmengine
RUN mim install "mmcv>=2.0.0"
RUN mim install "mmdet>=3.0.0"
RUN apt install -y git
RUN git clone https://github.com/open-mmlab/mmpose.git
RUN pip3 install -r /mmpose/requirements.txt
RUN pip3 install -v -e ./mmpose/
RUN mim install "mmpose>=1.0.0"
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
docker build -t mmpose:0.2 .
docker run -it --name mmpose2 --gpus all -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix mmpose:0.2 /bin/bash
디스플레이 설정에 대한 참고 블로그
https://saint-swithins-day.tistory.com/96
https://jonghunbok.github.io/posts/gui-on-container/
https://lovedh.tistory.com/entry/docker-container%EC%97%90%EC%84%9C-%EB%94%94%EC%8A%A4%ED%94%8C%EB%A0%88%EC%9D%B4%EB%A5%BC-%EB%AA%BB%EC%B0%BE%EB%8A%94%EB%8B%A4
docker start mmpose2
docker attach mmpose2
python3 demo/body3d_pose_lifter_demo.py \
demo/mmdetection_cfg/faster_rcnn_r50_fpn_coco.py \
https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \
configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w48_8xb32-210e_coco-256x192.py \
https://download.openmmlab.com/mmpose/top_down/hrnet/hrnet_w48_coco_256x192-b9e0b3ab_20200708.pth \
configs/body_3d_keypoint/pose_lift/h36m/pose-lift_videopose3d-243frm-supv-cpn-ft_8xb128-200e_h36m.py \
https://download.openmmlab.com/mmpose/body3d/videopose/videopose_h36m_243frames_fullconv_supervised_cpn_ft-88f5abbb_20210527.pth \
--input https://user-images.githubusercontent.com/87690686/164970135-b14e424c-765a-4180-9bc8-fa8d6abc5510.mp4 \
--output-root vis_results \
--rebase-keypoint-height --save-predictions
python3 demo/inferencer_demo.py tests/data/coco/000000000785.jpg \
--pose3d human3d --vis-out-dir vis_results/human3d \
--rebase-keypoint-height
만약 아래 오류 발생시
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
이렇게 대응
apt-get update && apt-get -y install libgl1-mesa-glx
ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
apt-get install libglib2.0-0
python3 demo/inferencer_demo.py webcam --pose2d 'human'

웹캠에 대해서는 닫혀있는것 같다.
https://github.com/chipgarner/opencv3-webcam-docker
https://curioso365.tistory.com/44
아래의 명령어들을 추가하자
--env DISPLAY=$DISPLAY → 호스트의 디스플레이 아이디 전달
--env="QT_X11_NO_MITSHM=1" → OpenCV에서 디스플레이 사용시 필요(정확한 의미 모름)
-v /dev/video0:/dev/video0 → 호스트의 카메라를 컨터이너에 전달
-v /tmp/.X11-unix:/tmp/.X11-unix:ro → 호스트의 X윈도우와 컨테이너의 X윈도우 연결
-v $(pwd):/workspace → 호스트의 폴더를 컨터이너에 연결
docker run -it \
--name mmpose \
--gpus all \
-e DISPLAY=$DISPLAY \
--env="QT_X11_NO_MITSHM=1" \
-v /dev/video0:/dev/video0 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $(pwd):/workspace \
mmpose:0.2 /bin/bash
python3 demo/inferencer_demo.py webcam --pose2d 'human'

ImportError: libGL.so.1: cannot open shared object file: No such file or directory
apt install libgl1-mesa-glx

ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
apt-get install libglib2.0-0

흠.... 뭐가 문제일까
찾아보니 WSL2에서는 웹캠 기본 지원을 안한다고 한다
https://ahnbk.dev/?p=333
sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev bc libncurses-dev
아래 블로그 설정 따라서 진행
https://dongle94.github.io/windows/windows-wsl2-use-usbdevice/
winget install usbipd
설치 후 껐다 켜기
PowerShell
usbipd wsl list

wsl을 안켜놓고 하면 위 에러 발생

관리자 권한이 없다고 한다. 터미널을 관리자 권한으로 실행하자

웹캠이 포함되어있는 3-1번을 가져오자
PowerShell
usbipd wsl attach --busid 3-1

WSL
lsusb

3-1번 포트가 인식되는것을 볼 수 있다
sudo apt install -y build-essential flex bison dwarves libssl-dev libelf-dev bc libncurses-dev
uname -a

wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.15.90.1.tar.gz
tar zxf linux-msft-wsl-5.15.90.1.tar.gz
cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1
sudo cp /proc/config.gz ./
gunzip config.gz
mv config .config
설정 변경
make menuconfig
Device Driver enter로 진입하여 Multimedia Support <*>로 변경
Multimedia Support enter로 진입
Filter media drivers [*]로 변경
Media device types enter로 진입하여 Cameras and video grabbers [*]로 변경
Video4Linux options enter로 진입하여 V4L2 sub-device userspace API [*]로 변경
Media drivers enter로 진입하여 Media USB Adapters [*]로 변경
Media USB Adapters enter로 진입
USB Video Class (UVC) <*>로 변경
GSPCA based webcams <*>로 변경
make -j$(nproc)
빌드가 자꾸 오류가 난다.......
뭘까......뭐가 문제일까..........
아래 블로그를 따라 진행한다
http://www.publickrdata.com/blog/54/
브랜치 정보에 맞게 해야한다고 한다.

sudo mkdir /usr/src
cd /usr/src
sudo git clone -b linux-msft-wsl-5.15.y https://github.com/microsoft/WSL2-Linux-Kernel.git $5.15.y-microsoft-standard && cd $5.15.y-microsoft-standard

error: RPC failed; curl 56 GnuTLS recv error (-24): Decryption has failed.
왜그럴까..........
한참 고민하다가 아래와 같이 해보기로 했다.
http://www.publickrdata.com/blog/54/
원래 여기서 /usr/src라는 곳에 linux-msft-wsl-5.15.y를 sudo로 깃으로 당겨오는데 이게 자꾸 오류가 나니까, 그러면 이거에 해당하는 코드를 아래 블로그에서 했던 대로 wget을 이용해서 당겨와보자
https://ahnbk.dev/?p=333
참고로 /usr/src는 관리자 권한이 필요하기 때문에 sudo를 붙여서 명령어를 내려야한다.
cd /usr/src
sudo wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.15.90.1.tar.gz
sudo tar zxf linux-msft-wsl-5.15.90.1.tar.gz
cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1
sudo cp /proc/config.gz
sudo gunzip config.gz
sudo mv config .config
sudo make -j16
한참 빌드하더니 드디어 됐다 ㅠㅠㅠㅠ

ls
vmlinux 라는 파일이 생겼다

이거를 C드라이브에 복사한다.
그냥 명령어주면 안먹히니 미리 C드라이브에 파일 옮겨놓을 위치를 만들어놓고 이거를 반영한다
sudo cp -rf vmlinux /mnt/c/Users/jaewh/kernels
wsl 종료한다
wsl2 --shutdown
현 위치 : C:\Users\jaewh
PowerShell
code .

wsl ubuntu가 안켜진다
코드 수정
[wsl2]
kernel = C:\\Users\\jaewh\\kernels\\vmlinux

다시 실행

uname -a


ll /dev/video*
**** 에러 발생
