SlideShare a Scribd company logo
1 of 49
드론 및 인공위성 영상을 이용한
태양광발전소 입지분석
최재현
INTRODUCTION ► 네오위즈게임즈
► 씨웨이브소프트
► 해줌
► 클라이언트 게임 프로그래머(8년)
► C++, C#(UNITY3D)
► 웹개발(2년)
► Python(django), html, css, javascript
발표자 소개
INTRO
AGENDA
► 우리 회사에서 하는 일?
► 음영 분석 접근 방법
► 프로토 타이핑
► PANDA3D를 이용한 인공위성 및 드론 이미지 음영 분석
► UNITY3D를 이용한 음영 데이터 추출
► 데이터 검증
► PANDA3D와 UNITY3D 비교
목차
INTRO
ABOUT
COMPANY
► 데이터를 기반으로 기상예측 및 태양광 발전량 예측
► 파이콘 2017
► 구름이 하늘의 일이라면: Python과 TensorFlow를 이용한 기상예측
► 태양광 발전소 이상 감지
► 태양광 발전소 수익성 예측
우리 회사에서 하는 일?
INTRO
음영이 없는 환경의
발전량 예측
기존
실제 환경은
여러가지 음영이 발
생
나무, 산, 주변건물
문제
음영 분석으로
발전량 예측 고도화
해결
SHADOW
ANALYSIS
음영 분석 접근 방법
드론 및 인공위성영상에서 Point Cloud 또는 Height Map 생성01
Point Cloud 또는 Height Map에서 3D Mesh 생성, 렌더링02
시뮬레이션된 태양의 위치를 바탕으로 계절별 시간대별 음영 분석03
INTRO
PROTOTYPING
POINT
CLOUD
► 3차원 좌표를 가지고 있는 점들
로 불규칙하게 구성된 자료
► A point cloud image of a torus
드론영상에서 Point cloud, mesh 생
성
PROTOTYPING
PIX4D
► 드론사진으로 3d 데이터 생
성
► https://pix4d.com
드론영상에서 Point cloud, mesh 생
성
PROTOTYPING
PIX4D
드론영상에서 Point cloud, mesh 생
성
PROTOTYPING
경기도 안성 103장의 이미지 사진을 찍은 위치 포인트
PIX4D
드론영상에서 Point cloud, mesh 생
성
PROTOTYPING
► Point Cloud 생성
PIX4D
► 3D mesh 생성
드론영상에서 Point cloud, mesh 생
성
PROTOTYPING
UNITY 3D
► 멀티플랫폼 3d 게임 엔진
► https://unity3d.com/kr
3D MESH 렌더링
PROTOTYPING
UNITY 3D
PROTOTYPING
3D MESH 렌더링
UNITY 3D
► Light 세팅
3D MESH 렌더링
PROTOTYPING
IMPLEMENTATION WITH PYTHON
LIBRARIES파이썬 라이브러리를 사용하여 구현
COMPUTER
VISION
LIBRARIES
► Automatic 3D Reconstruction from Multi-Date Satellite Images
► https://gfacciol.github.io/multi-date-stereo/
► https://github.com/MISS3D/s2p
► 위성 이미지 3d 합성
► OpenDroneMap
► https://github.com/OpenDroneMap/OpenDroneMap/
► 드론 이미지 3d 합성
드론 및 인공위성영상 합성
IMPLEMENTATION WITH PYTHON
LIBRARIES
HEIGHT MAP
지형의 높이를 그레이스케일로
표현한 이미지
► s2p 라이브러리를 사용
► 위성 영상에서 height map 추출
드론 및 인공위성영상 합성
IMPLEMENTATION WITH PYTHON
LIBRARIES
HEIGHT MAP Pleiades tri-stereo + S2P (Melbourne)
드론 및 인공위성영상 합성
IMPLEMENTATION WITH PYTHON
LIBRARIES
위성사진 Height Map
HEIGHT MAP Landsat 8 + OpenCV StereoBM (Berlin)
드론 및 인공위성영상 합성
IMPLEMENTATION WITH PYTHON
LIBRARIES
Height Map 위성영상 1 위성영상 2
HEIGHT MAP Sentinel + OpenCV
드론 및 인공위성영상 합성
IMPLEMENTATION WITH PYTHON
LIBRARIES
원본영상 해상도 4배 개선 영상 Height Map
GRAPHIC
LIBRARIES
Pygame
► https://www.pygame.org/
Panda3d
► https://www.panda3d.org/
Pyglet
► https://bitbucket.org/pyglet/pyglet/wiki/Home
Renpy
► https://www.renpy.org/
Blender
► https://www.blender.org/
3D MESH 렌더링
IMPLEMENTATION WITH PYTHON
LIBRARIES
PANDA3D
Panda3d
► Python 및 c++ 게임엔진
► 디즈니에서 개발
► 2002년 출시
► 디즈니와 카네기멜론대학에서 공동 관리
3D MESH 렌더링
IMPLEMENTATION WITH PYTHON
LIBRARIES
PANDA3D
3D MESH 렌더링
IMPLEMENTATION WITH PYTHON
LIBRARIES
PANDA3D
► Height map 지형 생성을 위한 클래스
- HeightfiledTesselator
- GeoMipTerrain
3D MESH 렌더링
IMPLEMENTATION WITH PYTHON
LIBRARIES
PANDA3D
3D MESH 렌더링
IMPLEMENTATION WITH PYTHON
LIBRARIES
► Lights
► Directional Lights
► Spotlights
► Point Lights
► Ambient Lights
PANDA3D
► Directional Light 세팅 시 주의할 점
► 기본 설정 시 그림자가 생기지 않을 수 있음
3D MESH 렌더링
IMPLEMENTATION WITH PYTHON
LIBRARIES
PANDA3D
► DirectionalLight 세팅 시 주의할 점
► showFrustum() 함수로 확인
3D MESH 렌더링
IMPLEMENTATION WITH PYTHON
LIBRARIES
PANDA3D
► DirectionalLight 세팅 시 주의할 점
► setFilmSize(width, height)
► setNearFar(nearDistance, farDistance)
3D MESH 렌더링
IMPLEMENTATION WITH PYTHON
LIBRARIES
PANDA3D
► .fbx 파일 load
► Convert to .egg
3D MESH 렌더링
IMPLEMENTATION WITH PYTHON
LIBRARIES
AZIMUTH
AND
ALTITUDE
► 태양의 방위각
► 북점(또는 남점)에서 시계 방향으로 지평선을 따라
천체를 지나는 수직권까지 측정한 각도로 0°~ 360°로 표시한다.
► sin 𝛼 =
cos 𝛿×sin 𝑡
cos ℎ
► 태양의 고도
► 지평면에서 수직권을 따라 천체까지 잰 각을 말하며 -90°~90°의 값을 갖는다
► sinℎ = sin 𝛿 × sin 𝜙 + cos𝛿 × cos𝜙 × cos𝑡
► (𝛿= 적위, 𝜙= 위도, 𝑡 = 시간, ℎ = 태양 고도)
태양 시뮬레이션
IMPLEMENTATION WITH PYTHON
LIBRARIES
AZIMUTH
AND
ALTITUDE
► 태양의 방위각 계산
태양 시뮬레이션
IMPLEMENTATION WITH PYTHON
LIBRARIES
AZIMUTH
AND
ALTITUDE
► 태양의 고도 계산
태양 시뮬레이션
IMPLEMENTATION WITH PYTHON
LIBRARIES
PANDA3D
음영 시뮬레이션
► Light rotation
► setHpr(Yaw, Pitch, Roll)
IMPLEMENTATION WITH PYTHON
LIBRARIES
PANDA3D
음영 시뮬레이션
IMPLEMENTATION WITH PYTHON
LIBRARIES
2017-01-01 10:00 2017-01-01 12:00
PANDA3D
음영 시뮬레이션
IMPLEMENTATION WITH PYTHON
LIBRARIES
16시
2017-01-01 14:00 2017-01-01 16:00
PANDA3D
음영 시뮬레이션
IMPLEMENTATION WITH PYTHON
LIBRARIES
2017-01-01 16:00
SUN PATH SIMULATION
음영 판단 방법
그림자가 생기는 원리 음영 판단 방법
DATA EXTRACTION AND
COMPUTATION
MODELING
베란다 태양광 예시
DATA EXTRACTION AND
COMPUTATION
SOLAR
PANEL
베란다 태양광 예시
► 태양광 패널은 6*10개의 셀
로 구성
► 정밀도를 높이기 위해 *3,
총 540개의 포인트 설정
(한화 큐셀 Q.PEAK-G4.1)
DATA EXTRACTION AND
COMPUTATION
SIMULATION
베란다 태양광 예시
DATA EXTRACTION AND
COMPUTATION
DATA EXTRACTION ► 가상으로 설치된 태양광 모듈에 대해 다음과 Boolean array를 만듦
► 0: 빛이 도달 함
► 1: 빛이 도달 하지 못함
베란다 태양광 예시
DATA EXTRACTION AND
COMPUTATION
2017-03-23 16:00:00 2017-03-23 17:00:00 2017-03-23 18:00:00
DATA VALIDATION데이터 검증
MODELING
► 데이터 제공
► 도봉구청 협조
► 공간정보 오픈플랫폼 지도서비스
지도를 바탕으로 모델링
► http://map.vworld.kr/
벽면 태양광 예시
DATA VALIDATION
SIMULATION
벽면 태양광 예시
DATA VALIDATION
2017-12-13 14:00 2017-12-13 16:00
RESULT
벽면 태양광 예시
DATA VALIDATION
16
12
8
4
0
발전량
[kWh]
시간7 8 9 10 11 12 13 14 15 16 17 18
2016년 03월 01일
실측발전량 음영 보정 후 음영 보정 전
16
12
8
4
0
발전량
[kWh]
시간7 8 9 10 11 12 13 14 15 16 17 18
2016년 02월 26일
실측발전량 음영 보정 후 음영 보정 전
RESULT
벽면 태양광 예시
DATA VALIDATION
2000
1500
1000
0
발전량
[kWh]
월01 03 04 05 06 07 08 09 10
월별발전량(2014~2016평균)
02 11 12
500
실측발전량 예측 발전량 (음영손실 보정 전) 예측 발전량 (음영손실 보정 후)
RESULT
벽면 태양광 예시
DATA VALIDATION
12
9
6
0
NMAE(%)
월01 03 04 05 06 07 08 09 10
월별NMAE(2014~2016평균)
02 11 12
3
15
음영손실 보정 전 음영손실 보정
후
CONCLUSIO
N
► 장점
► Panda3d의 경우 예제와 문서화가 잘 되어 있어 쉽게 시작 할 수가 있음
► 간단한 코드로, 모델, 애니메이션, 지형, 조명 등을 바로 화면에 렌더링 할 수 있음
► 다른 엔진에 있는 기능들은 대부분 제공.
► 단점
► 유니티와 비교 했을 경우, GUI 기반이 아니기 때문에 사용성에서 부족할 수 있음
► 사용하는 개발자가 적음
► 큰 프로젝트에는 유니티를 사용 하는 것이 훨씬 효율 적일 수도 있다.
► 간단히 3d 모델링을 출력하는 경우나 프로토타이핑의 경우에 panda3d로 시작 해도 좋을 것
같음
마지막으로..
THANK YOU!
최재현
jh.choi@haezoom.com
www.haezoom.com
story.haezoom.com
디자인: 박수진

More Related Content

Similar to [pycon korea 2018] 드론 및 인공위성 영상을 이용한 태양광발전소 입지분석

시스템종합설계_R&D_최종발표자료.pptx
시스템종합설계_R&D_최종발표자료.pptx시스템종합설계_R&D_최종발표자료.pptx
시스템종합설계_R&D_최종발표자료.pptx
ssuserfb6a2f
 
NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들
Jubok Kim
 
시스템종합설계_R&D_최종발표자료.pptx
시스템종합설계_R&D_최종발표자료.pptx시스템종합설계_R&D_최종발표자료.pptx
시스템종합설계_R&D_최종발표자료.pptx
ssuserfb6a2f
 
Detecting fake jpeg images
Detecting fake jpeg imagesDetecting fake jpeg images
Detecting fake jpeg images
NAVER Engineering
 
June report in korean
June report in koreanJune report in korean
June report in korean
nao takatoshi
 
Wpf3 D 기초부터 활용까지
Wpf3 D 기초부터 활용까지Wpf3 D 기초부터 활용까지
Wpf3 D 기초부터 활용까지
guestf0843c
 
July report in korean
July report in koreanJuly report in korean
July report in korean
nao takatoshi
 
Kgc make stereo game on pc
Kgc make stereo game on pcKgc make stereo game on pc
Kgc make stereo game on pc
ozlael ozlael
 

Similar to [pycon korea 2018] 드론 및 인공위성 영상을 이용한 태양광발전소 입지분석 (20)

시스템종합설계_R&D_최종발표자료.pptx
시스템종합설계_R&D_최종발표자료.pptx시스템종합설계_R&D_최종발표자료.pptx
시스템종합설계_R&D_최종발표자료.pptx
 
NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들
 
시스템종합설계_R&D_최종발표자료.pptx
시스템종합설계_R&D_최종발표자료.pptx시스템종합설계_R&D_최종발표자료.pptx
시스템종합설계_R&D_최종발표자료.pptx
 
딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기딥뉴럴넷 클러스터링 실패기
딥뉴럴넷 클러스터링 실패기
 
Detecting fake jpeg images
Detecting fake jpeg imagesDetecting fake jpeg images
Detecting fake jpeg images
 
June report in korean
June report in koreanJune report in korean
June report in korean
 
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
 
[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가
[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가
[NDC2016] 신경망은컨텐츠자동생성의꿈을꾸는가
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
공간증강현실을 이용한 곡선의 디자인 (HCI Korea 2013)
공간증강현실을 이용한 곡선의 디자인 (HCI Korea 2013)공간증강현실을 이용한 곡선의 디자인 (HCI Korea 2013)
공간증강현실을 이용한 곡선의 디자인 (HCI Korea 2013)
 
Unite 17 Education Day (미대 지망생이었던 제가)유니티 게임 개발자가 되었습니다 - 정선효
Unite 17 Education Day (미대 지망생이었던 제가)유니티 게임 개발자가 되었습니다 - 정선효Unite 17 Education Day (미대 지망생이었던 제가)유니티 게임 개발자가 되었습니다 - 정선효
Unite 17 Education Day (미대 지망생이었던 제가)유니티 게임 개발자가 되었습니다 - 정선효
 
Wpf3 D 기초부터 활용까지
Wpf3 D 기초부터 활용까지Wpf3 D 기초부터 활용까지
Wpf3 D 기초부터 활용까지
 
July report in korean
July report in koreanJuly report in korean
July report in korean
 
Kgc make stereo game on pc
Kgc make stereo game on pcKgc make stereo game on pc
Kgc make stereo game on pc
 
권기훈_개인포트폴리오
권기훈_개인포트폴리오권기훈_개인포트폴리오
권기훈_개인포트폴리오
 
Vr시작하기 20160617
Vr시작하기 20160617Vr시작하기 20160617
Vr시작하기 20160617
 
KYSR 1st Seminar 엔비디아 김승규 상무
KYSR 1st Seminar 엔비디아 김승규 상무KYSR 1st Seminar 엔비디아 김승규 상무
KYSR 1st Seminar 엔비디아 김승규 상무
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [AutoCar죠] : 자율주행 로봇 층간 이동을 위한 인지 기능 구현
 
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [전진 4드론] : RAD(Reinforcement learning method for ...
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [전진 4드론] : RAD(Reinforcement learning method for ...제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [전진 4드론] : RAD(Reinforcement learning method for ...
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [전진 4드론] : RAD(Reinforcement learning method for ...
 

[pycon korea 2018] 드론 및 인공위성 영상을 이용한 태양광발전소 입지분석

Editor's Notes

  1. 안녕하세요 ‘드론 및 인공위성 영상을 이용한 태양광발전소 입지분석’에 대해서 발표하게된 최재현입니다. 00:11
  2. 00:11 발표에 앞서서 간단하게 제 소개를 드리겠습니다. 저는 2008년부터 현재까지 약 10년정도 개발을 했구요, 작년에 해줌에 오기 전까지는 게임 개발자로 일을 했습니다. 개발에 참여한 게임으로는 피파온라인2와 하이퍼유니버스라는 게임이 있습니다. 게임 개발을 할 때에는 c++과 c#, 유니티엔진을 주로 사용했구요, 해줌에서 웹개발을 하면서부터는 파이썬, 장고 프레임워크를 주로 사용하고 있습니다. 최근에 회사에서 음영분석 작업을 시작하게 되었는데요, 제가 3d 게임 개발 경험이 있어서 3d 구현 부분을 맡아서 해보게 되었구요, 파이썬으로 3D를 구현 해본 내용에 대해서 얘기해 보겠습니다. 01:13
  3. 01:13 발표 순서는 첫번째로 저희 회사에서 하는 일? 이번 발표 주제를 선정하게 된 내용에 대한 얘기를 드리고, 그리고 발표 주제인 음영 분석에 대한 접근 방법, 프로토타이핑 과정, 팬더3d 엔진을 이용한 인공위성 및 드론 이미지 음영 분석, unity3d를 이용한 음영 데이터 추출, 데이터 검증, 그리고 마지막으로 팬더3d를 써보면서 느꼈던 점을 unity3d 엔진과 비교해서 얘기드리겠습니다. 01:47
  4. 01:47 저희 회사는 데이터를 기반으로 기상 예측 및 태양광발전량 예측 등의 연구를 하고 있습니다. 이와 관련해서 작년 파이콘에서 ‘구름이 하늘의 일이라면’이라는 제목으로 python과 tensorflow를 이용한 기상예측에 대한 발표가 있었구요, 해당 기술을 기반으로 발전소 이상감지, 발전소 수익성 예측 등의 일을 하고 있습니다. (클릭)기존에 진행했던 발전량 예측은 음영이 없는 환경을 가정한 예측 이었는데요 (클릭)사실 실제 환경은 다양한 원인으로 음영이 발생 할 수가 있습니다. 가정용 태양광의 경우에는 주변의 높은 건물에 의해서 음영이 발생 할 수 있구요, 태양광 발전소의 경우에는, 주변의 나무나 산 등에 의해서 음영이 발생 할 수도 있을 것입니다. (클릭)음영은 발전량과 효율에 매우 큰 영향을 미치기 때문에, 이런 음영을 분석 할 수 있다면 발전량 예측 고도화에 큰 효과가 있을 것 입니다. 음영은 직접 눈으로 확인 할 수도 있지만, 지형이나 건물 등에 따라서 직접 판단하기 힘든 곳이 생길 수도 있구요. 이와 같은 경우에 활용 할 수 있는, ’드론 및 인공위성영상을 이용한 음영 분석방법’에 대해서 얘기 해보려고 합니다. 03:22
  5. 03:22 저희가 접근해본 음영 분석 방법입니다. 첫번 째로, 드론 및 인공위성 영상에서 point cloud 또는 height map 을 생성합니다. (클릭)두번 째로, 생성된 point cloud 또는 height map 에서 3d mesh를 생성하고, 렌더링을 해서 화면에 출력 합니다. (클릭)마지막으로 시뮬레이션된 태양의 위치를 바탕으로 계절별, 시간대별 음영을 눈으로 확인하고, 데이터를 추출해서 발전량 예측에 활용합니다. 03:56
  6. 03:56 먼저 프로토타이핑 과정에 대해서 얘기 드리겠습니다. 04:02
  7. 04:02 드론 영상에서 point cloud 및 3d mesh 를 생성하는 과정입니다. Point cloud 는 3차원 좌표를 가지고 있는 점들로 구성된 자료를 말하는데요, 화면에 돌아가고 있는 그림이, 도넛을 포인트 클라우드로 렌더링한 그림입니다. 04:21
  8. 04:21 Point cloud 와 mesh 를 생성하기 위해서 pix4d 라는 프로그램을 사용했는데요, Pix4d 는 드론 항공 사진으로 3d 데이터를 생성하는 프로그램으로 여러 산업에서 많이 쓰이고 있는 프로그램이구요, 드론 사진을 클라우드에 올리면 자동적으로 3d 데이터로 변환이 됩니다. 04:45
  9. 04:45 입력 데이터는 저희가 직접 현장에 가서 드론으로 촬영한 사진인데요, 경기도 안성의 한 발전소 예정 부지에 가서 촬영을 했습니다. 오른쪽 그림은 실제로 사진이 촬영된 포인트를 표시한 것이구요, 가로 세로 지그재그로 일정한 간격으로 사진을 촬영 했습니다. 총 103장의 이미지가 촬영되어 사용 되었습니다. 05:13
  10. 05:13 위 그림은 드론 사진에서 point cloud 로 변환이 된 데이터인데요. 자세히 보시면, 각각의 점으로 표시가 되어 있는 것을 확인 할 수 있습니다. 05:25
  11. 05:25 위 그림은 point cloud 가 아닌 3d mesh 로 변환이 된 데이터 입니다. 위의 두 이미지들은 웹에서 렌더링된 화면을 캡쳐한 것 이구요, 각각 파일로 다운 받아서 다른 프로그램을 통해서 열어 볼 수 있습니다. 이번 프로토타이핑에서는 3d mesh 데이터를 .fbx 파일로 받아서 유니티에서 렌더링 해보겠습니다. 05:53
  12. 05:53 3d mesh 렌더링에 사용할 프로그램은 unity3d 엔진입니다. 유니티엔진은 게임개발에 많이 사용되고 있는 엔진이구요, 이전 프로젝트들에서 몇 년간 써온 엔진이기 때문에 프로토타이핑 구현 소프트웨어로 선택하게 되었습니다. 06:11
  13. 06:11 유니티 엔진에서 렌더링된 화면이구요, (클릭) pix4d 웹상에서 출력된 화면과 같은 화면이 출력 된 것을 확인 할 수 있습니다. 조명은 아직 설치가 되어 있지 않아서, 음영은 표시 되지 않습니다. 06:27
  14. 06:27 조명을 설치한 화면인데요, (클릭) 빛이 나무에 가려서 (클릭)길에 음영이 진 모습을 확인 할 수 있습니다. 06:36
  15. 06:36 프로토타이핑은 메쉬를 렌더링 하는 부분까지 진행을 했구요, 처음에 세웠던 접근방법으로 음영분석이 가능 할 것이라고 판단이 되어서, 다음 프로세스로 이번 발표의 핵심인 파이썬 라이브러리를 사용해서 구현 하는 작업으로 넘어가 보았습니다. 06:57
  16. 06:57 첫번째 과정인 드론 및 인공위성영상 합성에 사용 할 수 있는 라이브러리들입니다. 첫번째 라이브러리는 인공위성영상에서 heightmap이미지를 만드는 라이브러리이구요, 두번째 라이브러리는 pix4d 와 비슷하게 드론 이미지에서 3d 데이터를 만드는 라이브러리 입니다. 두 라이브러리 다 파이썬을 사용한 라이브러리입니다. 앞선 프로토타이핑 과정에서 드론 이미지를 사용해서 3d 데이터를 만들어 보았기 때문에, 이번에는 위성영상을 활용해 보겠습니다. 드론 영상은 직접 현장에 가서 촬영을 해야 3d 데이터를 만들 수 있지만, 인공위성영상은 직접 현장에 가지 않고도 전세계의 영상을 사용 할 수 있기 때문에, 최종적으로 저희가 구현해보고자 하는 방향입니다. 07:55
  17. 07:55 Heightmap은 한글로 높이맵이라고 하는데요, 지형의 높이를 그레이스케일로 표현한 이미지입니다. 게임 개발에서도 많이 사용하고 있습니다. 흰색일 수록 높은 고도를 나타내구요, 검은색일수록 낮은 고도를 나타냅니다. 왼쪽이 height map 이미지 파일이구요, (클릭) 오른쪽은 height map을 렌더링한 화면입니다. 하이트맵에서 흰색과 검은색으로 표시된 부분이 렌더링 되었을 때 높이가 차이나는 모습을 확인 할 수 있습니다. 첫번째 라이브러리인 S2p 라이브러리를 사용해서 위성영상에서 heightmap을 직접 추출 해 보겠습니다.. 08:37
  18. 08:37 다음에 보여드릴 몇 페이지들은 실제 위성 영상을 사용해서 추출한 heightmap 이미지들이구요, 해당 작업들은 저희 독일법인 연구소에서 진행을 했습니다. 왼쪽이미지는 위성 사진 이구요, 오른쪽 이미지는 다른 각도로 측정된 세장의 사진으로 계산된 heightmap 입니다. 이미지 촬영에 사용된 위성은 프랑스의 고해상도 광학 위성으로 (클릭) 해상도가 높아서 빌딩이나 나무등이 꽤 정확히 구분 되는 것을 확인 할 수 있습니다. 09:13
  19. 09:13 오른쪽 2장의 베를린의 위성영상으로 하이트맵을 추출한 이미지 입니다. 09:20
  20. 09:20 왼쪽은 원본 영상이구요, 가운데 사진은 원본영상의 해상도를 4배 개선한 이미지입니다. 오른쪽은 가운데이미지에서 추출한 height map 이구요. 건물들이 약간 작게 보이지만, 어느정도의 높이 정보는 표현되는 것이 확인됩니다. 09:40
  21. 09:40 다음은 heightmap 을 렌더링할 그래픽 라이브러리들입니다. 파이썬에서 사용가능한 여러 라이브러리들이 있는데요, (클릭) 이번 작업에서는 팬더3d 를 사용하기로 하였습니다. 09:55
  22. 09:55 팬더3d 를 선택하게 된 이유로는 3d 에 특화되어 있는 엔진이고, 예제나 문서화가 자세히 제공되어 있어서 선택하게 되었습니다. 만약에 2d 게임같은것을 구현한다면, pygame이나, cocos2d도 고려 해볼 수 있을 것 같습니다. 10:16
  23. 10:16 s2p 라이브러리를 사용해서 추출한 heightmap 이미지이구요. 해당 이미지를 팬더3d 엔진을 사용해서 렌더링해보겠습니다. 10:29
  24. 10:29 팬더3d 엔진는 height map 지형생성을 위한 2가지의 클래스를 제공하는데요, 그 중에서 GeoMipTerrain 함수를 사용해서 지형을 렌더링하였습니다. 하이트맵 이미지를 로드 하고, 사이즈를 지정하는 등의 6줄의 코드로 간단히 지형을 렌더링 할 수가 있구요, 아직 조명은 설치하지 않은 상태입니다. 10:56
  25. 10:56 다음은 조명 세팅 부분입니다. 다른 3d 엔진들과 마찬가지로 directional 라이트, 스팟 라이트, 포인트 라이트, 앰비언트 라이트의 조명을 설치할 수가 있습니다. (클릭) 태양을 시뮬레이션 하기 위해서 방향성을 가지고 있는 directional 라이트를 설치해 보았는데요, 조명 세팅도 지형 렌더링과 마찬가지로 간단히 조명을 설치할 수 있고, 그림자가 잘 출력되는 것을 확인 할 수 있습니다. 11:33
  26. 11:33 Directional light 세팅 시에 주의 할 점이 있는데요, 기본 설정으로 회전만 준 후에 실행을 하면 그림자가 생기지 않을 수도 있습니다. 11:46
  27. 11:46 showFrustum(쇼프러스텀) 함수로 조명의 범위를 확인 해 보면, 원점에서 광원이 시작 되는 것을 확인 할 수가 있는데요 11:58
  28. 11:58 조명, 렌즈의 setFilmSize 함수와 setNearFar 함수의 인자로, 적정한 값을 찾아서 세팅을 하면 그림자를 확인 할 수 있습니다. Directional light 에서 빛은 렌즈의 세팅값에 상관없이 모든 지역에 비추는데요, 그림자의 경우는 렌즈의 범위 안에 들어와있는 부분에만 그림자가 처리됩니다. 12:24
  29. 12:24 다음은 드론 영상에서 추출한 3d mesh 파일을 로드 하는 방법입니다. 팬더3d 에서는 egg 파일을 로딩 할 수 있는데요. 앞선 과정에서 생성했던 Fbx 파일을 바로 로딩 할 수는 없구요, 그래서 저는 블렌더라는 소프트웨어를 사용해서 Fbx파일을 egg 파일로 변환한 후에 로딩을 했습니다. 모델 로딩의 경우도 loader.loadModel 함수를 사용해서 쉽게 로딩 할 수 있습니다. 13:02
  30. 13:02 다음은 태양을 시뮬레이션하기위해서 특정 시간의 태양 위치를 구하는 과정입니다. 태양의 위치를 구하기 위해서는 방위각과 고도를 구하면 되는데요, 태양의 방위각은 북점에서 시계방향으로 지평선을 따라 측정한 각도로 0~360도로 표시합니다. 아침에 해가 뜰 때는 동쪽 약 90도 쯤에 위치하고, 낮 12시에는180도, 해가 지는 저녁에는 서쪽 약 270도에 위치하게 됩니다. 태양의 고도는 지평면에서 수직권을 따라 천체까지 잰 각을 말하며 -90~90도 의 값을 갖습니다. 고도가 0도 이상 일 때는 해가 뜬 상태이구요, 0도 이하일 때는 해가 뜨지않았거나 진 상태입니다. 우리나라 기준으로는 낮 12시30분쯤에 고도가 가장 높고 그림자가 가장 짧아집니다. 이 두 값은 구하는 공식이 있어서, 인자를 대입해서 바로 값을 얻을 수 있습니다. 14:02 적위: 태양의 위치를 표시하는 좌표의 하나로, 태양의 방향과 북극의 방향이 이루는 각의 여각, 천구 상의 천체의 위치를 나타내는 적도 좌표에서의 태양의 위도.
  31. 14:02 저희는 직접 공식을 보고 파이썬 함수를 만들어서 사용했습니다. 먼저 방위각을 구하는 함수고요 14:14
  32. 14:14 다음은 태양의 고도을 구하는 함수입니다. 각 함수에 시간과, 위도, 경도를 입력하면 방위각과 고도를 얻을 수 있습니다. 14:27
  33. 14:27 태양의 방위각과 고도를 구한 다음에, 팬더3d 조명에 적용하는 방법입니다. setHpr 함수를 사용해서 조명을 회전 시킬 수 있는데요, 앞 2개의 인자, yaw와 pitch 값에 방위각과 고도를 입력해서 회전을 시키면 조명을 태양의 방향과 일치 시킬 수 있습니다. 14:51
  34. 14:51 드론영상으로 추출한 3d mesh 지형을 렌더링 한 후에, 시간대별로 태양 위치를 시뮬레이션한 결과인데요. 태양광 패널에 음영이 지는 것을 확인하기 위해 주황색 네모 부분에 패널 모양의 mesh 를 렌더링 했습니다. (클릭) 왼쪽은 2017년 1월 1일 오전 10시의 그림자 모습이구요, 10시 방향으로 그림자가 진 모습을 확인 할 수 있습니다. (클릭) 오른쪽은 낮 12시의 그림자 모습이구요 12시방향으로 그림자가 졌고, 짧아진 모습을 확인할 수 있습니다. 15:29
  35. 15:29 다음은 (클릭)오후 2시와 (클릭) 오후 4시의 그림자 모습인데요, 오른쪽 오후 4시의 이미지를 보면 패널 위로 그림자가 많이 진 모습을 확인 할 수 있습니다. 15:42
  36. 15:42 패널 부분을 확대한 모습인데요. 패널의 약 반 이상에 음영이 졌구요, 이럴 경우 발전량은 약 90%이상이 감소하게 됩니다. 셀들이 다 연결이 되어 있기 때문에, 음영이 진 부분 뿐만 아니라, 인접한 셀에서 영향을 주기 때문입니다. 이상과 같은 방법으로,먼저 하이트맵이나 3dmesh를 사용해서 지형을 렌더링 한 후에, 가상의 태양광 패널을 설치해서 발전소가 설치 되었을 때, 얼마나 음영이 지는지를 시뮬레이션해보며 눈으로 확인 할 수가 있구요. 발전소 부지로 적합한지 판단하는데 큰 도움을 줄수가 있게 됩니다. 다음은 음영을 수치 데이터로 뽑아, 발전량 예측을 고도화하는 과정을 얘기드리겠습니다. 16:35
  37. 16:35 음영을 데이터로 추출하기 위한 과정입니다. 저희가 구현해본 음영판단방법을 설명하기 위해서 다들 아시는 내용이지만 먼저 그림자가 생기는 원리를 말씀드리면. 태양에서 지구를 향해 빛을 비추게 되고, 건물등에 의해서 통과를 하지 못 할 경우에 차단된 곳에 그림자가 생기게 됩니다. 그러면 프로그램상에서 한 지점의 음영 여부를 판단하는 방법은 역으로 생각을 해서, 한 점에서 태양빛의 방향의 반대방향으로 충돌광선을 쐈을 때, 충돌하는 부분이 생길 경우, 그 지점을 음영으로 판단할 수 있을 것 입니다. 해당 내용을 팬더3d로 구현해보고 있는데, 아직 완성을 다 못한 관계로, 유니티를 사용해서 구현한 내용을 보여드리겠습니다. 17:30
  38. 17:30 서울의 한 아파트단지를 간단하게 모델링을 했구요, (클릭) 임의의 지점에 패널을 설치했습니다. 17:40
  39. 17:40 태양광 패널은 가로 세로 총 60개의 셀로 구성되어 있는데요, 정밀도를 높이기 위해 하나의 셀의 9등분 해서 총 540개의 포인트를 설정하였습니다. 17:54
  40. 17:54 하나의 패널 총 540개의 포인트에서 태양을 시뮬레이션한 directional light 벡터의 역벡터 방향으로 충돌광선을 쏴서 충돌 여부를 체크를 합니다. 충돌이 있는 포인트는 충돌된 지점과 노란색 선으로 연결을 해 보았구요, 음영이 진 포인트에 정확히 노란색 선이 생성 된 것을 확인 할 수 있습니다. 18:20
  41. 18:20 이제 각 포인트 별로 음영 여부를 데이터로 추출 할 수가 있는데요, 음영이 없는 부분은 0, 음영이 있는 부분은 1을 가지는 540개의 배열을 추출한 후에, 원래 셀의 개수인 9개를 하나로 합친 60개의 배열을 추출한 모습입니다. 가장 왼쪽은 음영이 없어 전부 0으로 채워진 배열 이구요, 가운데는, 음영이 완전히 진 부분은 1. 중간 사선인 부분은 0.67, 0.33 으로 채워진 것을 확인 할 수가 있습니다. 가장 오른쪽은 전부 음영이 졌기 때문에 전부 1로 채워졌습니다. 추출된 데이터를 사용해서 발전량 예측 알고리즘을 좀 더 고도화 할 수가 있는데요. 발전량 예측을 한 후에 실제 데이터와 검증해본 내용을 보여드리겠습니다. 19:14
  42. 19:14 데이터 검증 과정입니다. 19:17
  43. 19:17 먼저 실제 발전량 데이터는 도봉구청의 협조를 받아서 도봉구청에 설치된 벽면태양광 패널 약 4년치의 데이터를 수집하였구요 음영분석을 위해 vworld 지도서비스의 정보를 바탕으로 대략적으로 모델링을 해 보았습니다. (클릭)패널은 주황색 네모안에 총 72개의 패널이 설치되어있습니다. 19:50
  44. 19:50 먼저 음영 시뮬레이션을 해본 결과인데요 (클릭) 왼쪽의 12월 13일 오후 2시 경에는 음영이 지지않다가, (클릭) 4시가 넘어가면서 음영이 지는 것을 확인 할 수 있습니다. 전체 데이터를 확인 했을 때, 겨울 오후 시간대에 해가 길어 지면서 주변 아파트에 의해서 음영이 발생하는 것을 확인 할 수 있었구요. 앞서 설명드린 방법으로 음영 데이터를 추출하였고, 발전량 예측 알고리즘에 데이터를 사용했습니다. 20:22
  45. 20:22 위 두 그래프는 실제 발전량, 음영 보정전, 음영 보정후의 예측 발전량을 보여주는 그래프 인데요, 파란색 음영 보정 전 예측발전량을 보시면 오후에 급격하게 떨어지는 구간이 없이 대칭된 그래프를 보여주고 있습니다. 하지만 실제 발전량은 4시 이후에 급격하게 떨어지고 있구요, 음영 데이터를 반영 했을 때에, 실제와 비슷한 발전량을 예측 하는 것을 볼 수 있습니다. 21:03
  46. 21:03 월별 발전량 그래프구요. 음영 손실 보정 후의 발전량 예측이 실제 발전량과 더 가까운 것을 확인 할 수 있습니다. 21:13
  47. 21:13 월별 오차율을 나타낸 그래프구요, 음영손실 보정후의 그래프가 음영이 많이 생기는 겨울에 오차율이 많이 낮아지는 것을 확인 할 수 있습니다. 제가 준비한 음영 분석에 대한 내용은 여기까지구요. 마지막으로 깊게 사용해보진 못했지만 팬더3D를 조금 사용해 보면서 느꼈던 점에 대해서 얘기해 보겠습니다. 21:44 nMAE = 오차절대값 / 용량
  48. 21:44 먼저 팬더3d의 장점으로는 예제와 문서화가 잘 되어 있어서, 예제를 하나씩 따라 해보면서 쉽게 배울 수 있었습니다. 다른 엔진에 대한 경험이나 3d 그래픽스에 대한 지식이 있다면 어렵지 않게 사용 하실 수 있을 것 입니다. 코드가 간단해서 모델링이나 애니메이션 등을 쉽게 확인 해볼 수가 있구요. 문서들을 보면서, 클래스 구조가 잘 설계되어 있다는 느낌도 받았습니다. 그리고 다른 엔진들에서 제공하는 기능들이 다 있기 때문에 기능적으로 부족한 부분은 없어 보였습니다. 그리고 굳이 유니티와 비교해서 단점을 찾아 보자면 gui 기반이 아니기 때문에, 사용성 부분에서는 유니티가 좀 더 나은 점이 있구요, 사용하는 개발자들이 적어서 필요한 정보를 바로바로 얻기에는 부족 할 수 있을 것 같습니다.. 큰 프로젝트를 진행 한다면, 여러면으로 봤을 때, 유니티를 사용하는것이 훨씬 효율적일 수도 있다고 생각하구요, 하지만 간단히 모델링이나 애니메이션을 출력하거나 프토로타이핑으로 사용하기에는 충분히 좋은 엔진이라고 생각합니다. 이상으로 발표를 마치겠습니다.
  49. 발표를 들어 주셔서 감사합니다. 이번 발표에 대한 문의나, 아니면 저희 회사나 개인적인 문의가 있으시면 언제든지 email로 연락 주시면 바로 답변드리도록 하겠습니다. 감사합니다.