일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- regression
- LG Aimers 4th
- 회귀
- GPT-4
- PCA
- 오블완
- LG Aimers
- 딥러닝
- 분류
- LLM
- OpenAI
- 머신러닝
- ChatGPT
- deep learning
- 티스토리챌린지
- AI
- Classification
- 해커톤
- 지도학습
- supervised learning
- LG
- Machine Learning
- gpt
Archives
- Today
- Total
SYDev
KHUDA 4th 심화 트랙 프로젝트 - 교내 거리뷰 이미지 기반 위치 예측 모델 (+ 쿠다 4기 수료) 본문
KHUDA 4th/심화트랙 PROJECT
KHUDA 4th 심화 트랙 프로젝트 - 교내 거리뷰 이미지 기반 위치 예측 모델 (+ 쿠다 4기 수료)
시데브 2023. 12. 10. 19:38쿠다 4기 활동을 마무리하면서 진행한 마지막 프로젝트&컨퍼런스 summary
프로젝트 github 주소: https://github.com/cho-jang-hyun/Prediction_of_Location_based_RoadView
주도적으로 참여한 파트
네이버맵 api를 받아와서 학교 내부의 중복되지 않는 좌표(대략 900개)에서 각도를 달리하여 18장의 스크린샷을 캡쳐하는 매크로 코드 작성 (+ 아이디어 제공)
파일명: capture.js
const puppeteer = require('puppeteer');
const fs = require('fs');
async function capturePanorama(lat, lng, pan) {
// Puppeteer 브라우저 실행
const browser = await puppeteer.launch();
const page = await browser.newPage();
// HTML 파일 경로 설정 (실제 파일 경로로 변경 필요)
const filePath = 'file:///C:/Users/pc/Desktop/CE/KHUDA/KHUDA_4th_Project/pano.html';
await page.goto(filePath);
// createPanorama 함수 실행 (지정된 좌표 및 pan 값 사용)
await page.evaluate((lat, lng, pan) => {
window.createPanorama(lat, lng, pan);
}, lat, lng, pan);
// 파노라마 로딩을 위한 대기 (대기 시간 조절 필요)
await page.waitForTimeout(400);
// 스크린샷 캡처
const screenshot = await page.screenshot();
console.log(`Captured: lat ${lat}, lng ${lng}, pan ${pan}`);
// 스크린샷을 파일로 저장
const filename = `screenshot_lat_${lat}_lng_${lng}_pan_${pan}.png`;
require('fs').writeFileSync(filename, screenshot);
console.log(`Captured: ${filename}`);
// 브라우저 닫기
await browser.close();
}
const panValues = [-160, -140, -120, -100, -80, -60, -40, -20, 0, 20, 40, 60, 80, 100, 120, 140, 160, 180];
// 파일 경로
const filePath = 'C:/Users/pc/Desktop/CE/KHUDA/KHUDA_4th_Project/pure_lat_lng.txt'; // 실제 파일 경로로 변경해야 합니다.
// 파일에서 좌표 읽기
fs.readFile(filePath, 'utf8', async (err, data) => {
if (err) {
console.error('파일을 읽는 도중 오류가 발생했습니다.', err);
return;
}
const lines = data.split('\\n');
for (const line of lines) {
const [lat, lng] = line.split(' '); // 공백을 기준으로 위도와 경도 분리
// 위도와 경도를 parseFloat()를 통해 숫자로 변환하여 capturePanorama 함수 호출
for(const pan of panValues) {
await capturePanorama(parseFloat(lat), parseFloat(lng), pan); // 여기서 0은 pan 값입니다. 필요에 따라 변경 가능합니다.
}
}
});
파일명: pano.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Naver Maps Panorama Example</title>
<script type="text/javascript" src="https://oapi.map.naver.com/openapi/v3/maps.js?ncpClientId=h236y0zsuk&submodules=panorama"></script>
</head>
<body>
<div id="pano" style="width:100%;height:600px;"></div>
<script>
var lists = [];
function createPanorama(lat, lng, Pan) {
let pano = new naver.maps.Panorama(document.getElementById("pano"), {
position: new naver.maps.LatLng(lat, lng),
pov: {
pan: Pan,
tilt: 15,
fov: 100
},
flightSpot: false,
logoControl: false
})
});
}
</script>
</body>
</html>
>> 대략 16000장의 이미지 데이터셋 확보
사회에 나와서 시작한 첫 번째 활동인 KHUDA, 군대 전역하기 직전부터 시작해서 이번 활동을 마지막으로 마무리하게 됐다. 막 전역하고 사회성이 부족했던 내가 다시 사람들과 연결되는 좋은 계기였고, 실제로 다양한 사람들을 만나면서 인간적으로도 학술적으로도 많이 배우고 성장할 수 있었던 것 같다.
특히 마지막에 진행했던 프로젝트는 처음으로 주도적으로 전과정에 참여할 수 있어 이전에는 느껴보지 못한 팀 프로젝트의 재미를 느낄 수 있었다. 또한, 하나의 프로그램을 구현하고 배포하는 과정에서 많은 고민과 어려움이 있음을 깨닫게 되었다. 다음에도 좋은 프로젝트 진행할 기회가 있기를 바라면서 글은 여기까지!