Closed Dali424 closed 6 months ago
라즈베리파이 최신 버전 64비트에서는 카메라를 연결하면, 별도의 설정 없이 'libcamera-hello' 커맨드로 연결을 확인할 수 있습니다.
업로드된 DOCKERFILE을 빌드하여 컨테이너로 RUN할 때
docker run -it -d --device=/dev/video0:/dev/video0 --privileged --name v1 v1
위와 같은 명령어로 호스트 시스템의 /dev/video0 장치를 컨테이너 내부의 /dev/video0 장치에 연결해보았지만 해결되지 않았습니다. 그리고 컨테이너를 "privileged" 모드로 실행하여 컨테이너가 호스트 시스템의 모든 기능을 사용할 수 있도록 하는 권한 을 부여하였지만 해결되지 않았습니다.
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
print(camera_id)
# Continuously capture images from the camera and run inference
while cap.isOpened():
success, image = cap.read()
if not success:
sys.exit(
'ERROR: Unable to read from webcam. Please verify your webcam settings.'
)
제공된 test.py에서 cap.isOpened()은 반환값이 True이지만 cap.read()에서 반환값이 false , None으로 반환되는 것을 확인했습니다. 해당 issue를 찾아본 결과, 최신 Raspberry Pi OS에서 제공하는 libcamera의 인터페이스는 OpenCV에서 지원하지 않는 다는 사실을 알았습니다.
picamera2
를 사용하여 프레임을 받아오는 방법이 있습니다. 현재 picamera2를 이용하여 아래의 코드를 실행하고 웹캠이 실행되는것을 확인했습니다
from picamera2 import Picamera2
picam2 = Picamera2() picam2.preview_configuration.main.size = (800,800) picam2.preview_configuration.main.format = "RGB888" picam2.preview_configuration.align() picam2.configure("preview") picam2.start()
while True: im= picam2.capture_array() cv2.imshow("Camera", im) if cv2.waitKey(1)==ord('q'): break cv2.destroyAllWindows()
현재 컨테이너 내부에서 ``picamera2``를 사용하여 프레임을 받아오는 것을 알아보고 시도해보는 중 입니다.
아래의 링크를 통해 도움을 받아 해당 방법을 시도 해보시고, 성공한 결과를 알려주세요.
그리고 컨테이너를 run할 때, 호스트의 웹캠 디바이스를 Docker 컨테이너에 볼륨으로 마운트하는 방식으로 아래의 명령어를 추천합니다. ```docker run -v /dev/video0:/dev/video0 my_container```
</br> </br> </br>
다음은 참고한 링크입니다.
#### libcamera의 인터페이스는 OpenCV에서 지원하지 않는 이슈
- https://atsss.medium.com/how-to-set-up-opencv-env-for-raspberry-pi-4d9f7d60a3f2
#### picamera2 설치
- https://velog.io/@xxn1ik/%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B44-OS-64bit-V2-%EC%B9%B4%EB%A9%94%EB%9D%BC-%EC%9B%90%EA%B2%A9-%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D
마찬가지로 libcamera으로 OpenCV가 호환되지 않는 문제가 발생하여 위의 이슈를 참고하여 picamera2를 사용했습니다.
도커 컨테이너를 실행할 때 호스트의 웹캠 디바이스를 컨테이너에 볼륨으로 마운트
먼저, 아래와 같이 컨테이너를 실행하여 컨테이너 내부의 셸에 접속합니다.
$ docker run -v /dev/video0:/dev/video0 -it my_container /bin/bash
컨테이너 내부에서 아래의 파이썬 코드를 실행. 이 코드는 picamera2를 사용하여 카메라 프레임을 받아옵니다.
from picamera2 import Picamera2
import cv2 // 추가한 부분
picam2 = Picamera2()
picam2.preview_configuration.main.size = (800,800)
picam2.preview_configuration.main.format = "RGB888"
picam2.preview_configuration.align()
picam2.configure("preview")
picam2.start()
while True:
im = picam2.capture_array()
cv2.imshow("Camera", im)
if cv2.waitKey(1) == ord('q'):
break
cv2.destroyAllWindows()
카메라 모듈 부착한 후 최근 버전의 OpenCV로 촬영하는 과정에서 위의 코드가 정상적으로 촬영되는지 확인하는 과정에서 오류 발생
카메라 인식이 안되어 실행이 되지 않습니다 월요일에 카메라 교체 후 다시 해보겠습니다
들고 간 라즈베리파이 키트 내에 sd카드가 없어서 월요일에 키트 교체 후 시도해보겠습니다.
카메라 인식이 안되어 실행이 되지 않습니다 월요일에 카메라 교체 후 다시 해보겠습니다
https://github.com/NerdConnection/Raspberry-Pi-5-Computer-Vision/issues/9#issuecomment-2052147318
라즈베리파이 최신 버전 64비트에서는 카메라를 연결하면, 별도의 설정 없이 'libcamera-hello' 커맨드로 연결을 확인할 수 있습니다.
위의 libcamera-hello
커맨드로 연결을 확인했을 때 확인이 안되나요?
연결했을 때 확인은 됩니다 하지만 build 하고 run 하는 과정에서 can't open camera by index 가 뜹니다 dockerfile 에서 RUN pip install picamera2 추가하고 추가해주신 코드 test.py에 다시 추가해서 빌드 했는데도 같은 오류가 뜨네요 제가 잘못된 방법으로 했을 수도 있으니 내일 가서 설명 한번만 해주셨음합니다
카메라 인식이 안되어 실행이 되지 않습니다 월요일에 카메라 교체 후 다시 해보겠습니다
라즈베리파이 최신 버전 64비트에서는 카메라를 연결하면, 별도의 설정 없이 'libcamera-hello' 커맨드로 연결을 확인할 수 있습니다.
위의
libcamera-hello
커맨드로 연결을 확인했을 때 확인이 안되나요?
docker run 처음 시도 : openCV로 카메라 인식 후 frame을 받아오는 과정에서 오류 발생
이후 test.py에 picamera2를 이용해 카메라 프레임을 받아오는 코드 추가 후 다시 시도 : can't open camera by index 오류 코드 발생
libcamera-hello 커맨드를 실행 : no cameras available 발생
4/29 수업 시간에 카메라 모듈 교체 후 실행해보겠음.
일단 picamera2 가 python3.9 부터 지원합니다 (수정) libcap-dev \ 추가 RUN pip install --verbose picamera2 추가 --verbose는 빌드중 에러 내역을 자세하게 보여줍니다 나중에 다른 도커파일 작성할때도 참고하면 좋을것 같습니다 현재 진행중 오류는 picamera2 라이브러리 내부의 init.py 의 import libcamera를 불러올수 없는 오류가 있습니다 No mudule named 'libcamera'
본 issue는 #11 을 사용하여 해결하였습니다.