[Processing] openCV를 활용한 트래킹 영역 설정 및 왜곡 보정


위쪽은 일단 포토샵으로 만든거긴한데 레고패널 위에 양 모서리에 흰색 동그라미 하나씩 두면 웹캠 영상 중에 그 영역 안의 부분만 캡쳐해서 쓰는 코드 작성.

일단 처리 순서는 뭐가 더 효율적인지는 잘 모르겠지만 내가 만든 방법은

1) openCV로 받은 이미지 중 흰색 부분을 다 contour 추출 

2) contour들을 bounding box 씌워주고 중심점 추출 

3) 그 중심점들과 전체화면의 각 모서리들간의 거리를 구해서 4개의 점에서 젤 가까운 상하좌우 obeject를 찾는다

4) 그 4개점을 연결해주는 사각형안에 있는 부분만 Warpperspective 로 다시 픽셀 재배열 하여 우측 타겟사각형 안에 구겨넣음 


이렇게 해두면 나중에 웹캠 위치나 각도 보정도 되고, 프로젝션이랑 카메라인풋이랑 싱크시키기도 좀더 수월해지고, 

아래 판의 크기에 따라서 프로젝션되는 영역 자체도 작고 커지는 scalablity가 생겨서 다른 데모만들떄 좀 유용하지 않을까 기대중


맥에 기본 카메라인 facetime 말고 외부 웹캠으로 불러오게하는 방법

http://www.codingcolor.com/2014/01/21/processing-2-1-webcam-basics/


오브젝트 거리 구하는것도 좀더 정교한 방식도 있다

http://www.pyimagesearch.com/2016/04/04/measuring-distance-between-objects-in-an-image-with-opencv/


WarpPerspecvie 샘플 (여기서는 detection된 contour 네개중에 몇번째거만 오른쪽으로 띄우라는 예제이므로 변형해서 사용)

https://github.com/atduskgreg/opencv-processing#warpperspective-in-progress


Contour간의 위계도 지정하기

http://docs.opencv.org/trunk/d9/d8b/tutorial_py_contours_hierarchy.html


contour 간의 sorting 순서 

http://www.pyimagesearch.com/2015/04/20/sorting-contours-using-python-and-opencv/




저작자 표시 비영리 변경 금지
신고

[Processing] OpenCV를 활용한 Shape Detection

급히 정리하는 opencv

프로세싱에서 Import library 해보면  openCV가 두개가 뜬다.


위에 openCV는 좀 예전 버젼이고 http://ubaa.net/shared/processing/opencv/

아래 openCV for processing이 비교적 최근 버젼이며 예제도 더 많다.  (레퍼런스 페이지 http://atduskgreg.github.io/opencv-processing/reference/gab/opencv/OpenCV.html  Github https://github.com/atduskgreg/opencv-processing) 

그리고 이 둘다 openCV for java로 이루어져있기때문에 포함되어있지않은  예제나 설명부분은 java 레퍼런스 페이지에 가면 좀더 응용할여지를 찾아볼수있는듯. 

물론 openCV 오리지널 레퍼런스 페이지로 가게되면 C++기반이긴하지만 원래 어떤 기능들이 더 지원가능한지도 가늠하는데 도움이 되고 있음 (그래도 C++은 몰라서 나에겐 해독이 잘안되는편..)

두가지가 지원 버젼 및 윈도우용 64비트 문제가 뒤엉켜있는데 환경에 맞게 잘 선택해야할듯.

특히 2에서 3로 바뀌면서 setup()에서 캔버스 사이즈를 변수로 받아오는 기능이 없어져서 오로지 픽스된 숫자로만 캔버스 사이즈 기능을 저장할수있게 되었기 떄문에 기존 예제들 중에 플렉서블하게 만들어둔것들은 고정 숫자로 바꿔줘야함. 그래서 지금 테스트는 주로 2로 하는중~



아래 세가지 소스를 조합해서 실시간 비디오로 shape detection + Identification + motion detection까지 되는 데모를 만들었다

지금은 그냥 일반 카메라로 블랙배경 + 흰 물체로만 하고 손은.. 까만 장갑끼고 ㅋㅋㅋ 

요 다음 단계로는 적외선 카메라로 흰색으로 반사된 오브젝트만 트랙킹하는걸로 바꿀거라 손은 사라짐



opencv for processing 예제 중에 find countors + polygon vertex 그려주는 예제 

https://github.com/atduskgreg/opencv-processing/blob/master/examples/FindContours/FindContours.pde


트랙킹된 오브젝트 contour를 둘러싸는 bounding box 만들기 

http://docs.opencv.org/2.4/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html


Daniel Shiffman의 페이스 디텍션되는 숫자에 boudning box만들어주고 consistent한 ID부여하기 코드

http://shiffman.net/general/2011/04/26/opencv-matching-faces-over-time/


이 다음에는 각 shape들이 사전에 등록된 id와 매칭이 되게 하는 template matching 기능과 결합할 예정 

http://www.prodigyproductionsllc.com/articles/programming/template-matching-with-opencv-and-c/




저작자 표시 비영리 변경 금지
신고

[Processing] Computer vision for processing (Daniel Shiffman)

명불허전 다니엘 쉬프만 (http://shiffman.net/) 님의 컴퓨터 비전 기초 강의

유투브 재생목록 클릭 

11.4: Introduction to Computer Vision

11.5: Computer Vision: Color Tracking

11.6: Computer Vision: Motion Detection

11.7: Computer Vision: Blob Detection

11.8: Computer Vision: Improved Blob Detection

11.9: Computer Vision: Blob Tracking with Persistence

11.10: Computer Vision: Adding Lifespan to Blobs


졸업 프로젝트에서 뷰포리아 마커 트랙킹 쓰려했는데 환경도 너무 어둡고 마커위에 프로젝션이 되서 색상 트랙킹이 잘안되서 OpenCV로 갈아탈까 생각중

컴퓨터비전은 정말 또 다른 어마무시한 벽이어서 시작할 엄두가 안났는데 그래도 쉬선생님이 설명해주면 그나마 조금은 안심이 된다

요 강의 목록에서는 간단하게 컬러트랙킹, 이전프레임과의 픽셀 차이값을 비교한 모션 디텍션, 그리고 Bulb 여러 점들을 디텍션하는 세가지 주제로 이루어져있다. 

뒤로갈수록 슨생님도 헷갈리고 나도 헷갈리고..........

shape detection이랑 bult detection이 혼합된 플로우를 만들어야되는데 과연 내가 할수있는 일인걸까

이거 다음엔 키넥트 강좌인데 일단은 키넥트는 빼기로 했다.

아무튼 또 굿럭



저작자 표시 비영리 변경 금지
신고

Openweather API


1. openweathermap API에서 현재 날씨 불러오기


도시 이름으로 불러오기

도시 ID로 불러오기

위치값으로 불러오기
http://api.openweathermap.org/data/2.5/weather?lat=36.321388&lon=127.419724

우편주소로 불러오기
http://api.openweathermap.org/data/2.5/weather?zip=305701,kr

디폴트 모드는 javascript를 위한 JSON이므로 주소 뒤에 xml로 불러오는 부분 추가
&mode=xml

화씨를 섭씨로 바꾸는 부분
&units=metric


대전 현재 날씨


+ 160428  추가
 APIkey 를 별도로 신청해서 기입해야하는 방식으로 바뀜
http://openweathermap.org/appid#get
가입후 무료 API key 신청 후 할당받은 키를 코드 맨 뒤에  &APPID=12345838 이런 식으로 추가해주면 됨 

2. 날씨 예보

오늘 예보 : weather부분을 forecast/daily 로 교체

5일 예보 : weather부분을 forecast 로 교체

3. Parameters:
  • city
    • city.id City ID
    • city.name City name
    • city.coord
      • city.coord.lon City geo location, longitude
      • city.coord.lat City geo location, latitude
    • city.country Country code (GB, JP etc.)
    • city.sun
      • city.sun.rise Sunrise time
      • city.sun.set Sunset time
  • temperature
    • temperature.value Temperature
    • temperature.min Minimum temperature at the moment of calculation. This is deviation from 'temp' that is possible for large cities and megalopolises geographically expanded (use these parameter optionally).
    • temperature.max Maximum temperature at the moment of calculation. This is deviation from 'temp' that is possible for large cities and megalopolises geographically expanded (use these parameter optionally).
    • temperature.unit Unit of measurements. Possilbe valure is Celsius, Kelvin, Fahrenheit.
  • humidity
    • humidity.value Humidity value
    • humidity.unit %
  • pressure
    • pressure.value Pressure value
    • pressure.unit hPa
  • wind
    • wind.speed
    • wind.direction
      • wind.direction.value Wind direction, degrees (meteorological)
      • wind.direction.code Code of the wind direction. Possilbe value is WSW, N, S etc.
      • wind.direction.name Full name of the wind direction.
  • clouds
    • clouds.value Cloudiness
    • clouds.name Name of the cloudiness
  • visibility
    • visibility.value Visibility, meter
  • precipitation
    • precipitation.value Precipitation, mm
    • precipitation.mode Possible values are 'no", name of weather phenomena as 'rain', 'snow'
  • weather
    • weather.number Weather condition id
    • weather.value Weather condition name
    • weather.icon Weather icon id
  • lastupdate
    • lastupdate.value Last time when data was updated


4. 주요 도시

Daegu
1835329




Seoul
1835848

Daejeon
1835235


저작자 표시 비영리 변경 금지
신고

2학기 기초 프로그래밍 수업 종강



CT학생 중 비 이공계생들을 대상으로하는 무학점 수업인 기초 프로그래밍 이번 학기 수업이 오늘 끝이 났다. 이제 앞으로는 아무도 이렇게 친절하게 알려주지 않을 것이라는 사실이 너무 무섭고 들판에 내던져진 기분이다.

아직까지 제대로 할줄 아는게 없다고만 생각했는데 오늘 배운걸 정리하려다 보니까 과거를 거슬러가서 나의 프로그래밍 도전의 역사를 뒤돌아보게 되었다. (원래는 방학때 1학기 결과물과 과정들을 프로젝트 별로 블로그에 정리 하려했으나........)


아래는 생각나는대로 써본 프로그래밍 삽질과 도전의 역사


- 대학교 1학년. 프로세싱 첫 만남. 점찍고 색칠하는것 외에는 이걸로 뭘 할수 있는건지 왜 하는건지 아무것도 이해하지 못함.

- 대학교 3학년. 플래시 사이트를 만들어야하는데 액션스크립트를 다룰줄 몰라서 그냥 손 노가다로 인터랙션을 일일히 연결함

- 회사에서 UX디자인을 해야하니까 전반적인 IT기술에 대해 공부할 수 밖에 없고, 개발자와 함께 일하고 그들의 사고 방식을 이해하기 위해 노력해야했음

- 오픈컬리지에서 Xcode 2-3번 따라 해보기. 코딩에 대한 이해는 없는 상태이고 UI적인 경험 정도

- 대학원 입학 직전, Code.org에서 유치원 및 초딩을 위한 소프트웨어 코스를 간단히 들어봄. 언어는 모르지만 함수, 조건, 반복문 등의 개념과 유용성에 대해서 처음으로 이해함. 왠지 이걸 잘 다루게되면 디자이너들이 하는 삽질들이 언젠가 좀 줄어들지 않을까하는 희망같은 것을 보았음.

- 대학원 입학 진짜 바로 직전, 5일짜리 워크샵에 참여해서 Arduino를 처음 만져봄. 와 LED에 불이 켜진다..

- 혼자 집에서 프로세싱 책 사서 1/3 쯤 따라해봄. 이미지 드로잉 & 움직임 정도.

- 입학해서 기초프로그래밍 수업에서 Java를 통해 주요 구문들과 객제지향..함수..클래스를 접하지만 벽을 느낌.. 혼신의 힘을 다해 쉽게 설명해주는 익범&진우 스승 감사...

- 직접 코드를 입력하지 않고 노드를 연결하는 방식으로 프로그래밍하는 Max/msp를 배워서 완결성있게 동작하는 무언가를 첨으로 완성해봄 (아두이노, 웹캠 연결)

- 이래서는 안되겠다 싶어 방학때 다시 프로세싱 책 사서 1/2쯤 따라해보다가 함수와 알고리즘에서 또 막힘..(역시 난 안돼)

- 방학 때 프로세싱 위주로 작업하는 우리 랩 사람들과 함께 유니티 3D를 스터디 하기 시작했으나 2개 예제 정도 같이 해보고 중단된 상태. 

- 방학 때 동아리 프리스텝에서 개인 프로젝트로 제안한 책보게하는 아이디어제품을 아두이노, makey makey, max/msp로 인터랙티브 프로토타이핑까지 해보고 또 홀딩

- 2학기가 시작되고 1학기때 들었던 기초 프로그래밍 수업을 한번더 재수강(?) 다시 들으니 90프로 정도 잊혀졌다. 반복하면 안하는것보다는 낫겟지........ 지난학기보다는 정올 사이트에서 예제를 직접 풀어보는 방식을 많이 도입. 처음 할때보다는 그래도 어떻게 해야겠다는 구조는 조금 잡히는 편인데 여전히 문법이 익숙하지 않음

- 산디과 학부 청강하면서 아두이노의 기초와 전자공학의 아주아주 기초를 다시 시작함. 납땜은 할수 있게 됐지만 어쨌든 복습을 잘안해서 이해도는 20프로 정도.......

- 산디과에서 프로세싱 진도도 나가고 있지만 수업시간에 대학원수업 논문 제출, 행사, 등등의 핑계로 과제 제출도 못하고 수업도 제대로 못들어서 이제 점점 포기 상태..

- 3D인터랙션에서 하드웨어가 들어가야해서 납땜도 엄청 많이하고 제품 구성에 대한 고민과 연습 많이 하기 시작, 시간은 여전히 오래 걸리지만 실험에 필요한 간단한 기능은 스스로 구현할 수 있게 됐다 

- 3D인터랙션에서 AR, VR의 구현 원리, 알고리즘에 대해서 이해가 필요하게 됐는데 (내가 직접 만들건 아니지만 기획, 인터랙션 디자인, 시나리오 작성, 논문 작성 등 모든 단계에서 기술적인 이슈가 항상 크게 좌우하기 때문에 꼭 잘 알아야한다) 유치한 질문을 할때마다 기초프로그래밍 스승님이신 전선생이 수업때처럼 원리를 잘 설명해줘서 너무 좋드아.. 


향후 계획
- 이번 학기 남은 한달간 정도는 코딩보다는 디자인과 실험 논문 작성 영상 제작 등에 최선을 다해야해서 더 연습할 시간은 없을것 같고 연말에 교수님이 귀국하시기전에 프로세싱 책 나머지 부분은 꼭 마스터를 해서 기존에 연구실에서 하던 연구를 응용하는 무언가를 하나 직접 만들어보는 것이 목표 ....이고 유니티로 넘어가고자 한다. 유니티는 지금은 3D게임제작툴로 인기가 많긴 하지만 2D게임도 만들 수 있고 플랫폼에 상관없이 실행가능한 모바일용 앱을 만들 수도 있다고 한다. 좀 더 응용하면 다른 센서나 HMD등과도 연결 가능. 꼭 연구에 직접적인 영향이 없더라도 앞으로 무얼하든 프로토타이핑 툴로써는 유용하게 쓸수 있을것 같다. Java에서 C++로 언어가 바뀌는게 가장 크리티컬하지만 그래도 눈으로 보이는 결과물을 확인하면서 만들어갈수있다는 장점이 있다고 한다.
- 방학동안 스킬을 최대한 습득해야 그 능력 안에서 실현 가능한 연구 범위를 설정할 수 있을것 같다. 물론 연구 주제가 확정이 되면 그에 맞는 프로토타이핑 제작을 위한 것들은 다시 배워나가야 한다. 그러는 일년 사이 또 좋은 프로토타이핑 툴들이 많이 나오기야 하겠지만..
여러모로 노력해봐도 딱히 내 사고 방식이 개발에 전혀 어울리지 않고 소질도 없고 막 즐겁지도 않다는것을 깨달아 가고 있고, 이 삽질 시간들을 모으면 괜찮은 디자인 프로젝트를 여러개 완성할 수 있었을텐데 하는마음도 들긴 하지만.. 일단 여기에 온 이상 잘 안되고 잘 모르더라도 무식하게 100번 200번이라도 반복해서 익숙해져보자는게 지금의 전략이다. ㅠ ㅠ (그래야 졸업(및 탈출)을 할 수 있기도 하고...)

내가 이렇게 바닥을 기면서 흙 주워먹고 있는 동안 공대 출신 아이들은 가상현실이다 머신러닝이다 하면서 우주를 날라다니고 있어서 의기소침하기도하고
연구실 컴에서 이런 유치한거 만들고있으면 엄청 쪽팔리기도 하지만..
배움에 도전할 수 있는 기회가 있다는 그 자체에 감사하면서
뻔뻔하게 잘 버텨보아야겠다








저작자 표시 비영리 변경 금지
신고

'스터디' 카테고리의 다른 글

2학기 기초 프로그래밍 수업 종강  (0) 2015.11.18
[prestep] R studio 웹크롤링 맛보기  (0) 2015.11.16