라즈베리 파이 카메라 안됨 - lajeubeli pai kamela andoem

[ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (1901) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Cannot identify device '/dev/video-1'. [ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (990) open OpenCV | GStreamer warning: unable to start pipeline [ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (577) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created [ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_v4l.cpp (833) createBuffers VIDEOIO(V4L2:/dev/video0): failed mmap(921600): errno=19 (No such device) [ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video0): can't open camera by index Traceback (most recent call last): File "/home/pi/ll.py", line 43, in observe() File "/home/pi/ll.py", line 18, in observe cv.imshow("VideoFrame", frame) cv2.error: OpenCV(4.5.1-dev) /home/pi/opencv/modules/highgui/src/window.cpp:404: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'

 

라즈베리 파이 카메라 안됨 - lajeubeli pai kamela andoem

 

저의 경우 스트리밍 성능을 비교하기 위해 mjpeg-streamer, uv4l 패키지를 깔았는데요.

결과적으로 uv4l이 백그라운드 프로세스로 계속 열려있었고 카메라 자원을 점유하고 있는데

제가 계속 카메라 자원을 요청하고있었기에 발생한 출동 문제였습니다.

상단 오류 문구의 can't open camera by index가 그 증거이구요.

 

일단 사전에 카메라가 잘 연결되었는지, 장치가 등록되어있는지 확인해야합니다.

아래 명령어로 확인했을 때 detected, supported가 둘다 1이 떠야합니다.

vcgencmd get_camera

 

그리고 웹캠은 잘 모르겠으나 rpi cam ( v2모듈 등등)을 사용하고 계시다면 기본적으로

카메라 자원이 0번(video0)으로 등록이 되어있을 텐데 이 부분도 확인해야합니다.

 

ls /dev/video* 또는 ls /dev/video* -l 명령어로 video0이 뜨는지 확인해야합니다.

안뜬다면 카메라 재연결 + 리부트 해보시길 바랍니다.

 

이제 다음 단계입니다. 아래 순서대로 한번 확인해보시면 될 것 같네요.

 

1. 프로세스 확인 ps 명령어 혹은 ps -ef 

2. 사용하지 않는 카메라 스트리밍관련 서버 패키지 프로세스 kill

3. 그래도 안되면? 스트리밍 패키지가 데몬으로 부팅시마다 계속 실행 중인지 확인-> 있다면 해제

chkconfig --list 명령어로 확인하면 될 것 같습니다

(이 부분에서 제가 사용하지 않는 uv4l이 데몬으로 돌아가고 있어서 문제가 발생하였습니다.)

4. 확인 차 리부트 + 실행= 완료

 

**2021-07-06 추가 수정 사항 ***

videocapture함수의 인자를 -1또는 0으로 지정하여 프리뷰 화면을 이용하려 할 때 동시에 스트리밍을 하려고할 때 (mjpg streamer, uv4l, gstreamer등등) 자원선점 오류로 실행에 에러가 발생합니다.

이것은 카메라 자원을 동시에 두 군데에서 요청하기 때문에 발생하는 자연스러운 오류이며 위의 캡처본 같은 오류가 발생할 수 있습니다. 따라서 별도로 스트리밍 서버를 실행시켜놓고 파이썬 코드에서 opencv를 이용한 이미지 처리를 할 때 videocapture()함수 인자에 0또는 -1이 아닌 스트리밍 서버의 주소를 불러와야합니다. 프레임이 끊기는 문제에 대한 해결책은 좀 더 고민한 뒤 업로드 하겠습니다.

라즈베리 파이를 구매할때 카메라 모듈을 함께 구매하였습니다.

 

그래서 연결을 해보려하는데... 사람들이 설명한대로

 

sudo apt-get update

sudo apt-get upgrade

sudo raspi-config

 

까지 한 다음에 실행을 하면 아래와 같은 에러들이 발생했습니다.

(5줄 정도 되는데 제가 적어놓질 않았네요..)

 

mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera'

 

이 상태는 카메라 모듈에 빨간색 불이 들어와있는 상태였습니다.

 

저는 전원이 들어왔나보다 했는데 나중에 정상작동 할때는 불이 안들어가더군요...

 

 

결과는 제가 보드를 자세히 보지 않고 카메라 모듈과 아무 연결구가 맞나보다 하고 연결을 했었는데

연결되어 있던 선은 DISPLAY코드더라구요

CAMERA 연결부는 별도로 존재합니다.

 

라즈베리 파이 카메라 안됨 - lajeubeli pai kamela andoem

(출처 : 라즈베리 파이 재단)

 

사진에서 보면 카메라 연결부위는 가운데이고(흰색 글씨로도 써져있더군요...) 여기에 연결을 해야지 정상작동합니다.

 

 

저는 이 문제로 2일동안 엄청 골머리 썩혔다는.... ㅠㅠㅠ 설명서를 미리 볼껄..;;

 

공유하기

게시글 관리

구독하기천천히, 빠르게. 개발자의 Repository

저작자표시 비영리

  • 카카오스토리
  • 트위터
  • 페이스북

'IoT (구 유비쿼터스) > 라즈베리 파이' 카테고리의 다른 글

라즈베리 파이 서보모터 이해하기, SERVO / SG-90 / TOWERPRO9G  (2)2015.01.22라즈베리 파이 서보모터 분해하기, SERVO / SG-90 / TOWERPRO9G  (0)2015.01.22라즈베리 파이로 음악 서버 만들기  (0)2015.01.21라즈베리 파이로 서버 만들기 - 시작전 조사를 하던 중...  (0)2015.01.191. 시작하기 (부팅부터 무선랜까지)  (0)2015.01.01

Raspberry Pi 3B 모델에 PCAM5C 카메라를 연결하려고 디바이스 트리, 드라이버 수정해보았다.
도저히 안 붙는다 싶어서 파이카메라는 원래 어떻게 작동하였는지 알아보았음.

결과적으로 다른 카메라를 연결하는데는 실패하였지만
왜 안되는지 생각해보면서 작성한 글이다.

아래는 핀과 케이블 규격이 호환되는 PCAM5C라는 제품(OV5640기반)을
PiCam과 비교하여 붙일 수 있는지 체크한 내용이다.

라즈베리파이 카메라 회로도

라즈베리 파이 카메라 안됨 - lajeubeli pai kamela andoem

라즈베리 파이 카메라 안됨 - lajeubeli pai kamela andoem

라즈베리 파이 카메라 안됨 - lajeubeli pai kamela andoem

카메라가 받아오는 클럭의 소스를 라즈베리파이 AP가 아닌 카메라 보드 위의 24MHz 크리스탈에서 받아오고있다.

라즈베리파이 AP에서 받아올 수 있다면 디바이스드라이버나 트리수준에서 제어한 뒤에 클럭을 제어할 수 있어보인다..

회로도

라즈베리 파이 카메라 안됨 - lajeubeli pai kamela andoem

12MHz 클럭을 보드에서 받아옴.

I2C, MIPI 핀맵 구성은 같다.

PCAM5C를 라즈베리파이의 CSI포트에 연결할 경우 클럭을 넣어줄 수 없음.

작동 방식을 분석하여 핀맵을 변경하던 드라이버를 수정하던 뭔가 진행해서 클럭을 따로 넣어줄 수 있는지 알아봐야 할 것 같음.

raspi-config 파일 분석

카메라를 사용하기위해 raspi-config의 camera enable 과정을 확인해보았다.
대체 뭘 했길래 카메라가 설정되는지 알고싶었기 때문에 raspi-config 스크립트를 열어보았고,
아래는 스크립트를 보면서 이해하는데 필요한 부분을 일부 발췌한 내용을 옮겨적었다.

raspi-config에서 Camera 활성화시 /boot/config.txt의 start_x와 gpu_mem 속성 값이 변경됨.

  • start_x 속성 값만 변경하여 카메라 활성여부를 체크함.
  • 부팅과정에서 /boot/config.txt 파일에 기록된 속성과 값들을 체크하여 시스템을 설정함.

config.txt는 뭘까?

config.txt는 뭘까?
Raspberry pi boot process

대략 GPU가 /boot/config.txt를 읽고나서 일련의 작업이 구성되고 CPU(및 OS)가 초기화 된다는 맥락인 것 같다.

커널 메시지 및 모듈 상태

  • i2c는 비활성화 상태
  • lsmod와 dmesg를 사용하여 i2c, ov56* 등의 키워드로 걸러봤을 때, 결과가 나오지 않음
  • 위의 상황인데 카메라가 작동하고있음

RPi의 VideoCore와 PiCam 사이에 뭔가 인터페이스가 있거나 직접 통신을 하거나 둘중 하나임.

VideoCore는 제어가 가능할까?

뭔가 있을 것 같아서 VideoCore이 주변 페리퍼럴에 어떤 상호작용을 하는지 알아보기 위해 블록 다이어그램을 찾았지만 못찾았다.

그러다가 포럼 게시물 하나를 읽게되었음.

라즈베리 파이 카메라 안됨 - lajeubeli pai kamela andoem

이쯤되면 차라리 라즈베리파이를 안쓰고 카메라관련 프로세싱 과정이 오픈되어있는 다른 SBC를 사용 해 볼 생각도 든다.

라즈베리 파이 카메라 안됨 - lajeubeli pai kamela andoem

비디오프로세싱 전용 코어가 있고 우린 그걸 제어할 수 없지..!

내부 직원이 아닌이상 못하지않을까...

라즈베리파이의 부팅과정 중 GPU가 초기화되는 단계가 있고, 이 때 boot 파티션의 start_x.elf 파일에 있는 카메라 조작 관련 코드를 실행시킴.

근데 그 내용은 비공개 상태이며 앞으로도 공개될 가능성이 상당히 낮다.
(공식적으로 브로드컴과 라즈베리파이제단에서 공개하지 않는다고 하는 항목 중 하나)

심지어 이게 I2C 등으로 제어될 줄 알았는데 VideoCore에 직접 연결되어있다.