Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- #abc 프로젝트 멘토링 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업 #공부일지 #멘토링일지
- #abc부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업
Archives
- Today
- Total
나른한 코딩 생활
[36일차] ABC 부트캠프 프로젝트 - 6 본문
오늘은 저번주에 미쳐 완성하지 못했던 디테일들을 완성하는 시간을 가졌다
이것으로 프로토타입의 개발은 오늘로서 막을 내렸고, 내일은 발표전 마지막으로 프로토타입의 설계도 및 프로세스를 작성하고 마무리 지을 것이다
오전 / 오후
프로젝트 프로토타입 최종 완성
Mapping_Arive.py
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
def create_map_url(latitude, longitude, name=None):
base_url = "https://map.kakao.com/link/map/"
if name:
url = f"{base_url}{name},{latitude},{longitude}"
else:
url = f"{base_url}{latitude},{longitude}"
return url
def create_directions_url(latitude, longitude, name=None):
base_url = "https://map.kakao.com/link/to/"
if name:
url = f"{base_url}{name},{latitude},{longitude}"
else:
url = f"{base_url}{latitude},{longitude}"
return url
# 예시 사용 < - 해당 부분을 여행지로 변경
latitude = 35.1594965345398
longitude = 129.162576586723
name = "해운대해수욕장"
latitude_YeoSu = 34.8377033412796
longitude_YeoSu = 127.892653150096
name_YeoSu = "여수 보물섬 남해군청" # 위치는 남해군청 좌표를 가져옴
# 인터파크 투어 국내여행 1박 기준 2개의 목적지
map_url = create_map_url(latitude, longitude, name)
# directions_url = create_directions_url(latitude, longitude, name)
directions_url_YeoSu = create_directions_url(latitude_YeoSu, longitude_YeoSu, name_YeoSu)
# Selenium을 사용하여 Chrome으로 URL 열기
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# 핑찍힌 지도 열기
driver.get(map_url)
driver.implicitly_wait(10)
time.sleep(3)
# 5초 뒤에 여수 표시
# 목적지 URL 열기
driver.get(directions_url_YeoSu)
time.sleep(3)
input("Press Enter to close the browser...")
# Enter를 눌러야 창 닫음
driver.quit()
FuncCountCO2.py
emissions_data = {
"S_Flight": {
"emission": 255.0, # gCo2 단위
"scope": "Scope 1",
"speed": 850,
'avg_emission': 0.3 # 이동수단별 km당 평균 탄소 배출량
},
"L_Flight": {
"emission": 150.0,
"scope": "Scope 1",
"speed": 925,
'avg_emission': 0.16
},
"Gasoline_Car": {
"emission": 192.0,
"scope": "Scope 1",
"speed": 57, # 고속도로와 일반도로 평균값의 평균
'avg_emission': 3.37
},
"Diesel_Car": {
"emission": 171.0,
"scope": "Scope 1",
"speed": 57,
'avg_emission': 3.0
},
"Bus": {
"emission": 105.0,
"scope": "Scope 1",
"speed": 22,
'avg_emission': 0.47
},
"Subway":{
"emission": 26.0,
"scope": "Scope 1",
"speed": 50,
'avg_emission': 0.52
},
"Electric_Car": {
"emission": 53.0,
"scope": "Scope 2",
"speed": 46, # 출처 : https://www.wltpfacts.eu/from-nedc-to-wltp-change/
'avg_emission': 1.15
},
"Electric_Bicycle": {
"emission": 12.0,
"scope": "Scope 2",
"speed": 17, # 평균 15~20 km/h
'avg_emission': 0.71
},
"Train": {
"KTX": {
"emission": 19.92,
"scope": "Scope 2",
"speed": 180,
'avg_emission': 0.11
},
"KTX_Sancheon_and_Mugunghwa": {
"emission": 38.105,
"scope": "Scope 2",
"speed": 120, # KTX 산천과 무궁화호의 평균속도
'avg_emission': 0.32
},
"Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul": {
"emission": 27.19,
"scope": "Scope 2",
"speed": 140, # 누리호, ITX 의 평균속도
'avg_emission': 0.19
}
}
}
class VehicleCo2:
global emissions_data
def __init__(self,bus_time=0.0,subway_time=0.0,s_flight_time=0.0,l_flight_time=0.0,
gasoline_car_time=0.0,diesel_car_time=0.0,electric_car_time=0.0,
train_time=0.0,electric_bicycle_time=0.0 ):
self.bus_time = bus_time
self.subway_time = subway_time
self.s_flight_time = s_flight_time
self.l_flight_time = l_flight_time
self.gasoline_car_time = gasoline_car_time
self.diesel_car_time = diesel_car_time
self.train_time = train_time
self.electric_bicycle_time = electric_bicycle_time
self.electric_car_time = electric_car_time
self.using_train = 0
self.avg_emission = 0.0
self.avg_em_only_car = 0.0
self.Bool_trainUsed = False
self.emission_train = 0.0
self.list_avg = list(emissions_data.keys())[:-1]
self.list_vtime = [self.s_flight_time,self.l_flight_time,self.gasoline_car_time,self.diesel_car_time,
self.bus_time,self.subway_time,self.electric_car_time,self.electric_bicycle_time]
self.emission_bus = self.bus_time / 60.0 * emissions_data["Bus"]["speed"] * emissions_data["Bus"]["emission"]
self.emission_subway = self.subway_time / 60.0 * emissions_data["Subway"]["speed"] * emissions_data["Subway"]["emission"]
self.emission_s_flight = self.s_flight_time / 60.0 * emissions_data["S_Flight"]["speed"] * emissions_data["S_Flight"]["emission"]
self.emission_l_flight = self.l_flight_time / 60.0 * emissions_data["L_Flight"]["speed"] * emissions_data["L_Flight"]["emission"]
self.emission_g_car = self.gasoline_car_time / 60.0 * emissions_data["Gasoline_Car"]["speed"] * emissions_data["Gasoline_Car"]["emission"]
self.emission_d_car = self.diesel_car_time / 60.0 * emissions_data["Diesel_Car"]["speed"] * emissions_data["Diesel_Car"]["emission"]
self.emission_elec_car = self.electric_car_time / 60.0 * emissions_data["Electric_Car"]["speed"] * emissions_data["Electric_Car"]["emission"]
self.emission_elec_bicycle = self.electric_bicycle_time / 60.0 * emissions_data["Electric_Bicycle"]["speed"] * emissions_data["Electric_Bicycle"]["emission"]
self.emissions_co2 = 0.0
# 초기화시에 각 이동수단별 시간을 가져온다
if self.train_time== 0.0:
self.Bool_trainUsed = False
else:
self.Bool_trainUsed = True
def set_train_kind(self,using_train):
self.using_train = using_train
if self.train_time != 0.0:
# using_train = input("이용한 열차 : ")
match self.using_train:
case "1":
self.emission_train = (self.train_time / 60.0 * emissions_data["Train"]["KTX"]["speed"] *
emissions_data["Train"]["KTX"]["emission"])
case "2":
self.emission_train = (self.train_time / 60.0 * emissions_data["Train"]["KTX_Sancheon_and_Mugunghwa"]["speed"] *
emissions_data["Train"]["KTX_Sancheon_and_Mugunghwa"]["emission"])
case "3":
self.emission_train = (self.train_time / 60.0 * emissions_data["Train"]["Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul"]["speed"] *
emissions_data["Train"]["Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul"]["emission"])
case _:
self.emission_train = 0.0
print("잘못된 값을 입력하셨습니다, 열차는 계산에서 제외됩니다")
else:
print("입력된 기차가 없습니다")
def calculate_co2(self):
# move_bus = (25.0/60.0 * emissions_data["Bus"]["speed"])*emissions_data["Bus"]["emission"]
self.emissions_co2 = (self.emission_bus + self.emission_subway + self.emission_s_flight +
self.emission_l_flight + self.emission_g_car + self.emission_d_car +
self.emission_elec_car + self.emission_elec_bicycle + self.emission_train)
return round(self.emissions_co2,2)
def calculate_avg_emission(self): # 비교 대조용으로 사용, 실질적으로 사용되진 않음 ( 검증용 )
for index in range(len(self.list_avg)):
self.avg_emission += emissions_data[self.list_avg[index]]['avg_emission'] * ( self.list_vtime[index] )
if self.using_train == 1 :
self.avg_emission += emissions_data["Train"]["KTX"]['avg_emission'] * self.train_time
elif self.using_train == 2:
self.avg_emission += emissions_data["Train"]["KTX_Sancheon_and_Mugunghwa"]['avg_emission'] * self.train_time
elif self.using_train == 3:
self.avg_emission += emissions_data["Train"]["Nuriro_and_ITX_Cheongchun_and_ITX_Saemaeul"]['avg_emission'] * self.train_time
# emissions_data[self.list_avg[index]]['avg_emission'] => km 당 평균 배출량
return self.avg_emission
def calculate_only_car(self):
total_car_emission = 0.0
# 비행기를 제외한 나머지 이동수단의 시간을 모두 차량 이동으로 가정하고 배출량 계산
for time in self.list_vtime:
total_car_emission += (time / 60.0) * emissions_data["Gasoline_Car"]["speed"] * emissions_data["Gasoline_Car"]["emission"]
# 비행기 배출량
total_car_emission += self.emission_s_flight
total_car_emission += self.emission_l_flight
# 최종 배출량을 kg 단위로 변환
return round(total_car_emission / 1000.0, 2)
'''
# test
vehicle = VehicleCo2(bus_time=30, subway_time=50, electric_car_time=50,train_time=43)
vehicle.set_train_kind('1')
print(vehicle.calculate_co2())
print(vehicle.calculate_only_car())
'''
Random_OBJ_Image.py
import tkinter as tk
from PIL import Image, ImageTk
import random
import os
emission_co2 = 1.0
dif_emission_co2 = 0.0
customer = '신세계'
def set_emission_co2(value):
global emission_co2
emission_co2 = value
def set_dif_emission_co2(value):
global dif_emission_co2
dif_emission_co2 = value
def Dp_Random_Img(image_folder):
# 이미지 폴더의 모든 파일을 가져옴
image_files = [f for f in os.listdir(image_folder) if f.endswith(('png', 'jpg', 'jpeg', 'gif'))]
# 이미지와 관련된 데이터를 리스트로 관리
image_data = {
'tree.jpg': (int(dif_emission_co2/9.2), '그루', '나무'),
'bee.png': (int(dif_emission_co2*500), '마리', '벌'),
'sunflower.jpg': (int(dif_emission_co2/1.5), '송이', '해바라기')
}
# 랜덤으로 이미지 파일 선택
# selected_image = random.choice(image_files)
if dif_emission_co2 >= 9.2:
selected_image = random.choice(['tree.jpg', 'sunflower.jpg'])
else:
selected_image = 'bee.png'
kg = 'kg'
# 이미지 파일 경로
image_path = os.path.join(image_folder, selected_image)
# 선택된 이미지에 따른 변수 설정
if selected_image in image_data:
n, unit, random_obj = image_data[selected_image]
if selected_image == 'bee.png':
kg = 'g'
emission_co2_converted = emission_co2 * 1000 # g 단위로 변환
dif_emission_co2_converted = dif_emission_co2 * 1000 # g 단위로 변환
else:
emission_co2_converted = emission_co2 # kg 단위 그대로 사용
dif_emission_co2_converted = dif_emission_co2 # kg 단위 그대로 사용
else:
n, unit, random_obj = (1, '개', '알 수 없는 객체')
emission_co2_converted = emission_co2
dif_emission_co2_converted = dif_emission_co2
# 최상단에 표시할 텍스트와 폰트
top_text = f"고마워요! {customer}님!\n 덕분에 {n}{unit}의 {random_obj}들을 지켰어요!"
top_text_font = ("NanumGothic", 20, "bold")
mileage = random.randint(100, 1000)
# 출력할 텍스트 라인과 폰트
text_lines = [
f"총 {emission_co2_converted}{kg}의 탄소배출량이 발생했고,",
f"평균 여행보다 {dif_emission_co2_converted}{kg} 만큼의 탄소배출량이 줄었어요!",
f"현재까지 {mileage} 그린마일리지 적립!"
]
text_font = ("NanumGothic", 14)
# Tkinter 창 생성
root = tk.Tk()
root.title("G-SOK Map")
# 최상단 텍스트 라벨 추가
top_text_label = tk.Label(root, text=top_text, font=top_text_font)
top_text_label.pack(pady=10)
# 이미지를 로드하고 표시
img = Image.open(image_path)
img = img.resize((600, 500),Image.Resampling.LANCZOS)
# Image.Resampling.LANCZOS : 이미지 리사이즈시 화질 저하를 완화해주는 코드
# // pillow 10.0.0 버전 이후 함수명 바뀜
img = ImageTk.PhotoImage(img)
panel = tk.Label(root, image=img)
panel.pack(side="top", fill="both", expand="yes")
# 텍스트 라벨 추가
for line in text_lines:
text_label = tk.Label(root, text=line, font=text_font)
text_label.pack()
# Tkinter 이벤트 루프 시작
root.mainloop()
# 이미지 폴더 경로
# image_folder = "C:/ABCBootCamp/G_SOK_MAP_Project/ImgFolder"
#
# Dp_Random_Img(image_folder)
G_Sok_Main.py
from Func_CountCO2 import VehicleCo2
from Random_OBJ_Image import Dp_Random_Img, set_emission_co2, set_dif_emission_co2
# 이동 수단 입력
em_vehicle = VehicleCo2(bus_time=30, subway_time=50, electric_car_time=50,train_time=43)
if em_vehicle.Bool_trainUsed == True:
using_train = input('KTX면 1, KTX Sancheon 또는 Mugunghwa면 2, Nuriho 또는 ITX 일 경우 3번을 입력해주세요 : ')
em_vehicle.set_train_kind(using_train=using_train)
# em_vehicle.set_train_kind('3')
emission_co2_value = round(em_vehicle.calculate_co2()/1000.0,2) # kg 단위
# 결과를 Random_OBJ_Image의 emission_co2 변수에 설정
set_emission_co2(emission_co2_value)
set_dif_emission_co2(round(em_vehicle.calculate_only_car()-emission_co2_value,1))
image_folder = "C:/ABCBootCamp/G_SOK_MAP_Project/ImgFolder"
# 해당 이미지 경로에 이름과 맞는 이미지가 있어야 작동
Dp_Random_Img(image_folder)
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
'ABC 부트캠프' 카테고리의 다른 글
| [38일차] ABC 부트캠프 프로젝트 - 성과발표회 (0) | 2024.08.20 |
|---|---|
| [37일차] ABC 부트캠프 프로젝트 - 7 完 (0) | 2024.08.13 |
| [35일차] ABC 부트캠프 프로젝트 - 5 (0) | 2024.08.11 |
| [34일차] ABC 부트캠프 프로젝트 - 4 (0) | 2024.08.11 |
| [33일차] ABC 부트캠프 프로젝트 - 3 (0) | 2024.08.11 |