no image
[백준 10026번 문제, Python 3] 적록색약
문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은 구역에 속한다. (색상의 차이를 거의 느끼지 못하는 경우도 같은 색상이라 한다) 예를 들어, 그림이 아래와 같은 경우에 RRRBB GGBBB BBBRR BBRRR RRRRR 적록색약이 아닌 사람이 봤을 때 구역의 수는 총 4개이다. (빨강 2, 파랑 1, 초록 1) 하지만, 적록색약인 사람은 구역을 3개 볼 수 있다...
2023.12.31
no image
[프로그래머스 Lv 1, Python 3] 개인정보 수집 유효기간
문제 : 개인정보 수집 유효기간 풀이 방법 월 마다 일 수가 28일로 고정되어 있으니 일 단위로 계산을 하기가 실제 날짜 단위보다 쉽게 할 수 있다. 일 단위로 계산 해야할 날짜를 쪼개서 개인정보 날짜랑 비교를 하면 된다. 소스 코드 def solution(today, terms, privacies): answer = [] # terms dict privacy_cat_dict = dict() for i in terms: i = i.split() privacy_cat_dict[i[0]] = i[1] # {'A': '6', 'B': '12', 'C': '3'} today_date = trans_date(today.split('.')) # 679551 for i, privacy in enumerate(priv..
2023.12.30
no image
시각장애인을 위한 거리 측정 보행 보조 안내 프로젝트 회고 - 3학년 캡스톤 디자인
이 프로젝트를 진행할 때는 "어 이거 잘만 하면 괜찮겠는데" 라고 생각을 했는데 '잘만 하면'이 잘 안되는게 이런거구나 하고 깨닫게 해준 프로젝트였습니다. 이번 회고는 3학년 2학기 캡스톤디자인 프로젝트에 대한 회고입니다. 저는 평소에 밥을 먹을 때 유튜브가 없으면 밥먹기가 힘든 병에 걸려서 뉴스든 예능이든 뭐든 틀어놔야합니다. 평소처럼 밥을 먹으면서 유튜브를 틀어놨는데 이 날 만큼은 그냥 뉴스가 보고싶더라구요.. 그래서 아무 뉴스나 틀어놨는데 시각장애인이 킥보드 때문에 길거리 걷기가 힘들다는 뉴스를 보게되었습니다. 그리고 바로 뭔가 하나 떠올렸는데 그게 바로 이번 캡스톤 디자인의 프로젝트 주제였습니다. 어려웠던점 갑자기 뜬금없이 바로 어려웠던점이 나오는데 이번에는 이렇게 해야 뭔가 제 한이 풀릴것같은 ..
2023.12.24
no image
2023년 공개 SW 개발자 대회 참여 회고 (우수작 선정... 😥)
이카루스 동아리원들과 공개 SW개발자 대회에 참여하였습니다. 1차 평가는 합격했지만 2차에서 광탈당했네요 1차에 합격한 프로젝트는 우수작으로 선정되어 우수작 정보집에 실린다고 합니다(정신승리) 그래도 협업을 배우고 몰랐던 분야를 알아가는 과정에서 경험이었다고 생각됩니다.. 이번 기회를 발판으로 다음에 더 나은 결과를 만들 수 있으면 좋겠습니다.... ㅎㅎ 다른 개발자 블로그를 보니까 1년 또는 프로젝트 단위로 회고록? 같은 것을 쓰는걸 보았습니다. 저도 비슷하게 프로젝트가 끝나면 어떤 프로젝트였고 느낀점 같은 것을 썼었는데 이번에도 하면서 느낀점 같은 것을 써보려고 합니다! 프로젝트 소개 저희가 기획했던 프로젝트는 인공지능을 이용해서 쓰레기 분리수거 방법을 안내하는 것 이었습니다. 공개SW에 걸맞게 여러..
2023.12.24
no image
일본 규슈 공업 대학교 연구실 해외 연수 2주일차 후기
일본 九州工業大学 규슈공업대학에서 일본 연수 생활한지 벌써 2주가 지났습니다!! 처음 목표대로 일본인들의 생각, 가치관, 행동 등등 열심히 배워서 견문을 넓혀보자고 열심히 생활하고자 했습니다. 초전도체 연구실이기 때문에 매주 금요일 초전도체 세미나를 하고 매주 월요일 주간 진행 보고를 하고 나머지 시간은 연구실에서 일본 연구생들과 같이 공부를했습니다. 초전도체라는 완전 새로운 것을 배우다보니 진짜 어려운데 일본어로 하다보니 정신이 나갈것같지만 이것도 기회라고 생각하고 열심히 한것같습니다 ㅋㅋ 그리고 마침 한국에서 상온초전도체를 발견했다는 논문을 발표했다던데 마침 또 여기가 초전도체 연구실이다보니 일본 교수님께서는 흥미롭다고 이것에 대해 함께 찾아보는 시간을 가졌습니다. 그래도 저는 이게 이전 논문을 봐도..
2023.08.02
no image
일본 규슈 공업 대학교 연구실 해외 연수 1주일차 후기
이번에 예전부터 꿈이었던 일본 해외 연수를 다녀오게 되었습니다. 군대에 있을 때 JLPT N3를 공부하고 전역하고 취득했는데 이번에 써먹을 수 있었습니다. USG 공유대학에서 진행하는 일본 연수 활동이었는데 USG 사업단의 각 사업단별로 총 9명의 학생들과 함께 참여했습니다. 제가 가게된 곳은 일본의 규슈 지방의 규슈공업대학교로 가게 되었습니다. 규슈공업대학교의 본캠은 기타큐슈시에 있지만 정보공학부는 이이즈카시에 별도의 캠퍼스로 존재하기 때문에 이이즈카시에 머물게 되었습니다. 이번 일본 연수의 활동은 크게 3가지입니다. 일단 첫번째 TA(일본 현지 학생들) 튜터들이 저희들을 도와주면서 각각 배정받은 연구실에서 공부하는 활동을 하는것이 저희 연수 활동하고 두번째 현지 일본 기업을 견학해서 일본 현지의 기업..
2023.07.24
no image
파이썬 슬랙 챗봇 만들기 Slack Python ChatBot 코드 최신정보
파이썬 웹 크롤링 공부를 하면서 슬랙이라는 플랫폼을 알게되었고 파이썬으로 챗봇을 만들 수 있다는 것을 알게되었다. 이번에 파이썬으로 챗봇을 만들고 채팅오게 하는 방법을 써보려고 한다. 1. Slack 슬랙 회원가입 및 로그인 클라우드 기반의 비즈니스 커뮤니케이션 플랫폼 워크스페이스에서 팀원들과 협업이 가능하고 파일 및 공유가 가능하며 화상 회의도 가능하다 Slack은 생산성 플랫폼입니다 Slack은 팀과 커뮤니케이션할 수 있는 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다. slack.com 먼저 슬랙 사이트에 들어가서 회원가입 또는 로그인을 해준다. 구글 로그인 혹은 애플 로그인 연동이 가능하다. 이미 로그인된 상태라면 2번으로 넘어가면 된다. 2. Slack 슬랙 워크스페이스..
2023.07.11
no image
티스토리에 움짤 이모티콘 올리는 방법 feat. Tenor
티스토리 블로그의 단점이라고 한다면 일단 이모티콘이 별로 없다 물론 글쓰기 상단에 이모티콘이 있긴한데 이게 다인지는 몰라도 저거밖에 안보인다 카카오톡에서 구매한 이모티콘을 사용할 수 있으면 모르겠는데 그건또 아닌거같아서 진짜 별로인거같은데 그냥 글만 쓰는거보단 이모티콘을 넣어주면서 쓰면 좋을거같은데 이런 생각을 하다보니 네이버 블로그는 예전에 html 수정이 가능해서 거기에 이미지를 올리고 했던 기억이 떠올랐다 티스토리 글쓰기는 아직 HTML 수정 방식을 지원한다 글쓰기 상단에 기본모드를 누르면 HTML로 변경할 수 있는데 눌러보면 이렇게 HTML 태그로 이뤄진 화면으로 전환된다 HTML이 뭔지는 몰라도 되는데 정말 간단하게 생각하면 그냥 평소에 이렇게 우리가 글쓰는데 자동으로 저렇게 변환되어서 올라감 ..
2023.07.11
728x90
반응형

문제

 

적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다.

크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은 구역에 속한다. (색상의 차이를 거의 느끼지 못하는 경우도 같은 색상이라 한다)

예를 들어, 그림이 아래와 같은 경우에

RRRBB
GGBBB
BBBRR
BBRRR
RRRRR

적록색약이 아닌 사람이 봤을 때 구역의 수는 총 4개이다. (빨강 2, 파랑 1, 초록 1) 하지만, 적록색약인 사람은 구역을 3개 볼 수 있다. (빨강-초록 2, 파랑 1)

그림이 입력으로 주어졌을 때, 적록색약인 사람이 봤을 때와 아닌 사람이 봤을 때 구역의 수를 구하는 프로그램을 작성하시오.


코드

import sys
from collections import deque

sys.setrecursionlimit(10 ** 6)


def check_eq_rgb(stack, selected, picture, i, u):
    # 현재 색상과 동일한 상, 하, 좌, 우 색상을 비교
    if i - 1 >= 0 and picture[i - 1][u] == picture[i][u]:  # 상단 색상 비교
        add_stack(selected, stack, (i - 1, u))

    if u - 1 >= 0 and picture[i][u - 1] == picture[i][u]:  # 좌측 색상 비교
        add_stack(selected, stack, (i, u - 1))

    if u + 1 < len(picture[i]) and picture[i][u + 1] == picture[i][u]:  # 우측 색상 비교
        add_stack(selected, stack, (i, u + 1))

    if i + 1 < len(picture) and picture[i + 1][u] == picture[i][u]:  # 하단 색상 비교
        add_stack(selected, stack, (i + 1, u))

    while stack:
        coord = stack.pop()
        if coord not in selected:
            selected.add(coord)
            check_eq_rgb(stack, selected, picture, coord[0], coord[1])


def add_stack(selected, stack, coord):
    if coord not in selected:
        stack.append(coord)


def main():
    cnt = int(sys.stdin.readline())
    picture_normal = [sys.stdin.readline().strip() for _ in range(cnt)]
    picture_cblind = [list(line) for line in picture_normal]

    for i in range(len(picture_cblind)):
        for u in range(len(picture_cblind[i])):
            if picture_cblind[i][u] == "G":
                picture_cblind[i][u] = "R"

    selected_normal = set()
    selected_cblind = set()

    r, g, b = 0, 0, 0

    for i, line in enumerate(picture_normal):
        stack_normal = deque()  # 임시 저장할 스택

        for u, c in enumerate(line):
            if not (i, u) in selected_normal:  # 방문한 좌표가 아닌 경우
                # 현재 색깔 단위 카운트 추가
                if c == "R":
                    r += 1
                elif c == "G":
                    g += 1
                elif c == "B":
                    b += 1

                selected_normal.add((i, u))  # 셋에 방문했다고 추가
                check_eq_rgb(stack_normal, selected_normal, picture_normal, i, u)  # 상, 하, 좌, 우 색상 체크

    # print(r, g, b, "답: ", r + g + b)
    normal = r + g + b

    r, b = 0, 0

    for i, line in enumerate(picture_cblind):
        stack_cblind = deque()  # 임시 저장할 스택

        for u, c in enumerate(line):
            if not (i, u) in selected_cblind:  # 방문한 좌표가 아닌 경우
                # 현재 색깔 단위 카운트 추가
                if c == "R":
                    r += 1
                elif c == "B":
                    b += 1

                selected_cblind.add((i, u))  # 셋에 방문했다고 추가
                check_eq_rgb(stack_cblind, selected_cblind, picture_cblind, i, u)  # 상, 하, 좌, 우 색상 체크

    # print(r, b, "답: ", r + b)
    cblind = r + b

    print(normal, cblind)


if __name__ == '__main__':
    main()

해결

 

RGB 배열이 들어왔을 때 일반인과 적록색약이 봤을 때 색깔의 뭉텅이 개수를 구하는 문제이다

 

일반인과 색약의 기준에서 한번에 구하는 방법은 생각하지 못했다

그래서 각각 따로 보는 그림을 만들어서 답을 구했다

그러나 이렇게 구하면 각각 따로 반복문을 돌기 때문에 약간 노가다 느낌이 있다


참고

링크

 

 

 

728x90
반응형
728x90
반응형

문제 : 개인정보 수집 유효기간


풀이 방법

월 마다 일 수가 28일로 고정되어 있으니 일 단위로 계산을 하기가 실제 날짜 단위보다 쉽게 할 수 있다. 일 단위로 계산 해야할 날짜를 쪼개서 개인정보 날짜랑 비교를 하면 된다.


소스 코드

def solution(today, terms, privacies):
    answer = []
    
    # terms dict
    privacy_cat_dict = dict()
    for i in terms:
        i = i.split()
        privacy_cat_dict[i[0]] = i[1]       # {'A': '6', 'B': '12', 'C': '3'}

    today_date = trans_date(today.split('.'))   # 	679551

    for i, privacy in enumerate(privacies):
        privacy = privacy.split()           # ['2021.05.02', 'A']
        
        privacy_date_str = privacy[0]       # '2021.05.02'
        cat = privacy[1]                    # 'A'
    
        privacy_date = trans_date(privacy_date_str.split('.'))  # 678707
        
        if (privacy_date + (int(privacy_cat_dict[cat]) * 28)) <= today_date:
            answer.append(i+1)
    
    return answer

def trans_date(date: list):
    y, m, d = date
    cal_date = (int(y) * 12 + int(m)) * 28 + int(d)
    return cal_date

 

728x90
반응형
728x90
반응형

이 프로젝트를 진행할 때는 "어 이거 잘만 하면 괜찮겠는데" 라고 생각을 했는데

'잘만 하면'이 잘 안되는게 이런거구나 하고 깨닫게 해준 프로젝트였습니다.

 

이번 회고는 3학년 2학기 캡스톤디자인 프로젝트에 대한 회고입니다.

 

저는 평소에 밥을 먹을 때 유튜브가 없으면 밥먹기가 힘든 병에 걸려서 뉴스든 예능이든 뭐든 틀어놔야합니다.

평소처럼 밥을 먹으면서 유튜브를 틀어놨는데 이 날 만큼은 그냥 뉴스가 보고싶더라구요.. 

 

그래서 아무 뉴스나 틀어놨는데 시각장애인이 킥보드 때문에 길거리 걷기가 힘들다는 뉴스를 보게되었습니다.

그리고 바로 뭔가 하나 떠올렸는데 그게 바로 이번 캡스톤 디자인의 프로젝트 주제였습니다.

 


 

 

어려웠던점


갑자기 뜬금없이 바로 어려웠던점이 나오는데 이번에는 이렇게 해야 뭔가 제 한이 풀릴것같은 느낌이 들어서

이렇게 써보려고 합니다.

 

시각장애인이 킥보드 때문에 보행이 어렵다면 보행하는 길거리에 뭐가 있는지 알려주면 어느정도 해소가 되지 않을까 하는 생각에 스마트폰 또는 로봇카를 활용하여 객체를 인식하고 거리를 측정하는 프로젝트를 계획했습니다.

 

 

객체를 인식하는거야 yolo나 다른 인식모델이 있으니 후순위로 미루고 인식이 되었을 때

해당 객체와 얼마나 멀리 떨어져있는지 거리를 측정해서 알려줘야 하는데 이걸 어떻게 해야할지 몰랐습니다.

 

인터넷에 찾아보니 스테레오 비전 기법을 이용하면 실제 거리를 계산할 수 있다고 하던데,

 

 

스테레오비전에 대해 찾아보니 두 개의 카메라를 이용하는 것이더군요.

 

"오 내 폰에 카메라 두 개 이상 달려있는데 그냥 이대로 사용하면 되나?" 싶었는데

동일한 두 카메라를 사용해야 정확한 결과가 나온다고 하더군요.

 

유튜브에 스테레오 비전을 사용해서 거리를 측정하는 영상이 있나 찾아보니 은근히 있었습니다.

두 개의 웹캠을 연결해서 OpenCV에 스테레오 비전 함수를 사용하면 간단하게 되는 것 같아서 

 

웹캠을 스마트폰에 연결하고 영상을 어떻게 가져올지 찾아보았습니다.

아마 여기가 이번 프로젝트의 가장 큰 난관이 아니었을까 싶습니다...

 

 

대강 카메라 두 개를 허브에 연결해서 스마트폰에 연결하면 되지 않을까 그리고 안드로이드 API같은게 있지 않을까

했는데 아니었습니다.

 

ANDROID DEVELOPER에 USB Camera에 대해 찾아보니 문서가 있긴 한데 C++로 작성되어있고 

뭔소린지 하나도 몰랐습니다

 

JNI에 대해 어느정도 정말 어느정도 거의 쥐의 발톱만큼 알고 있었지만 이걸 여기서 사용할줄은 몰랐네요

웹캠을 연결하는 과정을 처음부터 작성해야한다고 생각하니 약간 어지러웠는데

 

어떤 일본인이 만든 UVCCamera 라는 라이브러리를 알게 되고 프로젝트랑 연결을 해보려고 했는데

해당 라이브러리가 마지막으로 업데이트 된 날짜가 6년전 7년전 이래서 현재 버전이랑 하나도 안맞고

애초에 C++로 만들어져있어서 이걸 어떻게 JAVA로 변환해야하는지도 모르겠고

연결 조차 안되어서 이걸 계속 해야하나 하던중

 

어떤 중국인이 만든 Libusbcamera 라는 라이브러리를 알게되었습니다. 이게 저의 구세주가 될줄은 몰랐죠

이 사람이 만든라이브러리는 UVCCamera 라이브러리를 기반으로 helper 클래스 등등을 만든 라이브러리인데

 

사실 이런거 필요없고 저는 UVCCaemra 라이브러리가 Java로 되어있는 부분이 정말 필요했습니다.

이 라이브러리는 비교적 최근거여서 버전이 맞는지 제대로 돌아갔고 결국 프로젝트에서 동작하였습니다.

 

하지만 Libusbcamera에서 사용하는 UVCCamera 버전은 최신 버전이 아니어서 업데이트가 안되어 있는 부분이 있는데

이런 부분은 일부 수정을 거쳐서 사용했습니다.

 

이렇게 개발환경 세팅하는데 거의 한 달 정도? 사용한 것 같습니다. 다른 일도 겹쳐서 여러 일을 동시에 하는데

정말 바빴던 것 같습니다

 


 

 

프로젝트 소개


앞서 설명했던 대로 이 프로젝트는 시각장애인이 안전하게 보행할 수 있도록 객체를 인식하고 거리를 측정할 수 있도록 개발하는 프로젝트입니다.

 

여기서는 스마트폰과 카메라가 연결되어있는 구성 1과 스마트폰과 로봇카가 연결되어 있는 구성 2 둘 중에 하나만 사용하거나 둘 다 사용하여 동작할 수 있도록 계획하였습니다.

 

거리를 측정하는 방식은 구성 1에서는 스테레오 비전, 구성 2에서는 라이다 센서를 이용합니다.

 

 

 

 

스마트폰에 연결되어 있는 두 개의 카메라를 이용해서 거리를 측정하는데 OpenCV 책을 보면서 스테레오 비전에 대해 

공부를 하면서 진행했습니다.

 

컴퓨터 비전에 대해서 이번에 처음 접한 분야이고 자바-코틀린, 애플리케이션에서 진행된 다른 프로젝트가 없다보니

참고할만한 예제가 없어서 상당히 어려웠던 것 같습니다.

 

객체가 탐지되고 거리를 측정하면 일정 주기로 사용자에게 TTS로 안내하면 안전하게 보행할수 있지 않을까

하는 것이 저희 프로젝트의 목표입니다.

 

 

파이썬으로 되어 있는 프로젝트를 참고해서 앱을 구현해봤는데, 문제점이 발생했습니다. 일단 USB CAMERA의 영상을 받아오는 함수가 인터페이스로 구현되어지는데 이게 카메라당 하나로 구현되는게 문제였습니다. 

 

파이썬에서는 하나의 반복문에서 동기식으로 구현되지만 앱에서는 비동기식으로 구현해야하니 영상이 매칭되지 않는 현상?이 발생했습니다.

 

이를 해결하기 위해 임시 방편으로 각각의 인터페이스 함수에서 거리 계산이 모두 동작되도록?

그냥 먼저 영상을 받아오면 그대로 거리 계산 함수가 동작되도록 코드를 구현했더니

어느정도 개선이 되었지만 완벽하게 해결하는 방법이 아니다보니 나중에 해결해야할 문제가 되었습니다.

 

지금까지 구현된건 Haar cascade를 이용해서 얼굴을 인식하고 disparity를 기반으로 거리를 계산합니다.

그리고 측정된 거리를 반환합니다.

딱 여기까지.... 그래서 완벽하게 개발된것이 아니며 프로토타입이라고 할수있는....

 

로봇카는 다른 팀원이 작업하는것이라 저는 잘 모르고 일단 제가 담당했던 애플리케이션은 여기까지 입니다..

 

시각장애인이 어떻게 애플리케이션을 동작시키냐 라고 생각할 수 있는데, 그래서 스마트폰을 흔드는 방식으로 제어할 수 있도록 Shake Gesture 방식을 도입했습니다. 스마트폰을 두 번 흔드면 바로 화면이 넘어갈 수 있도록 하는겁니다.

 

그리고 어느정도 시력이 존재하는 저시력자들을 위해 보색을 이용해서 화면을 구성했구요.

 

이 프로젝트가 계속될지는 모르겠는데 괜찮은 도전이었다고 생각됩니다.

 


 

 

만족했던 점


1. 비록 사용되지는 못했지만 CameraX 에대해 공부할 수 있는 기회가 생겼습니다.

 

처음에는 Camera X를 이용해서 인식을 할까 했는데 카메라 두 개가 필요한 것을 깨닫고 다른 방식으로 구현되었습니다. 만약 CameraX가 외부 카메라를 인식해서 사용할 수 있게 했다면 좋았을 테지만요.. 그래도 CameraX에 대해 공부할 수 있는 기회였습니다.

 

 

2. OpenCV에 대해 공부할 수 있는 기회가 생겼습니다.

 

OpenCV는 이번 프로젝트의 핵심 라이브러리중 하나입니다. 스테레오 비전을 이용하려면 이 라이브러리를 이용할 수 밖에 없죠. 아니면 일일이 구현하거나. 러닝 OpenCV3 책을 도서관에서 빌려 읽다가 이제는 구입까지 했습니다. 방학에 이 책을 정독해서 배워볼까 합니다. 이책은 C++로 적혀있어서 일단 C++로 시작하고 안드로이드에서는 네이티브 c 로 프로젝트를 시작하는 방식으로 변경할까 고민중에 있습니다.

 

c++로 하면 일단 동작시간이 빠른데, 사실 OpenCV 라이브러리가 C++로 되어있으면 별차이 없지 않을까 생각이 들지만요.

 

 

3. 이 프로젝트를 기회로 Tensorflow Lite에 관심이 생겼습니다.

 

단안카메라로 시차맵을 생성해서 거리를 측정할 수 있는 방법이 없을까 찾아보던중 Tensorflow Lite로 하는 프로젝트가 있었습니다. 아쉽지만 해당 프로젝트는 실제 거리를 반환하지는 않지만 신기해서 따라서 해보면서 공부하고 있습니다.

 

조금 더 응용하면 실제 거리도 측정하는 방법을 찾을 수 있지 않을까요.

 

 


 

 

 

아쉬웠던점


1. 몰랐던 분야여서 공부하며 진행했기 때문에 역시나 개발 속도가 늦어졌습니다.

 

하던 분야에서는 그저 그런 프로젝트가 나올 것이 분명했기에 새로운 분야를 찾을 수 밖에 없었습니다. 그리고 결과는 역시나 원래의 목표만큼 진행되지는 못했습니다. 이러한 부분은 어쩔 수 없었나봅니다.

 

 

2. 인원 역할 분배

 

약간 반 억지로 팀을 구성해서 진행해서 그런지 팀원들이 자율적으로 진행하지 않았습니다. 하자 해야 하고 먼저 말을 하지 않으면 하지 않는 형태였습니다. 친구들이여서 팀을 꾸렸지만 프로젝트에서는 현실적인 거리와 멀었나봅니다. 이전에도 비슷한 경험을 하였는데 팀을 꾸릴 당시 비슷한 시기여서 같은 실수를 또 반복했네요.

 

 

3. 짧은 개발 기간

 

한 학기 거의 3달 동안 진행한 결과였는데, 보통은 1학기때부터 이어서 하지만 도중에 새로운 주제로 하다보니 개발 기간이 짧았습니다. 이번 프로젝트를 이어서 진행할지 아니면 새로운 프로젝트를 진행할지는 더 고민을 해봐야겠습니다.

 

 

4. 스테레오 카메라 

 

웹 캠 두개를 사용하지 않고 애초에 스테레오 카메라를 구매해서 사용했다면 프레임 동기화 문제는 이미 해결했을텐데 이 부분이 정말 아쉽습니다. 라이브러리 특성을 잘 모르고 재료를 구매한 결과였던 것 같습니다. 파이썬에서는 상관없지만 안드로이드에서는 카메라 하나당 콜백함수로 구현되기 때문에 많이 아쉬운 결저이었던 것 같습니다.

 


 

 

다음에 시도해볼점


1. 스테레오 카메라

 

이 프로젝트를 계속 진행한다면 우선 스테레오 카메라부터 구매할 예정입니다. 카메라를 하나의 쓰레드로 관리한다면 그것만으로도 성능 개선의 효과를 가져올 수 있다고 생각하고 있습니다.

 

 

2. c++ 프로젝트

 

안드로이드를 C++로 개발할 수 있습니다. OpenCV 라이브러리는 C++로 작성되어있기 때문에 이미지 처리 과정을 전부 C++에서 동작하게 만든다면 속도 개선효과를 가져올 수 있다고 생각합니다.

 

 

 

728x90
반응형
728x90
반응형

이카루스 동아리원들과 공개 SW개발자 대회에 참여하였습니다.

 

1차 평가는 합격했지만 2차에서 광탈당했네요

1차에 합격한 프로젝트는 우수작으로 선정되어 우수작 정보집에 실린다고 합니다(정신승리)

 

그래도 협업을 배우고 몰랐던 분야를 알아가는 과정에서 경험이었다고 생각됩니다..

이번 기회를 발판으로 다음에 더 나은 결과를 만들 수 있으면 좋겠습니다.... ㅎㅎ

 

다른 개발자 블로그를 보니까 1년 또는 프로젝트 단위로 회고록? 같은 것을 쓰는걸 보았습니다.

저도 비슷하게 프로젝트가 끝나면 어떤 프로젝트였고 느낀점 같은 것을 썼었는데

이번에도 하면서 느낀점 같은 것을 써보려고 합니다!

 

 

프로젝트 소개


 


 

저희가 기획했던 프로젝트는 인공지능을 이용해서 쓰레기 분리수거 방법을 안내하는 것 이었습니다.

 

공개SW에 걸맞게 여러 사람들이 직접 데이터를 추가할 수 있으면, 공익적, 교육적 측면에서 활용할 수 있는 방법이 있을거라고 판단했고 주제로 잡았던 것이었죠

 

아이디어는 좋았는데 다른 팀들도 같은 생각을 하는 사람들이 많았는지 동일 주제의 프로젝트가

생각보다 많이 나왔었습니다...

 

공개 SW개발자 대회 주최측에서 멘토를 매칭시켜줘서 조언을 들을 수 있도록 해주었는데, 이 때 차별성을 강조하던게

이제와서 보니까 다른 팀들도 이 주제와 같은 프로젝트를 많이 했으니 그 팀들과 경쟁할 수 있도록 알려줬던 것이었네요..

 

물론 절대 흘려듣지 않고 분리수거 게임을 추가해서 차별성이 있다고 생각이 들었지만

심사위원 생각에는 아니었나봅니다.

 


 


 

저희가 생각했던 기능은 사용자가 쓰레기 사진을 찍으면 서버에 있는 인공지능을 이용하여 이미지 분류를 알려주고

해당 분류에 해당하는 쓰레기 결과를 반환하여 올바른 분리수거 방법을 안내하는 것

 

그리고 분리수거 마크에 대한 설명을 비롯하여 각종 분리수거 및 환경 등등의 정보 안내 기능,

지역별 쓰레기 버리는 위치 안내 등등

 

현재 출시되어 있는 쓰레기 분리수거 방법 안내 앱과의 차별성을 위해 다양한 기능을 계획했고 구현했습니다.

 

 

 


 

 

Keep - 프로젝트에서 만족했던 부분


1.  이번 프로젝트를 하면서 좋았던 점은 무엇보다 서버 및 인공지능 분야와 협력을 통해 개발 되었으며 일종의 테스트를 거친 프로젝트라고 할만한 것을 만들었다는 것에 만족감을 느꼈습니다. 

 

지금까지는 이 정도로 구현된 프로젝트를 만들어본 적이 없었는데 게다가 우수작 정보집에 실릴 정도니까 나름 자부심을 느끼고 있습니다... (물론, 수상은 ㅠㅠ...)

 

 

2. 애플리케이션을 개발하면서 사용하지 않았던 혹은 몰랐던 기술 스택을 알게 되었고 공부할 수 있었습니다.

 

카메라 인텐트를 사용해서 사진을 촬영하고 저장할 수 있었고, 지금까지는 OkHttp3를 이용해서 서버와 통신을 하였지만, Retrofit 2를 이용하여 좀 더 정규화된? 통신 방법을 알 수 있게 되었습니다. 

 

실무에서는 OkHttp3 보다 Retrofit 2를 이용한다는 것을 알게 되었고 Retrofit이 OkHttp3를 기반하여 제작되었다는 것도 알게되었습니다. 이번 프로젝트에서 서버와 통신하는 기능이 많았는데 Retrofit을 이용한 통신에 대해 공부할 수 있었습니다.

 

그리고 뷰 페이저2와 인디케이터를 이용하여 다양한 뷰를 만들어볼 수 있는 기회가 되었고,

MVVM 아키텍처를 기반으로 애플리케이션을 개발하여 자연스럽게 MVVM을 배울 수 있었습니다.

 

 

3. 애플리케이션 최적화에 대해 더 공부할 수 있었습니다.

 

쓰레기 사진을 촬영하여 서버로 전송하는데 시간이 오래걸리던 문제점을 이미지 압축 기법을 사용하여 전송함으로써 시간을 단축할 수 있었습니다. 

 

 

4. 데이터 준비를 위해 크롤링 기법을 공부할 수 있었습니다. 

 

쓰레기 분리수거에 대한 정보를 모으기 위해 인터넷에 존재하는 정보를 크롤링하여 데이터를 마련할 수 있었습니다. 

 

 

이번 프로젝트에서는 전반적으로 기술 스택에 관련된 내용인 것 같습니다. 아직 배우는 입장이라 많은 것을 알지는 못하지만 공부 하면서 진행하였고 괜찮은 구현 결과가 나온 것 같습니다.

 


 

 

Problem - 부정적인 요소, 아쉬웠던 점


1. 프로젝트 참여 인원의 역할 분배 

 

이번 프로젝트에 1학년과 3학년이 참여를 했었는데 인원 수가 생각보다 많았습니다. 실력에 상관하지 않고 인원을 모집했었기 때문에 인원은 많지만 손이 많이 가던 프로젝트였던 것 같습니다. 개발 기간이 많지 않았기 때문에 며칠 동안 밤을 새면서 작업을 했었던 기억이 나네요...

 

이번이 마지막이라고 생각하고 프로젝트에 임했었는데, 이 부분이 정말 아쉬운 부분이었던 것 같습니다.

 

 

2. 여건상 좋지 못했던 개발 기간

 

저번에 일본에 연수를 다녀오느라 거의 한 달 정도 공백 기간이 있었습니다. 그래서 다른 팀에 비해 한 달 정도 프로젝트에 신경을 못쓰는 상황이 생겼습니다. 이부분은 명백히 개인적인 부분이지만 이러한 계획도 프로젝트에 임할 때 제대로 신경을 썼더라면 더 나은 결과가 나왔을 것이지만 제대로 신경을 못썼던 부분이 있던 것 같습니다.

 

 

3. 깊은 기능 vs 넓은 기능

 

이부분이 정말 생각을 많이 했었는데 저희는 후자 쪽으로 선택을 했습니다. 다른 앱과의 차별성을 위해 애플리케이션에 가능한 많은 기능을 넣어보자라고 생각을 했고 기능 구현을 했습니다.

 

그래서 쓰레기 버리는 위치라던가 뉴스라던가 게임이라던가 기능을 추가했습니다.

 

실제 수상된 작품과 비교했을 때 기능의 수는 저희가 훨씬 많았지만, 단순히 위치만 글자로 알려주는 정도였고

수상된 작품은 지도에 마커를 찍어서 보여주는 등의 차이가 있었습니다.

 

많은 기능이 더 높은 퀄리티를 보여주는지는 별개의 문제라고 알게 되었습니다.

 

 

4. 코틀린 멀티플랫폼

 

이걸 며칠전에 알게되었는데 코틀린 & 컴포즈로 개발을 하게되면 안트로이드 & ios 동시 빌드가 되더군요... 

플러터를 이용하면 안드로이드, ios 동시 빌드가 되는건 알고 있었는데 코틀린으로 네이티브 개발이 가능한 상황에서 ios 빌드도 된다니.. 이걸 일찍 알았더라면 프로젝트 시작도 컴포즈로 시작하고 두 개의 플랫폼에서 동작하는

우위를 가져갔을텐데 정말 아쉬운 부분입니다.

 

 

이번 프로젝트의 아쉬운 점은 정보의 부재 및 경험의 부재로 인해 발생한 것 같습니다. 이번 경험으로 다음 프로젝트를 진행한다면 보완하여 더 나은 프로젝트로 진행되면 좋겠습니다.

 


 

 

Try - 다음 프로젝트에서 시도해볼 점


요즘 안드로이드 컴포즈를 공부하고 있고 인공지능도 겸해서 공부하고 있습니다. 

기회가 된다면 안드로이드에 온디바이스 AI를 탑재하여 서버없이 동작하는 애플리케이션을 주제로 진행하고싶습니다.

 

그리고 이번 경험에서 보완할점을 바탕으로 진행하고자 생각중입니다.

 

 

https://github.com/ICARUS-Coding-Club/Recycle-App

 

GitHub - ICARUS-Coding-Club/Recycle-App: this is recycle app.

this is recycle app. Contribute to ICARUS-Coding-Club/Recycle-App development by creating an account on GitHub.

github.com

 

 

공개 SW 개발자 대회 2차 평가 보고 고양이 카페에서 찍은 사진... 고양이는 귀엽네 ㅎㅎ

 

 

 

 

 

728x90
반응형
728x90
반응형

 
일본 九州工業大学 규슈공업대학에서
일본 연수 생활한지 벌써  2주가 지났습니다!!
 
처음 목표대로 일본인들의 생각, 가치관, 행동 등등
열심히 배워서 견문을 넓혀보자고 열심히 생활하고자 했습니다.
 

 
초전도체 연구실이기 때문에
매주 금요일 초전도체 세미나를 하고
매주 월요일 주간 진행 보고를 하고
나머지 시간은 연구실에서
일본 연구생들과 같이 공부를했습니다.
 
초전도체라는 완전 새로운 것을 배우다보니
진짜 어려운데 일본어로 하다보니
정신이 나갈것같지만
이것도 기회라고 생각하고 열심히 한것같습니다 ㅋㅋ
 
 

 
그리고 마침 한국에서 상온초전도체를
발견했다는 논문을 발표했다던데
마침 또 여기가 초전도체 연구실이다보니
일본 교수님께서는 흥미롭다고
이것에 대해 함께 찾아보는 시간을 가졌습니다.

그래도 저는 이게
이전 논문을 봐도 증거가 미약하다보니
이것이 진짜인지 아닌지는 좀 더 시간을 두고 봐야할것같습니다.
 
그런데도 한국에서는 초전도체 관련주식이계속
상승세를 향하는것을 보니
이게 주식이 투자인지 아닌지 좀 그렇네요
 

 
그리고튜터랑 공부할 때 SQUID라는
장치에 대해 배웠는데
논문을 읽고 간단히 정리만 하라고 해서
진짜 진짜 간단히 만들었습니다 ㅋㅋㅋㅋ
 
그리고 제 전공이랑 그나마 관련있는 프로세싱을
공부했다고 발표를 했습니다.
 

 

일본 연구생이 프로세싱이라는 프로그램으로 초전도체
주위로 흐르는 자기장을 시각화 하는 코드를 보여줬습니다.
 

 
일본인 연구생이 만든 코드인데 정말 잘만든것같습니다.
교과서의 자기장 방정식을 보고 코드에 넣었다고 했는데
프로세싱이라는 툴을 제대로 사용하려면 좀 더 공부를 해야할 것 같습니다.

 

void setup() {
  size(500, 500); // 화면의 크기를 500 x 500 픽셀로 설정합니다.
  strokeWeight(2); // 선의 굵기를 2로 설정합니다.
  background(255);
}

void draw() {
  initDraw();
  int n = 8; // 잎 수
  float a = 100; // 스케일링 요소
  int points = 360; // 그리는 점의 수, 더 높은 값은 더 부드러운 곡선을 만듭니다.

  beginShape();
  for (int i = 0; i < points; i++) {
    float theta = map(i, 0, points, 0, TWO_PI); // 각도를 라디안으로 변환합니다.
    float r = a * sin(n * theta); // 극좌표에서의 반지름을 계산합니다.
    float x = r * cos(theta); // 극좌표를 직교좌표로 변환합니다.
    float y = r * sin(theta);
    vertex(x, y);
  }
  endShape(CLOSE);
  noFill();
  ellipse(0, 0, 2 * a, 2 * a);
}

void initDraw() {
  translate(width / 2, height / 2); // 중심으로 좌표계 이동
  scale(1, -1); // y축을 뒤집음

  // x 축 그리기
  line(-width / 2, 0, width / 2, 0);
  // y 축 그리기
  line(0, -height / 2, 0, height / 2);

  // x 축 화살표 그리기
  line(width / 2, 0, width / 2 - 10, -10);
  line(width / 2, 0, width / 2 - 10, 10);

  // y 축 화살표 그리기
  line(0, height / 2, 10, height / 2 - 10);
  line(0, height / 2, -10, height / 2 - 10);
  
}

 
그리고 이것은 정엽곡선을 프로세싱으로
시각화 한것인데 여기서 살짝 놀랬던것이
 
https://rikeilabo.com/cycloid

サイクロイドの超解説【数学Ⅲ】(トロコイド・エピサイクロイド・ハイポサイクロイドetc) |

東大塾長の山田です。 このページでは、「サイクロイド」の詳しい解説と,その他の入試で登場する媒介変数表示で表される曲線について解説していきます。 ぜひ勉強の参考にしてくださ

rikeilabo.com

 
일본 고등학생이 대학 입시에서 자주 나오는
사이클로이드 방정식을 공부한다는것이
너무 신기했습니다 ㅋㅋㅋㅋㅋ
 
여기 튜터는 이런것을 코딩으로 만드는 것을 좋아한다고 하는데
저도 고등학생때 코딩으로 이런걸 할줄 알았으면
좀 더 재밌었겠다라는생각이 지금들어서 후회가 되네요
 

 

그리고 일본 연구실 분들이랑 같이 회식도 다녀왔습니다.
교수님이 하시는 말씀으로는
코로나 때문에 4년동안 회식이 거의 없었다고
이번에 온사람중에는 4년만에 이런 자리에 온사람도 있다고 합니다.
 
저희가 갔던곳은 술무한리필 식당인데
일본인들은 술을 한두번 리필하면 저희만 한 5번 리필하고
진짜 재밌었습니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
 
그리고 교수님이 여기 학생들과 잘어울려서 그런지
새로운 문화도 많이 배운다고 말씀하셨습니다.
 
여기 연구생중에 왜 이 연구실에 들어왔냐고 물어보니까
교수님이 좋아서 들어왔다는 말을 듣고 되게
여기는 행복해보인다 라고 생각했습니다 ㅎㅎㅎ
 

 
회식이나 이런 자리가 없으면
원룸에서 딱히 요리할 도구도 없고해서
그냥 사먹게 되는데
마트에 도시락이 너무 잘나오고 간식도 잘나와서
기껏 운동해놓은것들 조금씩 사라지고 있어서 슬픕니다 ㅋㅋ
 
마트에 음식이 너무싸고 맛있는것들이 많아서
안갈수가 없더군요
 

 
그리고 집에 티비가 있어서 간간히 틀어놓는데
일본어 듣기실력이 늘었으면 좋겠네요
어느정도 들리긴하는데 한자를 모르니까
보는게 힘들더군요
 
그래서 요즘 하루에 한자 몇개씩 보는중입니다 ㅎㅎ
 

 
그리고 닌자보이 탄다로인가 탄타로인가
이게 티비에 나와서 진짜 반가웠습니다
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
 
이거 투니버스에서 자주보던건데
이게 공중파? 지상파? 그냥 틀었는데
나와서 진짜 신기했습니다
 

 
저희집 근처입니다
진짜 촌인데 아무것도 없고
학교를 지나고 버스정류장 쪽으로 가면
식당이라던가 이자카야라던가
뭔가 놀거리가 있더군요
 
저희집 근처는 완전촌 ㅋㅋ
 

 
주말에는 문화탐방으로
벳푸랑, 구마모토성
마메다마치랑 유후인에 다녀왔습니다
 
뱃놀이는 예전에도 다녀왔었는데
오랜만에 탔는데도 그때랑 변함없이
노래불러주시고 닌자놀이 해주시고 ㅋㅋ
 
구마모토성은 굉장히 컸고
진짜 일본 성들은 다 비슷비슷하게
생긴것을 이번에 알게됐습니다.
 
오사카성도 이런느낌이었는데
여기도 비슷하더군요
 
유후인의 킨린호수도 다녀오고
진짜 재밌었습니다
 
특히 주조하는곳에다녀왔는데
거기서 술2병이나 샀습니다 ㅎㅎ
 

 

유후인 꼭 먹어야하는 꿀벌 아이스크림
완전 비싸죠 800엔인가 ...
 

 
완전 더웠는데
마메다마치는 은근 다른지방보다는
시원시원했습니다.
 

 
그리고 집에 돌아오는길에 무지개
일본어로는 니지라고하죠
 
일본에서 무지개를보다니 ㅋㅋㅋㅋㅋ
 

 
진짜 다시금 느끼지만 일본연수는 꿈에그리던건데
이렇게 할 기회가 생겨서 너무 좋고
이번 기회를 꼭 전부 다남기려고 합니다
 
다음에는 토익을 해서 미국연수도 다녀오고싶네요 ㅎㅎ..
 
 

728x90
반응형
728x90
반응형

 

이번에 예전부터 꿈이었던 일본 해외 연수를 다녀오게 되었습니다.

군대에 있을 때 JLPT N3를 공부하고 전역하고 취득했는데 이번에 써먹을 수 있었습니다.

 

USG 공유대학에서 진행하는 일본 연수 활동이었는데

USG 사업단의 각 사업단별로 총 9명의 학생들과 함께 참여했습니다.

 

제가 가게된 곳은 일본의 규슈 지방의 규슈공업대학교로 가게 되었습니다.

규슈공업대학교의 본캠은 기타큐슈시에 있지만

정보공학부는 이이즈카시에 별도의 캠퍼스로 존재하기 때문에

이이즈카시에 머물게 되었습니다.

 

 

이번 일본 연수의 활동은 크게 3가지입니다.

 

일단 첫번째

 TA(일본 현지 학생들) 튜터들이 저희들을 도와주면서

각각 배정받은 연구실에서 공부하는 활동을 하는것이 저희 연수 활동하고

 

두번째

현지 일본 기업을 견학해서 일본 현지의 기업이 돌아가는

현황을 배우는 것이고

 

마지막 세번째는

일본어를 배우면서 일본 문화를 탐방하고 문화교류를 하는 것입니다. 

 

 

일본 해외 연수 기간은 7월 16일 부터 8월 10일 까지

 

일요일에 일본에 도착을 했는데 정식 일정은 화요일부터여서

숙소에 짐풀고 근처 식당에서 밥먹고 했습니다.

 

 

여러분들도 하나머니 트래블로그 카드 신청해서 환전하세요.

공항에 세븐일래븐 세븐뱅크 ATM에서 환전하면 환전 수수료 무료고

 

꼭 환전안해도 그냥 카드 결제해도 수수료가 완전 없으니까

다른 카드 혜택같은거 딱히 챙기는거 없다면 이거 쓰는게 무조건 이득입니다.

 

이번에 저희들 때문에 튜터들이 너무 고생하는게 아닌지 모르겠지만..

첫날 일본에 도착해서 튜터들의 도움을 받아서 숙소에 짐을 풀 수 있었습니다.

 

원래는 다른 학생과 마찬가지로 SR 학생 기숙사에 머물 예정이었지만

저희는 근처 원룸에서 자취를 하면서 지내게 되었습니다.

 

 

여기는 규슈 공업대학교 학생 기숙사입니다.

3인실이고 공유 주방이 있으며 각각의 개인 방이 있습니다.

 

세탁기나 화장실, 욕실은 공유하고 티비랑 가스렌지등이 있었습니다.

 

 

인터넷은 제공되지 않고 인터넷을 개인적으로 설치해야하는 것 같습니다.

랜선을 꽂아보니 인터넷이 안된다고 하더라구요.

비데가 있어서 살짝 부럽더군요. 저희 원룸에는 없거든요 ㅠㅠ

 

 

저희가 학교에 갔을 때 마침 규슈 공업대학교의 오픈캠퍼스 행사중이었습니다.

오픈캠퍼스는 학교에서 연구중인 활동을 보여주면서 학교를 홍보를 하는데

 

뭔가 되게 대단하다고 느껴졌습니다.

교수님이 직접 자신의 연구를 설명해주시는데 멋있었고 자신의 연구에 자부심이 느껴지더라구요.

 

고등학생들도 많이 왔다가고 근처 어른분들도 많이 왔다가더군요.

저는 일본어를 듣는건 어느정도 되는데 말하는게 안되어서 좀 걱정이었는데

영어로도 설명해주시고 되게 친절했습니다.

 

 

규슈 공업대학교 이이즈카캠퍼스가 존재하는 이이즈카시는 논과 밭이 정말 많은 시골이었습니다.

밤에는 정말 어둡고 밤하늘에는 별이 좀 많이 보이고 특히 풀냄세가 정말 많이 났습니다.

 

 

그래도 일단 학교 근처에 할로데이라는 큰 슈퍼가 있어서 싼 가격에 좋은 품질의 물건을 구매할 수 있어서

너무나 좋았고 뭔가 해먹기가 너무 애매해서 저녁을 사먹는데 도시락이

편의점 처럼 너무 잘되어있는데 종류도 다양하고 빵도 많고 특히 푸딩 종류가 너무 많아서 좋았습니다.

 

할로데이 옆에는 다이소가 있어서 문구류나 옷걸이 같은 것을 살 수 있어서 너무 좋았고

 그 옆에는 약국이 있는데 확실히 다른 곳과 비교해서 여기 근처의 물가가 싸서 너무 좋았습니다.

근처 다른 현지인들도 많이 오는 곳 인지 늦게까지도 영업하고 있어서 좋았습니다.

 

 

일단 저는 오타베센세라고 하시는 교수님의 연구실에서 공부하게 되었습니다.

오타베 교수님은 초전도체로 세계를 연결하는 연구를 하시고 있었습니다.

 

정말 친절하시고 학생들과 적극적으로 교류하시려고 하시는 모습이 눈에 보였습니다.

그리고 오타베 교수님의 소속 연구생들과 서로 알게 되었는데

정말 적극적이고 친절하고 다정했습니다. 타지에서 사람을 잘만나야하는데

정말 고맙게도 다들 너무나 친절해서 좋았습니다.

 

튜터분들중 한분은 한국의 아이돌을 좋아하셨고 한국어를 배우려고 하시는 분이 있으셔서

저는 일본어를 배우고 그분은 한국어를 배우고 너무 재밌었습니다.

 

이렇게 다 좋은데 한가지 문제점이 생겼습니다.

 

제 전공은 컴퓨터소프트웨어 전공인데, 이번에 공부하게된 연구실의 전공은 초전도입니다.

 

 

초전도 현상 특정 물질이 임계온도 이하에서 전지 저항이 0이 되고 내부 자기장을 완전히 밀어버리는 현상

고등학교 물리 시간에 조금 알고 있었는데 이번에 조금 더 알게 되었습니다.

 

컴공 3년동안 한번도 초전도를 들어본적이 없었고 다 까먹은 내용이었는데

이번에 다시 알게 되어서 걱정이 좀 많이 되었습니다.

 

제 전공이랑은 완전히 다른 분야인데 그나마 다행인건 컴퓨터프로세싱이라고 물리 현상을

컴퓨터 그래픽으로 보여주는거라고 하는데, 초전도 연구실에서 프로세싱이라는 프로그램으로

컴퓨터프로세싱을 하는 것을 보고 최근에 공부하는 Three.js 로 만들어보면 어떨까 싶어서

 

 

연구실에서 1주일에 한 번 연구 진행 보고시간에 초전도 현상을 Three.js 로 만들어보았습니다.

일주일에 한번 이렇게 공부한 것(연구 결과)을 보고하는데 연구 진행 보고와

쉬는 시간 또는 자유 시간에 무엇을 했는가, 취미 등등을 같이 보고 하는 것이 되게 신기했습니다.

 

뭔가 자유가 느껴진다고 해야하나 한국의 연구실에서는 세미나 보고라고 해도

연구 결과에 대해서만 집중을 하는데 여기서는 개인적으로 무엇을 했는지도 발표를 하니까 재밌을거같더군요.

 

 

아직은 1주일 밖에 안지나서 뭔가 이렇다 할것은 없었지만 초전도체를 연구생들과 같이 공부하면서 일본 문화 교류도 하고

일본인들에게 한국어를 가르치고 저도 일본어를 배우고 파이썬 문법을 알려달라고 해서 파이썬에 대해서 조금 알려드리고

그리고 일본 관광지를 조금 다녀오고 그렇게 지낸거같습니다.

 

그리고 학교에 대해 조금 더 설명하자면 보통은 단기방문학생이지만 유학생이라고 하고

 

 

이렇게 학생증을 줍니다.

써있는건 규슈공업대학교 단기방문학생이라고 써있는데,

이 학생증으로 학교의 도서관이나 학생 이용 시설을 이용할 수 있습니다.

 

 

그리고 학생식당은 우리나라의 학생식당은 보통 음식을 선택하기 전에

결제를 한다거나 하는데, 일본은 음식을 선택해서 가져온 다음

결제를 하는 시스템이었습니다.

 

여기 학교만 그런지는 잘 모르겠지만 일단 저는 생소해서 되게 신기했습니다.

 

메뉴는 은근 다양한데 우동 하나에 거의 300엔 정도이고 사이드 까지 다해서

배부르게? 먹을 정도면 500엔 정도면 충분하기 때문에 학생들이 꽤나 만족해합니다.

 

 

일단 이번주는 초전도체에 조금 배우고

해당 모델을 컴퓨터프로세싱을 통해서 시각화해보았습니다.

 

인터넷으로 공부를 좀 많이 하고 싶은데

일정이 9시 출근해서 4시쯤 집에 돌아가는데 집으로 돌아가면

와이파이가 하루 제한 3기가라서 뭘 하지도 못하고

 

주말에는 또 자체적으로 문화 탐방이 있으니까 개인적으로 시간이 도통 나질않아서

뭔가 하려고 했던 공부를 제대로 못하는 경우가 대부분이었습니다.

 

그래도 일본 연수 목적대로 일본 연구실 생활을 하면서

일본인들과 함께 공부를 하고 다양한 견문을 넓히고자 일본 연수를 신청했기 떄문에

일단 해당 목적은 순조롭게 진행중인 것 같습니다.

 

초전도 공부라고 해도 제 나름대로 전공과 연관지어서 공부하고 있고

일본어도 현지인과 같이 있으니까 일본어 공부도 잘 되는 것 같고

 

의미 있는 시간을 보내고 있는 것 같아서 다행입니다.

 

 

 

728x90
반응형
728x90
반응형

파이썬 웹 크롤링 공부를 하면서 슬랙이라는 플랫폼을 알게되었고 파이썬으로 챗봇을 만들 수 있다는 것을 알게되었다.

이번에 파이썬으로 챗봇을 만들고 채팅오게 하는 방법을 써보려고 한다.

 

1. Slack 슬랙 회원가입 및 로그인

클라우드 기반의 비즈니스 커뮤니케이션 플랫폼

워크스페이스에서 팀원들과 협업이 가능하고 파일 및 공유가 가능하며 화상 회의도 가능하다


 

Slack은 생산성 플랫폼입니다

Slack은 팀과 커뮤니케이션할 수 있는 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.

slack.com

 

 

먼저 슬랙 사이트에 들어가서 회원가입 또는 로그인을 해준다. 구글 로그인 혹은 애플 로그인 연동이 가능하다.

이미 로그인된 상태라면 2번으로 넘어가면 된다.

 

 

2. Slack 슬랙 워크스페이스 생성

 

팀원들과 채팅, 파일 공유, 화상 회의를 할 수 있는 공간이다.


 

만약 로그인을 하게되면 이러한 화면이 나오는데 워크스페이스 생성 버튼을 눌러서 워크스페이스를 만들어주면 된다.

 

 

Slack 슬랙 워크스페이스는 무료로 만들 수 있다. 위 동의 체크를 하고 워크스페이스 생성 버튼을 누르면된다. 마케팅 소식도 받고 싶으면 체크해도 된다.

 

 

워크스페이스 이름은 원하는대로 사용하려는 의미에 맞게 적고 다음 버튼을 누르면된다. 나는 MyMacroChatBotServer 이걸로 적고 다음 버튼을 눌렀다. 

 

 

그리고 워크스페이스에서 사용할 이름과 프로필 사진을 설정하고 다음 버튼을 누르면 된다. 

 

 

그리고 워크스페이스에 초대할 사람의 이메일을 적고 다음 버튼을 누르거나 "이 단계 건너뛰기"를 눌러서 건너뛰면된다

나중에 다시 초대할 수 있으니 걱정하지말고 넘어가면 된다.

 

 

그리고 뭘또 적으라고 하는데 하고싶은 채널명으로 적으면된다. 나는 해당 채널에 봇을 추가하고 알림을 오게할것이므로

매크로 알림이라고 적고 다음 버튼을 눌렀다. 채널 이름은 아무거나 적어도 상관없다.

 

 

그러면 이렇게 워크스페이스가 만들어진다. 디스코드 서버랑 비슷하게 생겼는데 이제 봇을 만들고 난 다음에 워크스페이스 채널에 추가해보도록 하겠다. 

 

 

3. Slack 슬랙 API 봇 만들기

Slack API로 챗봇을 만들고 권한을 설정해준다.


https://api.slack.com/

 

Slack은 생산성 플랫폼입니다

Slack은 팀과 커뮤니케이션할 수 있는 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.

slack.com

 

https://api.slack.com/

 

위 API 사이트로 들어가서 우측 상단에 "Your apps" 글자를 클릭하자.

 

 

그러면 이런 화면으로 오게 되는데 위에 "Create an App" 초록색 버튼을 눌러주자

 

 

그러면 뭔가 선택하는 창이 뜨게 되는데 위에 "From scratch" 로 되어있는 곳을 선택하자.

 

 

그리고 만들려는 봇의 이름과 아까 만들었던 워크스페이스를 선택하고 "Create App" 버튼을 눌러주자 App 이름은 나중에 변경할 수 있다고 한다. 사용하려는 의미에 맞게 설정하는 것이 좋을 것 같다.

 

 

그러면 이런 화면으로 오게 되는데 여기는 기본적인 설정을 하는 곳인데 위 6개 버튼으로 바로갈 수 있다.

그러나 딱히 건드릴건 없고 채팅 권한만 설정해주면 되기 때문에 "Permissions" 버튼을 눌러주자

 

 

그리고 화면을 조금 내리면 Scopes 라는 곳이 보일텐데 여기 "Add an OAuth Scope" 버튼을 누르고 "chat" 이라고 검색을 하면 chat:write 가 나오는데 눌러주자

 

 

그러면 이렇게 상단에 Success 가 뜨면서 적용이 완료된다. 그리고 다시 위로 올라가자

 

 

위로 올라가면 "Install to Workspace" 버튼이 있는데 누르면 된다. 눌러보면

 

 

이런 창이 뜨는데 허용 버튼을 눌러주면 토큰이 생성된다.

 

 

이걸 Copy 버튼을 눌러서 복사해두면 된다.

 

이제 다시 우측 상단에 "Your App" 버튼을 눌러주자

 

 

그러면 이런 화면이 뜨는데 "I Agree" 버튼을 눌러주고 워크스페이스로 다시 가보자

 

 

그런다음 봇을 추가하려는 채널을 마우스 오른쪽 클릭하면 나오는 창에서 "채널 세부정보 보기" 버튼을 클릭한다.

 

 

그리고 "통합" 탭으로 가서 "앱 추가" 버튼을 눌러준다.

 

 

그러면 "워크스페이스에서" 라는 구역이 생기는데 여기에 본인이 만든 봇이 나타날것이다. 추가 버튼을 눌러서 추가해주면

봇생성과 추가가 완료된다.

 

 

이제 파이썬으로 메시지를 보내는 코드를 작성해보자

 

 

4. 파이썬 코드로 Slack 슬랙 챗봇 메시지 보내기 

파이썬으로 Slack 봇 메시지를 보내는 코드를 작성한다.


 

원하는 파이썬 개발 환경으로 시작하면 된다. 나는 VS CODE로 하고 따로 파이썬 가상환경을 만들어서 하고 있다. 파이썬 버전은 3.10.7이다.

 

먼저 Slack API 를 사용하기에 앞서 slack sdk 라이브러리를 추가해준다.

 

pip install slack_sdk

 

 

sdk 라이브러리를 설치했으면 이제 진행하면 된다.

 

# Slack SDK 라이브러리 추가
from slack_sdk import WebClient

# API 인증 토큰키
myToken = '아까 복사 붙여넣었던 토큰키'

# Slack API에 접근하기 위해 토큰을 인자로 클라이언트 객체 생성
client = WebClient(token=myToken) 

# 생성한 클라이언트 객체로 메시지를 전송
client.chat_postMessage(channel='매크로-알림', text='안녕하세요')

 

우선 해당 코드를 복사해서 붙여넣어자 그리고 아까 복사 해뒀던 토큰키를 myToken 변수에 넣고

맨 아래 코드 channel에 자신의 채널 이름을 그대로 적어주자 이 두가지를 꼭 수정하고 실행해야한다.

 

다 수정했으면 실행해보자

 

 

워크스페이스에 봇이 채팅을 쳤고 제대로 채팅이 들어왔다. 제대로 됐는가?

 

코드를 다시보자

 

# Slack SDK 라이브러리 추가
from slack_sdk import WebClient

 

이 코드는 pip 추가 했던 라이브러리를 불러오는 코드이며 꼭 있어야한다.

 

만약 WebClient 말고 다른 것도 쓰려면 그냥 import slack_sdk.WebClient 이렇게 해도 된다. 이럴 경우 아래 코드도 수정해줘야한다.

 

# API 인증 토큰키
myToken = "아까 복사 했던 API 인증 토큰키"

 

만들었던 봇의 인증 토큰키를 설정하는 변수이다. 이름은 아무렇게나 해도된다.

 

# Slack API에 접근하기 위해 토큰을 인자로 클라이언트 객체 생성
client = WebClient(token=myToken)

 

토큰을 매개변수로 넣어서 API에 접근하는 객체를 생성하는 코드이다. post 방식으로 채팅을 보내도 되지만 이 방식이 좀 더 코드로 작성하기에는 간단하다.

 

# 생성한 클라이언트 객체로 메시지를 전송
client.chat_postMessage(channel='작성한 채널 이름', text='안녕하세요')

 

클라이언트 객체를 이용해서 채팅을 보내는 코드이다. channel 인자에는 봇이 들어있는 채널의 이름을 적고

text 인자에는 보낼 메시지 텍스트를 넣으면 된다.

 

이러면 Slack API 를 이용해서 채팅 봇을 만드는 과정은 다 끝났다. 이제 파이썬 코드로 알아서 자신의 상황에 맞게 수정하면 된다. 메서드로 만들어서 매개변수를 적게 작성하는 방법도 한가지 방법일 수 있겠다.

 

챗봇의 사용 용도로는 알림 용도로도 쓸 수 있겠고 진짜 챗봇으로도 쓸 수 있겠는데 일단 챗봇에서 일방적으로 메시지를 보내는 방법을 알아봤다. 나같은 경우에는 일단 사이트 웹크롤링하는 코드를 여러개 돌리고 있는데 오류가 나면 다시 돌려줘야하는데 오류가났는지 매번 확인하기가 힘들기 때문에 이런 매크로 알림 챗봇이 있으면 상당히 편리하다. 다음에 시간나면 상호작용 하는 방법을 알아보고 써보도록하겠다.

 

 

 

 

 

* 번외

참고로 request 라이브러를 추가해서 post 방식으로 채팅을 보내는 방법도 존재한다.

 

# request 라이브러리 추가
import requests

# API 인증 토큰키
myToken = '챗봇 토큰 인증키'

# request post 방식으로 api 호출 
requests.post("https://slack.com/api/chat.postMessage",
        headers={"Authorization": "Bearer " + myToken},
        data={"channel": "챗봇의 채널","text": "안녕하세요"}
    )

 

이 방법은 slack_sdk 라이브러리를 추가하지 않고 request post 방식으로 호출하는 방법이다.

위처럼 토큰과 채널을 수정해서 보내면 된다.

 

headers를 저렇게 하는 이유는 저것이 Slack API의 인증 방법이라고 한다.

 

 

 

728x90
반응형
728x90
반응형

 

 

티스토리 블로그의 단점이라고 한다면 일단 이모티콘이 별로 없다

 

 

 

물론 글쓰기 상단에 이모티콘이 있긴한데 이게 다인지는 몰라도 저거밖에 안보인다

 

카카오톡에서 구매한 이모티콘을 사용할 수 있으면 모르겠는데

 

그건또 아닌거같아서 진짜 별로인거같은데

 

그냥 글만 쓰는거보단 이모티콘을 넣어주면서 쓰면 좋을거같은데 이런 생각을 하다보니 

 

네이버 블로그는 예전에 html 수정이 가능해서 거기에 이미지를 올리고 했던 기억이 떠올랐다

 

티스토리 글쓰기는 아직 HTML 수정 방식을 지원한다

 

 

글쓰기 상단에 기본모드를 누르면 HTML로 변경할 수 있는데

 

 

눌러보면 이렇게 HTML 태그로 이뤄진 화면으로 전환된다

 

HTML이 뭔지는 몰라도 되는데 정말 간단하게 생각하면

 

그냥 평소에 이렇게 우리가 글쓰는데 자동으로 저렇게 변환되어서 올라감

 

저렇게 코드로 변환되어 올라가야만 인터넷에서 볼 수 있다고 생각하면됨

 

 

아무튼 이런걸로 어떻게 할거냐 하면

 

https://tenor.com/ko/

 

Tenor GIF Keyboard: 대화 속에서 자신을 표현해 보세요

Tenor.com은 브라우저의 언어 설정에 따라 번역되었습니다. 언어를 변경하려면 여기 을(를) 클릭하세요.

tenor.com

 

이 사이트를 이용할거다

 

이거 어디서 많이본거같지 않은가? 바로 디스코드에서 움짤보낼때 이사이트에서 검색된다

 

 

이렇게 GIF를 누르면 저 사이트에서 가져오는데

 

디스코드에서도 비슷하게 하지 않을까싶다

 

 

여튼 여기 사이트로 와서 아무거나 맘에드는거 골라보자

 

 

참고로 여기 한글 입력도 된다

 

https://tenor.com/ko/view/surprised-tucker-foley-danny-fenton-sam-manson-phantom-planet-gif-23879916

 

Surprised Tucker Foley GIF - Surprised Tucker Foley Danny Fenton - GIF 탐색 및 공유

Click to view the GIF

tenor.com

 

난 이걸 골라서 해보려고 하는데

 

링크를 복사해서 붙여넣는것이 아니라

 

사이트 들어가면 </> 이렇게 되어 있는 버튼을 누르게 되면

 

 

EMBED를 복사합니다 하고 복사가 된다

 

링크만 붙여넣으면 위에처럼 링크가 그냥 나온다

 

암튼 임베디드 코드가 뭐가 복사가 됐나 보니

 

<div class="tenor-gif-embed" data-postid="23879916" data-share-method="host" data-aspect-ratio="1" data-width="100%"><a href="https://tenor.com/view/surprised-tucker-foley-danny-fenton-sam-manson-phantom-planet-gif-23879916">Surprised Tucker Foley GIF</a>from <a href="https://tenor.com/search/surprised-gifs">Surprised GIFs</a></div> <script type="text/javascript" async src="https://tenor.com/embed.js"></script>

 

뭐 이런 코드가 복사가 되었다

 

이걸 아까 HTML 코드 편집기로 변환해서 복붙하면 끝이다

 

그러면 이렇게 복붙이 되는데 무시하고 완료를 눌러서 게시를 하게 되면

 

 

 

 

이렇게 움짤형태로 보여지게 될것이다 근데 너무 크지않은가

 

움짤은 큰맛이 아니라 작은 맛으로 보는건데

 

그러면 어떻게 하면되는가 코드를 살펴보자

 

 

width="100%" 이라는 문구를 찾게 되면 이걸 맘대로 조절하면 된다

 

나는 50%로 바꿔보도록하겠다

 

 

 

 

근데 이러니까 왼쪽으로 치우쳐져있게되는데 글쓰는 스타일이 왼쪽에서 시작하면

 

딱히 상관은 없지만 나처럼 중앙정렬 해서 쓰는 사람은 정말 불편하게된다

 

이럴때는 그냥 코드에 이거만 추가하면 된다

 

 

코드 맨 앞에 

 

<div style="display: flex; justify-content: center;">

 

그리고 중간에 </div> 뒤에 또 </div> 이거만 추가해주면된다

 

 

 

 

 

이러면 중앙정렬이 될것이다

 

그리고 글 다 써갈떄즘에 알게된건데

 

html 편집기 안들어가고 그냥 글 쓰는 도중에

 

상단에 ... 버튼 눌러서 HTML 블럭 버튼 누르면

 

 

이렇게 창이 뜨는데 아마 이렇게 해도 될거같다

 

 

그러면 이렇게 뜰텐데 

 

 

 

잘되는거같다

 

 

편한대로 하면될듯

 

 

 

 

728x90
반응형