라즈베리 파이가 눈을 뜬다. Pi Camera 설치하기
라즈베리 파이에 카메라 모듈을 설치하는 것만으로도 많은 것이 가능해집니다.
여기서 말하는 카메라 모듈은 PC에 사용하는 USB 캠이 아니라 (실제로는 비슷할 수도 있지만) 라즈베리 파이 전용으로 나온 Pi Camera 모듈입니다. 아래와 같이 라즈베리 파이 이더넷 소켓쪽에 있는 카메라용 케이블 소켓에 끼워주면 됩니다.
여기서는 카메라로 할 수 있는 기본적인 동작들을 Python으로 구현해 보겠습니다.
패키지 설치 확인 및 설정
먼저 라즈베리 파이의 패키지들 업데이트 한 번 하고, python-picamera 패키지를 확인합니다. 최신 이미지에는 이미 설치되어 있을겁니다.
- sudo apt-get update
- sudo apt-get upgrade
- sudo apt-get install python-picamera
라즈베리 파이 설정에 들어가서 카메라를 활성화 해줍니다.
- sudo raspi-config
- ‘Enable Camera’
설정화면을 나오면 재부팅 해줍니다.
카메라 제어 (Console)
Console 에서 커맨드를 이용해서 카메라를 제어하는 방법입니다.
카메라 테스트를 위해 preview 이미지를 가져옵니다.
- raspistill -v -o
Raspistill 을 이용해서 사진을 찍습니다.
- raspistill -v -o xxx.jpg
Raspivid 를 이용하면 녹화가 가능합니다. 녹화 기본 설정이 1080p (1920×1080) 입니다. 5초간 비디오를 녹화해 봅니다.
- raspivid -t 5000 -o xxx.h264
카메라 제어 (Python)
이제 파이썬 언어를 이용해서 카메라를 제어하는 방법을 소개합니다.
Preview 이미지를 가져오는 소스는 아래와 같습니다.
- nano camera_preview.py
#!/usr/bin/python import time import picamera with picamera.PiCamera() as picam: picam.start_preview() time.sleep(10) picam.stop_preview() picam.close()
저장 후 아래 두 명령어 중 하나로 실행하시면 테스트 해볼 수 있습니다.
- sudo python camera_preview.py
- sudo ./camera_preview.py (이 경우는 먼저 해당 파일에 chmod 명령어로 executable 권한을 부여해줘야 합니다.)
주의!!! import picamera 부분에서 라이브러리 찾을 수 없다고 에러가 나올 수 잇습니다. 이 경우는 picamera가 제대로 설치되지 않은 경우입니다. 위 가이드대로 설치과정을 해도 인식이 안된다면 아래 명령어로 다시 설치하고 시도해보세요.
- sudo pip install -U picamera
아래는 사진을 찍는 코드입니다.
#!/usr/bin/python import time import picamera import os path=os.getenv("HOME")+"" #adjust path for location of this program with picamera.PiCamera() as picam: picam.rotation=90 #adjust as necessary picam.start_preview() time.sleep(5) picam.capture('pic.jpg') # picam.capture(path+'/photo.jpg',resize=(640,480)) # time.sleep(2) picam.stop_preview() picam.close()
여기서는 사진을 jpg로 저장했는데 png, gif, bmp, yuv, rgb, raw 형식으로 저장도 가능합니다.
비디오를 녹화하는 코드입니다.
#!/usr/bin/python import time import picamera with picamera.PiCamera() as picam: picam.start_preview() picam.start_recording('video.h264') picam.wait_recording(20) picam.stop_recording() picam.stop_preview() picam.close()
주의하실 점은… 앞선 이미지 촬영과는 달린 start_recording() 이후 time.sleep() 대신 picam.wait_recording() 을 사용한다는 것입니다. 레코딩을 위해 필요한 사항들을 체크하는 역할을 합니다.
참고자료