ubuntu 환경에서 실시간으로 face detect나 face mesh, pose estimation을 수행하기 위해서 webcam을 설치해주었다.
webcam을 사용할 경우, webcam을 구동시키는 인터페이스를 설치하고 실행할 수 있다.
설치 환경
- pc 환경 : ubuntu 18.04
- Camera : Logiteck HD STREAM WEBCAM
WEACAM은 일반적인 USB 장치들과 다르게 VIDEO DIVICE으로 인식되기때문에, 별도의 명령어를 이용하여 확인할 수 있다.
WEBCAM linux ubuntu 확인 명령어
# webcam 인식 확인 명령어
$ ls -ltr /dev/video*
# webcam 인식 확인 명령어
$ sudo apt-get install v4l-utils -y
$ v4l2-ctl --list-devices
위와 같이 웹캠 경로와 웹캠 모델명이 나오면 ubuntu에 웹캠이 제대로 인식된 것이 맞다.
웹캠을 설치하고 인식 확인 후, 직접 캡쳐까지 진행했지만 스트리밍은 계속해서 실패하였다.
VLC는 오픈소스 멀티미디어 플레이어 중 하나로 크로스 플랫폼이다.
사실상 모든 멀티미디어 파일, DVD, 오디오 등 다른 스트리밍 프로토콜을 재생할 수 있는 특징이 있다.
#vlc 설치
$ sudo apt install vlc
#vlc connection 명령어
$ snap connections vlc
# VLC의 Plug, Slot에 모두 camera를 넣어준다. Slot에 camera가 빠져있어서 계속 스트리밍 에러가 났던 것으로 생각한다.
# VLC의 Plug, Slot에 모두 camera를 넣어준다.
$ snap connect vlc:camera :camera
vlc media player를 open하여 오른쪽 아래 재생버튼을 누른다.
Capture mode에 Video camera를 설정하고
- Video device name : /dev/video0(웹캠 경로)를 입력한다.
해당 오류는 소리를 인식하는 경로가 없어서 나오는 에러같은데, 현재 모습만 스트리밍하면 되기 때문에 상관없다.
opencv 웹캠 스트리밍 예제코드
import cv2
cap = cv2.VideoCapture(0)
# Check if the webcam is opened correctly
if not cap.isOpened():
raise IOError("Cannot open webcam")
while True:
ret, frame = cap.read()
frame = cv2.resize(frame, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
cv2.imshow('Input', frame)
c = cv2.waitKey(1)
if c == 27:
break
cap.release()
cv2.destroyAllWindows()
opencv의 웹캠 스트리밍 예제 코드를 받아와서 실험해보았다.
실제로 cap = cv2.VideoCapture(0)에서 웹캠을 인식하고, ret, frame = cap.read()로 웹캠을 읽어오는 것까지 성공했다.
하지만 cv2.imshow() 부분에서 qt5 에러가 나오는 부분의 에러를 해결하지 못해서 python 코드에서의 웹캠 스트리밍은 아직 보이지 않는다.
imshow()부분 이전에 imwrite()로 파일을 꺼내보면, 모자이크로 좀 가려졌지만 얼굴이 detection 되고 있음을 알 수 있다.
웹캠 인식은 되는데 스트리밍이나 영상 촬영이 안될경우
[error]
[ WARN:0@2.430] global /opt/conda/conda-bld/opencv-suite_1664548337286/work/modules/videoio/src/cap_v4l.cpp (902) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
device list 확인
$ sudo v4l2-ctl --list-devices
# device dev/videio0 입력 : 웹캠 동작하게 해줌
$ sudo chmod 777 /dev/video0
[error2] xcb error & DISPLAY error
error 원인은 qt에서 xcb 경로를 제대로 찾아주지 못한건데, display 경로를 제대로 잡아주면 된다.
나의 경우는 windows 환경에서 ssh로 연결한 ubuntu에서 cv2.imshow()를 실행하고 계속 에러가 떴는데, xming 같은 wsl에 필요한 프로그램을 설치하고 window ip를 display로 입력해주면 xserver에서 imshow가 실행되는 걸 확인할 수 있다.
# xserver error solution
"export DISPLAY=:1.0"
"xhost +local:"
# display 주소 설정
$ export DISPLAY=10.252.107.227:0
# display 주소 확인
$ echo $DISPLAY
웹캠 연결 해결하면서 계속 나왔던 에러들
[error]
1. Gtk-WARNING **: 14:45:05.199: cannot open display: 0.0
-> try 2
2. $ x host+
xhost: unable to open display "0.0"
-> try 3
3. $ startx
xhostxinit: giving up
xinit: unable to connect to X server: Connection refused
4. & face_detection.py
GStreamer warning: GStreamer: pipeline have not been created
'머신러닝딥러닝 > detection' 카테고리의 다른 글
mediapipe - face detect & pose estimation 동시 실행하기 (0) | 2023.01.20 |
---|---|
mediapipe face detect - webcam 실시간 실행하기 (0) | 2023.01.19 |
mediapipe pose classification model - webcam streaming environment (0) | 2023.01.18 |
구글 AI프레임워크 MediaPipe(미디어파이프)란? (0) | 2023.01.13 |
linux ubuntu 18.04에 mediapipe build 실행하기 (0) | 2023.01.13 |
댓글