처음‎ > ‎지식기반‎ > ‎

RPi: 웹캠를 이용한 고화질 무선 저속촬영 (timelapse)

RPi로 무선 고화질(Full-HD) 저속(timelapse)촬영 장치를 만들고 있습니다.

[목표]
  • 단순해야 한다.
  • 무선이어야 한다.
  • 고화질 이어야 한다.
  • 독립형(headless)이어야 한다.
    • 동작중에 키보드, 모니터 등, 입출력 장치를 필요로 하지 않아야 한다.
[도전]
  • 무선: 저렴하고 작고/가볍고/고용량인 배터리 장치는?
  • 고화질: RPi를 멈추게 하지 않고 최고 화질을 안정적으로 전해 줄 웹켐은?
  • 독립형: 최소 구성 만으로 명령을 전달하고 기기 상태를 알 방법은?
    • 촬영된 이미지를 USB메모리에 옮기는 것도 자동이어야 한다.
운영 시나리오를 말로 풀어 쓰면 이렇습니다.
  • 사진 촬영
    • RPi본체는 배터리팩(UPS&전원안정화 장치 역할)과 항상 함께하고 있습니다.
    • 촬영을 원할때는 카메라 렌즈부위를 안정적으로 위치시키고
    • RPi의 USB포트에 연결합니다.
    • (자동으로) 카메라의 연결을 감지해서 정해진 시간간격(예: 1초)마다 사진을 찍기 시작합니다.
      • 계속 찍어 댑니다..
    • 그만 찍고자 할때 카메라의 USB연결을 빼냅니다.
  • 사진 백업
    • USB메모리를 RPi에 꽂습니다.
      • 이 동작을 감지 해서..
      • [UPDATE] 촬영한 이미지를 고화질 저속촬용 동영상으로 변환 합니다. (mencoder)
    • (자동으로) USB메모리에 촬영해 둔 이미지 변환 완료된 동영상을 옮깁니다.
      • 다 옮겼으면 USB메모리를 umount하고
      • RPi 보드상의 LED를 깜박여서 완료를 알립니다.
    • USB메모리를 빼냅니다.
  • 시스템 종료
    • 사전에 '이 USB장치를 끼우면 시스템을 종료한다'로 등록한 장치를 끼웁니다.
      • 굴러다니는 아무 USB장치면 됩니다. 저는 짝잃은 무선마우스 receiver를 사용하고 있습니다.
    • shutdown이 이뤄지고 RPi 보드상 LED가 10번 깜박이면 시스템 전원을 제거해도 됩니다.
  • 시스템 점검
    • AP모드를 지원하는 USB Wifi동글을 RPi에 연결합니다.
    • (자동으로) 잠시후에 Wifi hotspot으로 외부장치에서 인식 됩니다.
    • 랩탑등으로 RPi가 만든 이 hotspot에 연결하고 SSH로 들어가서 작업을 합니다.
[구성품]
  • RPi 모델A
  • 2GB SD카드 (Raspbian Wheezy)
  • Microsoft LifeCam Studio
  • RavPower 5600mAh



모델B는 확실히 맘편히 다양한 USB주변장치를 운영하기에 문제점이 많습니다. 그중에서도 고화질 웹켐을 유전원USB허브 없이 직접 연결해서 사용하는 것은 거의 불가능 한데, 제 LifeCam이 안되는 것을 보고, 자체적으로 저전력을 소비하는 모델A에 희망을 걸어 봤는데 결과가 좋았습니다.

배터리팩이야 말로 아직까지 숙제 인데, 가성비가 좋다 싶어 5V@1Ah의 RavPower를 샀습니다만, 한시간쯤 사용하면 출력전류가 USB스펙 밑으로까지 점점 떨어지는 치명적인 문제가 있습니다. 실제로는 3400~3800mAh 정도라는 얘기가 돌고 있다는것도 나중에 알았습니다.

하드웨어는 여기까지이고 나머지는 소프트웨어인데,
위에 '자동' 부분은 전부 udev rule과 shell script로 구현 하였습니다. bluetooth GPS를 쓰게 되면서 좀 더 복잡해 지고는 있습니다만, 처음에 걱정했던것 보다 udev가 훨씬 안정적인 stack과 queue 운영 성능을 보여주고 있습니다.

핵심구성 요소인 웹켐프로그램으로 motion과 mjpg-streamer를 모두 사용해 봤습니다.
특히 motion에는 자체 timelapse 비디오 저장기능이 있지만 mpeg1만 지원하는데다가 화질이 Full-HD라고 할 수 없는 수준이어서 포기 했습니다. 대신 snapshot 기능을 써서 1초마다 이미지를 저장하였고, USB 백업한 후에 PC에서 Picasa로 비디오파일로 변환 하였습니다.
아래는 이 작업의 결과물로 출근하며 찍은 영상으로 해상도는 1920x1080입니다.


하지만, Motion의 문제점은 CPU를 혹사시킨다는 것입니다.
또 1920x1080라고 설정을하면 '16의 배수가 아니다'라고 실행을 거부하지만, 제 캠의 경우 1920x1200으로 설정을 하면 1920x1080으로 촬영이 되는,, 특별한 이유없이 상황/기분에 따라 회색화면만 보이기도 하고,,
훌륭한 프로그램입니다만, RPi와 고화질 USB웹캠의 조합과는 격이 맞지 않는 다는 자체 결론입니다. 게다가 timelapse 비디오 기능도 쓸모가 없는 상황이라 더 쉽게 포기할 수 있었습니다.

해서 선택한 것이 mjpg-streamer입니다.
CPU에 부담도 적고, 무엇보다, 일단 실행만 시키면 그저 금방 사진을 찍어대기 시작 했습니다.
이 방법으로 촬영한 영상이 아래 사무실에서 내려다 본 도시 전경입니다. 같은 1920x1080입니다.


mjpg-streamer에 아쉬운 점은 타이밍이 motion만큼 정확하지 않다는 것과 사진에 현재시간이 표시되지 않는 다는 것인데 다른 해결책을 찾아가고 있습니다. (fswebcam??)

끝으로 앞으로의 목표입니다.
  • 위성(GPS)시간에 시스템 시간을 맞춘다. (NTP sync)
  • GPS위치 정보를 사진의 metadata로 기록한다. (geotagging)
  • 필요하면 시간과 GPS정보를 사진에 기록한다. (convert@ImageMagick)
  • 백업전 동영상을 자동 생성한다. [완료]
  • HDTV가 연결되면 최근 영상을 재생 한다.
  • SD카드 말고, 고속에 고용량 임시파일(사진) 읽기/쓰기를 버텨줄 대안을 찾는다.
  • 레일카(모터부)를 붙여서 조금씩 레일위를 이동하며 촬영한다.
감사합니다.
Comments