SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
샤오미 카메라와 라즈베리파이를 이용해
하늘 사진을 찍어 올리는
봇을 만들어 보았다.
죽지 않는 프로그램 만들기
정문철(flashscope)
mail@limecolor.comTag: 라즈베리파이, 샤오미 카메라, 페이스북, 트위터, 봇, imgur, ifttt, postman
-만들어 볼려고 생각하게 된 이유
강릉에서 관광업에 종사 하시게 될 분의
도움이 될 만한 것이 없나 생각하던중
강릉 자체에 컨텐츠가 많이 부족하다고 느낌
간단한 거라도 컨텐츠가 될 만한 것을 만들어 보고자 함
-만들어 볼려고 생각하게 된 이유
강릉에서 관광업에 종사 하시게 될 분의
도움이 될 만한 것이 없나 생각하던중
강릉 자체에 컨텐츠가 많이 부족하다고 느낌
간단한 거라도 컨텐츠가 될 만한 것을 만들어 보고자 함
사실 다른 프로젝트에서
만들려다 실패하고 남은 장비로 제작
이유는… 재미있어 보여서?
매일 사진을 찍어
인터넷에 업로드 하는 봇
사용한 카메라
샤오미 웹 캠을
알X익스프레스에서 $32.3에
무료배송으로 구입
도착하는데 26일 걸림… 현재는 한국 공식 수입사가 있음!
RTSP(스트리밍 프로토콜) 지원
NightVision이 있는 750TVL모델을 구입
사용한 컴퓨터
카메라를 찍은 사진을 가공해서 업로드를 하는 장비로
라즈베리파이1 B 모델을 사용
제작 1단계
샤오미 웹캠으로부터 사진을 받아오기
샤오미 웹캠은 기본적으로 샤오미 앱을 통해
카메라를 조작하게 되어 있음
하지만 제품 스펙에도 적혀있는
RTSP방식으로 컴퓨터에서도 접속이 가능
인터넷 검색 결과
rtsp://[ip]:554/ch0_0.h264
로 접속이 가능하다고 하지만 실패…
(테스트는 일반 동영상 플레이어)
http://en.miui.com/thread-70205-1-1.html
샤오미 웹캠이 업데이트가 되면서
RTSP가 막혔다고함(아마도 보안 문제)
펌웨어 다운그레이드를 통해 해결 해야함
(다만 이번에 산 모델은 750TVL모델로 스샷의 펌웨어로는 불가능 하였던걸로 기억…
여러 포럼의 펌웨어들을 사용한 끝에 겨우 동작 성공)
실시간 스트리밍(RTSP)이 가능하므로
실시간 하늘 영상의 전송도 가능
하지만 직접 개인집으로 사람들이 접속하게 되는건 좀…
동영상을 스트리밍해주는 wowza hosting서비스도 있지만
이런것을 위해 유지비가 들어가기는 더욱 싫었음
(현재 유지비는 usb충전기 2개(500ma, 1000ma)의 전기)
지금 적으면서 떠올랐지만
라즈베리에서 UStream으로 서비스하는것도 좋을듯
다른 비슷한 걸 만들게 되거나 업데이트시 검토를…
샤오미 카메라가 방수가 안되는것 같아 나무와 아크릴로 케이스를
만들어 집 밖에 설치후 wifi로 연결
RTSP로부터 사진으로 캡쳐해서
여러 사진을 모아서 gif이미지로 만든 다음
sns에 업로드 하기로 정함
RTSP로부터 사진을 가져오기 위해 FFMPEG를 사용하기로
윈도우에서 개발할 때에는 이미 빌드된 파일을 다운받아 사용하였지만
라즈베리 파이에서는 직접 컴파일 해서 사용함
업로드 하는 프로그램으로는 라즈베리에서 사용 가능한
자바를 이용해서 개발 하기로 단 FFMPEG를 직접 포함하지 않고
외부에서 호출 하기로 함
이미지들을 gif로 만들기 위해서는
ImageMagick을 사용
http://www.jeffreythompson.org/blog/2014/11/13/installing-ffmpeg-for-raspberry-pi/
설치하는데 2~3시간 소요(파이1 기준)
"ffmpeg -i rtsp://" + cameraIp + "/ch0_0.h264 -f image2 -vframes 1 " + fileName;
rtsp로부터 이미지 캡쳐
String gifQuery = "convert -delay 25 -loop 0 -type Palette “;
for (int i = 0; i < this.m_PhotoList.size(); i++) {
gifQuery = gifQuery + (String)this.m_PhotoList.get(i) + " ";
}
fileName = getDate() + ".gif";
gifQuery = gifQuery + fileName;
cmdExcute(gifQuery);
캡쳐한 이미지 묶음을 gif로 만들기
gif이미지를 만들었지만 트위터는 gif를 지원하지만
페이스북 페이지에서는 gif를 지원하지 않음
페이스북에는 대표 이미지 하나를 올리고
링크를 통해 imgur에서 gif를 볼수 있도록 유도
imgur은 자체 api를 제공
https://api.imgur.com/
HttpRequest request = HttpRequest.post("https://api.imgur.com/3/image.json");
request.header("Authorization", "Client-ID BLABLABLA");
request.part("image", file);
if (request.ok()) {
String result = request.body();
try {
JSONObject jsonObject = new JSONObject(result);
JSONObject dataObject = jsonObject.getJSONObject("data");
return dataObject.getString("link");
} catch (JSONException e) {
e.printStackTrace();
}
}
간단한 post전송으로 쉽게 이미지 업로드가 가능
이제 sns에 업로드를 위해
페이스북과 트위터의 SDK자료를 보고 있는데
학습하기에 시간이 많이 걸릴것으로 판단…
(한사람(봇)을 위한 서비스를 만들고 있는데 기본 문서의 설명은
다수를 위한 서비스를 위한 설명이니 약간 핀트가 안 맞는 감도…)
ifttt 서비스를 사용하면 페이스북과 트위터에
동시에 포스팅이 가능
https://ifttt.com
다만 ifttt에게 사진을 전송해야 되는데
마땅한 방법이 안보여서 Email로 전송하기로 결정
예전에 Gmail smtp를 이용해
이메일 리포팅을 한 경험이 있는데
코드 유실…과 당시 번거로웠던 기억이 있어
이번에는 이메일 전송 서비스를 이용하기로
https://www.getpostman.com/
postman이란 서비스로
간단한 api호출로 이메일 전송이 가능
전송 가능 메일수에 제한이 있지만 무료 플랜 제공
덤으로 parse.com에도 사진 촬영 기록을 저장하고 있습니다.
나중에 타임라인이나 과거 달력으로 강릉 날씨를 보는 서비스를
만들어 볼 계획이지만 부족한 웹 프론트 기술로 실행에는 옮기지 못하고 있습니다.
멈추지 않는 서비스 만들기
ffmpeg나 imagemagick을 호출 할때 무식하게 커맨드를 넘기는 방식이라
윈도우 개발 -> 라즈베리에서 실행으로 약간 달라지는 부분이나
무선wifi에서 인터넷이 끊기고
재시작해야지만 다시 잡히는 문제도 발생하고(유선으로 교체)
또 라즈베리 파이의 성능 문제로
한장 촬영후 업로드하는 시간에 여유를 둬서
3분에 한장씩 30분마다 10장을 gif로 만들어서 업로드하는 등의
시행 착오도 많았지만 기본적으로 잘 동작하였지만…
한 한달 정도 후에 동작이 정지됨을 확인
ssh로 접속해서 확인해보니
함수가 블록되어서 멈춰있는 상태
하지만 해당 함수는 타임아웃걸려있는 함수…
결국 모든 함수들을 믿지 못하게 되었고
직접 감시하는 로직을 만들기로
Camera Upload
Thread
MainThread
별도로 스레드를 만들어 사진을 업로드하고 있는데…
Camera Upload
Thread
MainThread
업로드 스레드는 메인에게 매 작업 과정마다 완료 시간을 알려주고
heartbeat
Camera Upload
Thread
MainThread
메인스레드가 일정 시간마다 마지막 완료 시간을 감시하다….
…
Camera Upload
Thread
MainThread
오래 걸리면 기존 스레드를 강제로 죽이고
새로운 스레드를 다시 만들어 작업을 다시 시작하도록 함
…
Camera Upload
Thread
heartbeat
이 방식을 지금까지도(1월말)
약 4개월 넘게 살아 있습니다…
느낀점
-샤오미 카메라… 저렴하고 좋은데 긱스럽게 사용하기엔 힘든듯?
자금이 있으면 DSLR에 gphoto2로 연결하는게 가장 일듯
-카메라+라즈베리 조합이 아니라 안드로이드 디바이스 하나로
만든적이 있지만 이 역시 실패…(이 애기는 다음 타임랩스 만들기 자료에서?!)
-라즈베리 파이는 대단하다?! (라즈1이 이런데 2는?!)
-찾으면 찾을 수록 더 좋거나 쉬운 도구나 방법들이 나온다.
설계 이전에 자료조사를 하는 시간도 중요…
-참 쓸모없는 걸 만들었지만 ifttt나 postman같은
서비스를 만나게 해준거에 의미를…
감사합니다.

Weitere ähnliche Inhalte

Was ist angesagt?

임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
devCAT Studio, NEXON
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
devCAT Studio, NEXON
 

Was ist angesagt? (20)

KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
 
Framer js a/s talk
Framer js a/s talkFramer js a/s talk
Framer js a/s talk
 
RPG Maker와 Ruby로 코딩 시작하기 Day 1
RPG Maker와 Ruby로 코딩 시작하기 Day 1RPG Maker와 Ruby로 코딩 시작하기 Day 1
RPG Maker와 Ruby로 코딩 시작하기 Day 1
 
게임 프로그래밍 패턴 8장
게임 프로그래밍 패턴 8장게임 프로그래밍 패턴 8장
게임 프로그래밍 패턴 8장
 
Django개발은 PyCharm에서
Django개발은 PyCharm에서Django개발은 PyCharm에서
Django개발은 PyCharm에서
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
 
Swimming Smith 개발기
Swimming Smith 개발기Swimming Smith 개발기
Swimming Smith 개발기
 
Cucugwh ppt
Cucugwh pptCucugwh ppt
Cucugwh ppt
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제
 
Vuejs를이용한서비스구축
Vuejs를이용한서비스구축Vuejs를이용한서비스구축
Vuejs를이용한서비스구축
 
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
 
Phpstorm remote xdebug setting
Phpstorm remote xdebug settingPhpstorm remote xdebug setting
Phpstorm remote xdebug setting
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
Docker registry swift_junojunho
Docker registry swift_junojunhoDocker registry swift_junojunho
Docker registry swift_junojunho
 
KGC 2007 소프트웨어 렌더러 개발
KGC 2007  소프트웨어 렌더러 개발KGC 2007  소프트웨어 렌더러 개발
KGC 2007 소프트웨어 렌더러 개발
 
모두의 클라우드 딥러닝
모두의 클라우드 딥러닝모두의 클라우드 딥러닝
모두의 클라우드 딥러닝
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
파이썬을 만난지 100일♥ 째
파이썬을 만난지 100일♥ 째파이썬을 만난지 100일♥ 째
파이썬을 만난지 100일♥ 째
 

Ähnlich wie 샤오미 카메라와 라즈베리파이를 이용해 하늘 사진을 찍어 sns에 올리는 봇을 만들어 보았다.

Ähnlich wie 샤오미 카메라와 라즈베리파이를 이용해 하늘 사진을 찍어 sns에 올리는 봇을 만들어 보았다. (20)

CCTV영상을 FFmpeg를 사용해서 Time Lapse로 만들어 보았다.
CCTV영상을 FFmpeg를 사용해서 Time Lapse로 만들어 보았다.CCTV영상을 FFmpeg를 사용해서 Time Lapse로 만들어 보았다.
CCTV영상을 FFmpeg를 사용해서 Time Lapse로 만들어 보았다.
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
 
웹 본격적으로 배우기 전 감 잡기 - 1
웹 본격적으로 배우기 전 감 잡기 - 1웹 본격적으로 배우기 전 감 잡기 - 1
웹 본격적으로 배우기 전 감 잡기 - 1
 
[스마트스터디]스마트스터디처럼 Django 쓰지 마세요
[스마트스터디]스마트스터디처럼 Django 쓰지 마세요[스마트스터디]스마트스터디처럼 Django 쓰지 마세요
[스마트스터디]스마트스터디처럼 Django 쓰지 마세요
 
Node.js in Flitto
Node.js in FlittoNode.js in Flitto
Node.js in Flitto
 
Do not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYDo not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDY
 
파이썬으로 할 수 있는 일 - 파이썬 기초 교육
파이썬으로 할 수 있는 일 - 파이썬 기초 교육파이썬으로 할 수 있는 일 - 파이썬 기초 교육
파이썬으로 할 수 있는 일 - 파이썬 기초 교육
 
Gulp 입문
Gulp 입문 Gulp 입문
Gulp 입문
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoul
 
Spring Boot 1
Spring Boot 1Spring Boot 1
Spring Boot 1
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
Django in Production
Django in ProductionDjango in Production
Django in Production
 
필요해서 하는 개발 자동화
필요해서 하는 개발 자동화필요해서 하는 개발 자동화
필요해서 하는 개발 자동화
 
구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
React principle
React principleReact principle
React principle
 
[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기
 

Mehr von flashscope

Mehr von flashscope (9)

Line bot api trial을 사용해 보았다.
Line bot api trial을 사용해 보았다.Line bot api trial을 사용해 보았다.
Line bot api trial을 사용해 보았다.
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기
 
유니티에서 MMD 사용해보기
유니티에서 MMD 사용해보기유니티에서 MMD 사용해보기
유니티에서 MMD 사용해보기
 
안드로이드 메테리얼 디자인 transition, cardview 맛보기
안드로이드 메테리얼 디자인 transition, cardview 맛보기안드로이드 메테리얼 디자인 transition, cardview 맛보기
안드로이드 메테리얼 디자인 transition, cardview 맛보기
 
Unity + Oculus Rift + LeapMotion 우주 체험 프로젝트 후기
Unity + Oculus Rift + LeapMotion 우주 체험 프로젝트 후기Unity + Oculus Rift + LeapMotion 우주 체험 프로젝트 후기
Unity + Oculus Rift + LeapMotion 우주 체험 프로젝트 후기
 
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
 
(번역)서버 미경험자가 소셜 게임을 통해 알게 된 서버에 대한 것
(번역)서버 미경험자가 소셜 게임을 통해 알게 된 서버에 대한 것(번역)서버 미경험자가 소셜 게임을 통해 알게 된 서버에 대한 것
(번역)서버 미경험자가 소셜 게임을 통해 알게 된 서버에 대한 것
 
Log4j
Log4jLog4j
Log4j
 
리눅스 환경에서 SonarQube 간단하게 사용해보기
리눅스 환경에서 SonarQube 간단하게 사용해보기리눅스 환경에서 SonarQube 간단하게 사용해보기
리눅스 환경에서 SonarQube 간단하게 사용해보기
 

샤오미 카메라와 라즈베리파이를 이용해 하늘 사진을 찍어 sns에 올리는 봇을 만들어 보았다.

  • 1. 샤오미 카메라와 라즈베리파이를 이용해 하늘 사진을 찍어 올리는 봇을 만들어 보았다. 죽지 않는 프로그램 만들기 정문철(flashscope) mail@limecolor.comTag: 라즈베리파이, 샤오미 카메라, 페이스북, 트위터, 봇, imgur, ifttt, postman
  • 2. -만들어 볼려고 생각하게 된 이유 강릉에서 관광업에 종사 하시게 될 분의 도움이 될 만한 것이 없나 생각하던중 강릉 자체에 컨텐츠가 많이 부족하다고 느낌 간단한 거라도 컨텐츠가 될 만한 것을 만들어 보고자 함
  • 3. -만들어 볼려고 생각하게 된 이유 강릉에서 관광업에 종사 하시게 될 분의 도움이 될 만한 것이 없나 생각하던중 강릉 자체에 컨텐츠가 많이 부족하다고 느낌 간단한 거라도 컨텐츠가 될 만한 것을 만들어 보고자 함 사실 다른 프로젝트에서 만들려다 실패하고 남은 장비로 제작 이유는… 재미있어 보여서?
  • 5. 사용한 카메라 샤오미 웹 캠을 알X익스프레스에서 $32.3에 무료배송으로 구입 도착하는데 26일 걸림… 현재는 한국 공식 수입사가 있음!
  • 7. 사용한 컴퓨터 카메라를 찍은 사진을 가공해서 업로드를 하는 장비로 라즈베리파이1 B 모델을 사용
  • 9. 샤오미 웹캠은 기본적으로 샤오미 앱을 통해 카메라를 조작하게 되어 있음
  • 10. 하지만 제품 스펙에도 적혀있는 RTSP방식으로 컴퓨터에서도 접속이 가능
  • 11. 인터넷 검색 결과 rtsp://[ip]:554/ch0_0.h264 로 접속이 가능하다고 하지만 실패… (테스트는 일반 동영상 플레이어) http://en.miui.com/thread-70205-1-1.html
  • 12. 샤오미 웹캠이 업데이트가 되면서 RTSP가 막혔다고함(아마도 보안 문제) 펌웨어 다운그레이드를 통해 해결 해야함 (다만 이번에 산 모델은 750TVL모델로 스샷의 펌웨어로는 불가능 하였던걸로 기억… 여러 포럼의 펌웨어들을 사용한 끝에 겨우 동작 성공)
  • 13. 실시간 스트리밍(RTSP)이 가능하므로 실시간 하늘 영상의 전송도 가능 하지만 직접 개인집으로 사람들이 접속하게 되는건 좀… 동영상을 스트리밍해주는 wowza hosting서비스도 있지만 이런것을 위해 유지비가 들어가기는 더욱 싫었음 (현재 유지비는 usb충전기 2개(500ma, 1000ma)의 전기) 지금 적으면서 떠올랐지만 라즈베리에서 UStream으로 서비스하는것도 좋을듯 다른 비슷한 걸 만들게 되거나 업데이트시 검토를…
  • 14. 샤오미 카메라가 방수가 안되는것 같아 나무와 아크릴로 케이스를 만들어 집 밖에 설치후 wifi로 연결
  • 15. RTSP로부터 사진으로 캡쳐해서 여러 사진을 모아서 gif이미지로 만든 다음 sns에 업로드 하기로 정함
  • 16. RTSP로부터 사진을 가져오기 위해 FFMPEG를 사용하기로 윈도우에서 개발할 때에는 이미 빌드된 파일을 다운받아 사용하였지만 라즈베리 파이에서는 직접 컴파일 해서 사용함 업로드 하는 프로그램으로는 라즈베리에서 사용 가능한 자바를 이용해서 개발 하기로 단 FFMPEG를 직접 포함하지 않고 외부에서 호출 하기로 함 이미지들을 gif로 만들기 위해서는 ImageMagick을 사용
  • 18. "ffmpeg -i rtsp://" + cameraIp + "/ch0_0.h264 -f image2 -vframes 1 " + fileName; rtsp로부터 이미지 캡쳐
  • 19. String gifQuery = "convert -delay 25 -loop 0 -type Palette “; for (int i = 0; i < this.m_PhotoList.size(); i++) { gifQuery = gifQuery + (String)this.m_PhotoList.get(i) + " "; } fileName = getDate() + ".gif"; gifQuery = gifQuery + fileName; cmdExcute(gifQuery); 캡쳐한 이미지 묶음을 gif로 만들기
  • 20. gif이미지를 만들었지만 트위터는 gif를 지원하지만 페이스북 페이지에서는 gif를 지원하지 않음 페이스북에는 대표 이미지 하나를 올리고 링크를 통해 imgur에서 gif를 볼수 있도록 유도
  • 21. imgur은 자체 api를 제공 https://api.imgur.com/
  • 22. HttpRequest request = HttpRequest.post("https://api.imgur.com/3/image.json"); request.header("Authorization", "Client-ID BLABLABLA"); request.part("image", file); if (request.ok()) { String result = request.body(); try { JSONObject jsonObject = new JSONObject(result); JSONObject dataObject = jsonObject.getJSONObject("data"); return dataObject.getString("link"); } catch (JSONException e) { e.printStackTrace(); } } 간단한 post전송으로 쉽게 이미지 업로드가 가능
  • 23. 이제 sns에 업로드를 위해 페이스북과 트위터의 SDK자료를 보고 있는데 학습하기에 시간이 많이 걸릴것으로 판단… (한사람(봇)을 위한 서비스를 만들고 있는데 기본 문서의 설명은 다수를 위한 서비스를 위한 설명이니 약간 핀트가 안 맞는 감도…)
  • 24. ifttt 서비스를 사용하면 페이스북과 트위터에 동시에 포스팅이 가능 https://ifttt.com
  • 25. 다만 ifttt에게 사진을 전송해야 되는데 마땅한 방법이 안보여서 Email로 전송하기로 결정
  • 26. 예전에 Gmail smtp를 이용해 이메일 리포팅을 한 경험이 있는데 코드 유실…과 당시 번거로웠던 기억이 있어 이번에는 이메일 전송 서비스를 이용하기로
  • 27. https://www.getpostman.com/ postman이란 서비스로 간단한 api호출로 이메일 전송이 가능 전송 가능 메일수에 제한이 있지만 무료 플랜 제공
  • 28.
  • 29. 덤으로 parse.com에도 사진 촬영 기록을 저장하고 있습니다. 나중에 타임라인이나 과거 달력으로 강릉 날씨를 보는 서비스를 만들어 볼 계획이지만 부족한 웹 프론트 기술로 실행에는 옮기지 못하고 있습니다.
  • 31. ffmpeg나 imagemagick을 호출 할때 무식하게 커맨드를 넘기는 방식이라 윈도우 개발 -> 라즈베리에서 실행으로 약간 달라지는 부분이나 무선wifi에서 인터넷이 끊기고 재시작해야지만 다시 잡히는 문제도 발생하고(유선으로 교체) 또 라즈베리 파이의 성능 문제로 한장 촬영후 업로드하는 시간에 여유를 둬서 3분에 한장씩 30분마다 10장을 gif로 만들어서 업로드하는 등의 시행 착오도 많았지만 기본적으로 잘 동작하였지만… 한 한달 정도 후에 동작이 정지됨을 확인
  • 32. ssh로 접속해서 확인해보니 함수가 블록되어서 멈춰있는 상태 하지만 해당 함수는 타임아웃걸려있는 함수… 결국 모든 함수들을 믿지 못하게 되었고 직접 감시하는 로직을 만들기로
  • 33. Camera Upload Thread MainThread 별도로 스레드를 만들어 사진을 업로드하고 있는데…
  • 34. Camera Upload Thread MainThread 업로드 스레드는 메인에게 매 작업 과정마다 완료 시간을 알려주고 heartbeat
  • 35. Camera Upload Thread MainThread 메인스레드가 일정 시간마다 마지막 완료 시간을 감시하다…. …
  • 36. Camera Upload Thread MainThread 오래 걸리면 기존 스레드를 강제로 죽이고 새로운 스레드를 다시 만들어 작업을 다시 시작하도록 함 … Camera Upload Thread heartbeat
  • 37. 이 방식을 지금까지도(1월말) 약 4개월 넘게 살아 있습니다…
  • 38. 느낀점 -샤오미 카메라… 저렴하고 좋은데 긱스럽게 사용하기엔 힘든듯? 자금이 있으면 DSLR에 gphoto2로 연결하는게 가장 일듯 -카메라+라즈베리 조합이 아니라 안드로이드 디바이스 하나로 만든적이 있지만 이 역시 실패…(이 애기는 다음 타임랩스 만들기 자료에서?!) -라즈베리 파이는 대단하다?! (라즈1이 이런데 2는?!) -찾으면 찾을 수록 더 좋거나 쉬운 도구나 방법들이 나온다. 설계 이전에 자료조사를 하는 시간도 중요… -참 쓸모없는 걸 만들었지만 ifttt나 postman같은 서비스를 만나게 해준거에 의미를…