라즈베리파이 카메라 연결하기
시작이 반이다.
- 나는 컴퓨터속을 벗어난 적이 없는, 뭔가 현실세계에는 나가지못한 그런것을 개발한다. 그래서 뭔가 하드웨어를 만져서 현실세계의 것을 다루고 싶었다.
- 일단은 조금은 편하고 익숙한 것에서 부터 출발하기로 하였다.
- ‘라즈베리파이’라는 마치 장난감 같은? 아주조그마한 컴퓨터와 그것과 세트로움직이는 ‘라즈베리파이 카메라 v2’ 일단은 이거 두개로 무언가를 해보기로 하였다.
- 당연히, 그 무언가는 이 카메라로 데이터를 취득하고 라즈베리파이 안에서 뭔가 데이터처리를 하는 것이다. (일단은 이것부터… 다음에는 이 데이터를 기반으로 뭔가 반응을 보이는 것을 하고자한다.) 또한, 딥러닝은 쓰지않을 생각이다. 기존의 많은 영상처리, 신호처리 방법을 적용시킬 생각이다. 당연히 이걸 잘모르니까 공부하면서 한다.
환경 세팅
- 큰제목이 시작이 반인 이유는 고작 라즈베리파이 카메라를 붙이고, 거기서 영상을 받는 것조차 쉽지않았기때문이다. (젠장. 역시 현실세계는)
- 여기서는 3가지 세팅에 대해서 설명을 하도록 한다.
- (1) 라즈베리 파이에 원격접속하기. 매번 라즈베리파이를 쓰겟다고, hdmi뽑아서 붙이고 키보드랑 마우스를 연결하는 것보다는 원격접속하는 편이 낫다.
- (2) openCV 설치하기. 윈도우 말고 다른 우분투같은 os에서 python opencv를 설치하는 것은 정말쉬운일이 아니다.
- (3) 카메라를 라즈베리파이에 끼우고, 데이터를 받아보자.
- (기타) 사람들은 vi로 python 코드를 짜던데..이건 아닌거같다. 넘나어렵다. 편한 atom을 깔려고했는데 실패 (아놔). nano를 이용해서 코드를 짜보기로
- 이게되면 정말 시작할 수 있는 위치에 선 것.
(1) 원격접속하기.
- 원격접속은 가장 기본이되는 ssh가 있다. 그리고 영상을 봐야하니까 화면도 받을 수 있는 VNCserver라는 방식도 있다. 뭐 그렇게 어려운방식은 아니다.
일단. VNC vncserver
- 라즈베리파이에 vnc 서버를 설치해서 화면으로 직접 원격접속하는 것
- 설치
1 | sudo apt-get update |
- 설치가 완료되면
vncserver :1
를 terminal에 입력해서 서버를 열어준다. 접속하고싶은 피씨에 vnc viewer를 깔고
IP주소:1
로 접속하면 끝추가
- 설치할 때, setting에서 vncserver 접속 가능? 뭐이런거 설정해준거같은데 잘 기억이안난다. 안되면 거기들어가서 찾아보는 것을 추천.
SSH 이용하기
- vnc server를 이용하는 경우 일단 라즈베리파이에 들어가서 서버를 열어주어야함. 결국 한번은 키보드꼽고, 모니터꼽고 막 그래야 한다는 것 (오쒯..)
- 하지만 ssh로 터미널켜서 server를 열어준다면? (ㅋㅋ이거뭔가 지저분한 방법인데ㅋㅋ)
우선 option을 ssh 가 가능하도록 바꿔주자
sudo raspi-config
로 접속- 일반적으로 8. advanced option에 ssh가 있다고한다 (내라즈베리파이는 그게없다. 너무구버전?혹은신버전?)
- 대신 4. Interfacing Options에 들어가있음
- SSH 활성화시켜줌
원격접속
ssh (접속할 ID)@(IP주소)
로 접속 가능- 일반적으로 라즈베리파이의 ID는
pi
password는raspberry
이다.
(2) openCV 설치하기.
-
- 여기서 아주기이이일게 설치를 하는 것이 나온다. 이 글에서 사용한 방법은 이게 아니지만 복잡하고 긴만큼 이렇게 까는것이 좋은거 같다. 아마도 정석인듯 밀고다시깔땐 이걸로해야지.
- 둘 다 같은 사람이 쓴거같은데
현실은 누군가가 미리 쎄팅해놓은걸 따운받음. 개꿀
- 여기여기
- 다 좋은데 이러면 가상환경에 어뜨케 opencv넣는지 모르겠음. 대체 opencv는 어디에 깔려있는걸까
(3) 카메라 연결
라즈베리파이와 라즈베리파이카메라는 csi포트라는 것을 통해서 연결이 된다.
- 이것도 ssh와 마찬가지로
sudo raspi-config
여기로 들어가서 카메라부분을 9잘찾은 다음)enable
만들어주면 라즈베리파이 카메라와 연결이 됨.
- 이것도 ssh와 마찬가지로
사진 테스트
- 일단 제대로 끼워졌나 확인을 시작해보자
- 터미널로 가서 아래명령어를 치면
test_pic.jpg
라는 이미지가 찍힌다.
1
raspistill -o test_pic.jpg
이제는
Opencv
로 영상을 받아보자. 그래야 python으로 뭔가 영상을 만지작만지작하지.- Opencv로 영상에 접근하기위해서는 V4L2드라이버를 로드해줄 필요가 있음.
sudo modprobe bcm2835-v4l2
를 터미널에서 실행한다.- 그러면 드라이버가 로드됨
- 드라이버가 로드되면
ls /dev/video*
했을떄 video0가 추가되었을 것이다.
- 부팅 시점에 드라이버로드 해주기.
/etc/modules
수정해주기.nano
를 쓰자.- 터미널에서
nano /etc/modules
실행 - 제일 아래줄에
bcm2835-v4l2
추가해주기.
- 터미널에서
아직 잘 모르지만. 예제코드를 돌려보자.
import cv2 cap = cv2.VideoCapture(0) while cap.isOpened(): ret, img = cap.read() if ret: cv2.imshow('test', img) if cv2.waitkey(1) & 0xFF == 27: # esc break
깔았다
- 고작 영상한번 띄우자고 너무나고생했다. 하 일단은 좋은컴퓨터에서 영상로드해서 할까봐…
- 다음번엔 신호처리 기법을 적용시켜본다!
- 일단 1차 목표는 딥러닝을 쓰지않고, 사물이나 사람을 인식해서 그 위치를 추척하는걸 구현하는 것.
- 2차목표는 지난번에 삿던 CCTV 라즈베리파이에 연결하기… 그래야 그 찾은 위치 따라다니지 히익(망한듯 CCTV망가짐)