728x90

프랙탈 (Fractal)이란 ? 

일부 작은 조각이 전체와 비슷한 기하학적 형태를 말한다. 이런 특징을 자기 유사성이라고 한다. 즉, 자기 유사성을 갖는 기하학적 구조를 프랙탈 구조라고 한다. 프랙탈 구조는 자연물에서 뿐만 아니라 수학적 분석, 생태학적 계산, 위상 공간에 나타나는 운동모형 등 곳곳에서도 발견되어 자연이 가지는 기본적인 구조이다. 프랙탈은 수학적 도형으로도 연구되고 있다고 한다. 프랙탈 도형은 종종 컴퓨터 소프트웨어를 이용한 재귀적이거나 반복적인 작업에 의한 반복되는 패턴으로 만들어진다.

 

프랙탈 트리 (Fractal Tree)

프랙탈 구조가 나무의 모양인 프랙탈 트리를 Java를 이용해  재귀 함수로 그려볼 수 있다. 가지를 그리기 위해서 삼각함수를 이용한다. 

import java.awt.Frame;
import java.awt.Graphics;

/**
 * FractalTree.
*/

public class FractalTree extends Frame {
    int startX;
    int startY;
    int angle;
    int length;
    int rotate;
    int growth;
    int depth;

    /**
     * Constroctors.
     *
     * @param width width
     * @param height height
     * @param x x
     * @param y y
     * @param angle angle
     * @param length length
     * @param rotate rotate
     * @param growth growth
     */
    public FractalTree(int width, int height, int x, int y,
            int angle, int length, int rotate, int growth) {
        this.startX = x;
        this.startY = y;
        this.angle = angle;
        this.length = length;
        this.rotate = rotate;
        this.growth = growth;

        this.setSize(width, height);
    }

    /**
     * Paint branch.
     *
     * @param graphics graphics
     * @param startX startX
     * @param startY startY
     * @param degree degree
     * @param length length
     */
    public void branch(Graphics graphics, int startX, int startY, int degree, int length) {
        if (length > 1) {
            int endX = (int) (startX - length * Math.cos(Math.toRadians(degree)));
            int endY = (int) (startY - length * Math.sin(Math.toRadians(degree)));
            int branchLength = (int) (length * growth * 0.01);

            graphics.drawLine(startX, startY, endX, endY);
            branch(graphics, endX, endY, degree - rotate, branchLength);
            branch(graphics, endX, endY, degree + rotate, branchLength);
        }
    }

    @Override
    public void paint(Graphics graphics) {
        branch(graphics, startX, startY, this.angle, this.length);
    }

    public static void main(String[] args) {
        FractalTree tree = new FractalTree(500, 500, 250, 450, 90, 100, 30, 75);
        tree.setVisible(true);
    }
}

짠 !

 

 


Reference

 

프랙탈 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 프랙탈(영어: fractal) 또는 프랙털은 일부 작은 조각이 전체와 비슷한 기하학적 형태를 말한다. 이런 특징을 자기 유사성이라고 하며, 다시 말해 자기 유사성을

ko.wikipedia.org

 

728x90

'Log' 카테고리의 다른 글

백준 골드 달성 일지 v`_`v  (0) 2023.01.25
우분투 (Ubuntu)와 주피터 노트북 (Jupyter notebook)  (0) 2023.01.17
신기한 AI 세상 🤖  (0) 2022.09.08
728x90

🌼 Problem Solving 

프로그래밍을 공부하면서 아무래도 프로젝트 다음으로 재미있는 건 PS이다. 

 

처음에 백준 Hello World 입출력 문제를 (겨우) 풀었던 기억이 아직도 생생하다.

골드 티어를 목표로 알고리즘 공부를 시작했는데 어느덧 골드가 ,,!

ㅠ_ㅠ

 

 

🤔 DFS ? DP ?

정말 아무리 뜯어봐도 모르겠던 개념들도 이제는 이해하고 구현하기 위해 고민해 볼 수라도 있다는 게 신기하다. 물론 아직 잘 풀지는 못하지만 ,,, 모르더라도 마음을 편히 가지고 유사한 유형의 문제를 자주 접하면 체화되는 것 같다. 

 

기간

2022년 7월 즈음부터 9월 즈음까지 백준에서 약 100문제를 풀었다. 프로젝트랑 병행하느라 뜨문뜨문 풀었다. 9월 중순부터는 알고리즘 스터디를 시작하며 프로그래머스 기출문제들로부터 호되게 당했다 (?) 특히 카카오 ,,^^ 지금 보니 프로그래머스에서는 63문제 풀었다. 기출보다 알고리즘 개념 유형을 익히고 싶어서 한 달 전 백준으로 다시 돌아왔다. 현재는 백준에서 작고 귀엽게 총 145문제 풀었다. 

 

🔎 공부 

주로 단계별로 풀어보기 순으로 풀었다. 문제를 읽고 손으로 정리하면서 문제를 접근하는 방법에 대해 고민하고 풀었다. 머릿속이 아득해지는 문제가 있다면 경험상 오래 끙끙 고민하는 것보다는 적당히 고민한 후 구글링을 통해 풀이 방법을 참고해서 공부하는 게 좀 더 효율적인 것 같다. 그리고 알고리즘 스터디를 통해 팀원들과 코드 리뷰를 하면서 함께 풀어나가는 것도 좋았다.

 

💪 앞으로 

이제 목표는 플래티넘이다 ,,!

NHN 아카데미 + 정보처리기사 필기 공부랑 겹쳐서 당분간 몰두하지는 못하겠지만 그래도 꾸준히 풀어나가자 !

728x90

'Log' 카테고리의 다른 글

프랙탈 트리 (Fractal Tree) 🌳  (0) 2023.02.02
우분투 (Ubuntu)와 주피터 노트북 (Jupyter notebook)  (0) 2023.01.17
신기한 AI 세상 🤖  (0) 2022.09.08
728x90

오늘 설치한 우분투와 주피터 노트북 !

VS Code에 둘 다 연결해 두었다.

 

💡 우분투 (Ubuntu)

우분투 ,, 이름은 익숙한데 정확한 개념을 잘 몰랐다 ,,

리눅스랑 그래서 무슨 차이인데 ?

이런 느낌 ,,?

 

이번에 설치해서 Visual Studio Code에 연결해 두었으니 사용하면서 감을 익힐 수 있을 것 같다.

window10을 사용하고 있어서 아래 블로그를 따라 하니 금방 설치할 수 있었다.

 

윈도우10에서 리눅스(Linux) 설치하기 (Ubuntu on WSL2)

AWS에서 가상의 환경을 작업하던 중, 내 PC에서 구동해 보았으면 싶어서 설치를 진행해 보았습니다. 윈도우10 환경에서 wsl2를 설치해봅니다.

ingu627.github.io

 

VS Code에서 연결을 하면 아래 사진처럼 WSL:Ubuntu라고 뜬다.

 

 

터미널에도 우분투가 바로 열리도록 해두었다.

 

 

짜잔 !

Windows Terminal도 오늘 처음 설치해 보았네 ,,

 

 

우분투를 이해하는데 아래 글이 도움이 되었다.

 

우분투(ubuntu)란 무엇인가? 1

2013/06/18 1. 우분투(ubuntu)란 무엇인가? 1 (철학과 역사) 2013/06/26 2. 우분투(ubuntu)란 무엇인가? 2 (데스크탑과 모바일 UI) 2013/07/04 3. [pxd talks 31] 우분투 디자인 경험 (Ivo Weevers강의) 그동안 PC용 리눅스(Li

story.pxd.co.kr

 

리눅스(Linux)는 무엇이고 우분투(Ubuntu)는 무엇인가 - 하나몬

❗️리눅스(Linux)란? 👉 Linux는 커널이다. ⇒ 커스텀 OS 만들기 가능 Windows나 Mac과 달리 Linux는 실제로 분리되고 잘 정의된 운영 체제가 아니다. 오히려 Linux는 커스터마이즈된 OS를 만들 수 있는 커

hanamon.kr

 

우분투는 리눅스 배포판으로 리눅스의 자식인 느낌이 든다. 

대부분의 리눅스 배포판은 서버용으로 사용되고 있지만 우분투는 개인 사용자 데스크톱 환경에 최적화되도록 사용자 편의를 중점으로 개발이 된 특징이 있다.

 

Window 10은 다른 OS보다 성능이 낮다고 한다. 우분투 역시 동일한 프로그램에서 Window 10보다 더 나은 성능을 보여준다고 한다. 그리고 심플한 UI를 가지고 있다고 하는데 ,, 그건 경험해 봐야 알겠다.

 

 

💡 주피터 노트북 (Jupyter notebook)

주피터 노트북은 오픈소스 기반의 웹 플랫폼으로, 파이썬을 비롯한 다양한 프로그래밍 언어로 코드 작성 및 실행하는 개발 환경을 말한다고 한다. 즉, Jupyter에서 제작한 Python 용 통합 개발 환경(IDE)이다. 실행해 보며 신기했던 점은 터미널에서 주소로 들어가면 웹 사이트가 나온다는 것이다. 웹 기반이라니 ! 주피터 노트북은 데이터 분석에 유용하게 사용이 될 수 있다고 한다. 최근 들어 머신러닝, 딥러닝에 많이 활용이 된다고 한다. 아래는 주피터 노트북의 특징이다.

 

- 단계적으로 쉽게 실행하고, 시각적으로 빠르게 확인해 볼 수 있다.

- 큰 Python 파일도 셀 단위로 나누어 번역 및 실행하며 Interactive 한 동작이 가능하다.

- 차트, 표, 그래프 등 시각화에 유용하다.

 

 

주피터 노트북을 사용하려면 파이썬이 필요하다.

파이썬이 없다면 아래 링크에서 원하는 버전을 다운로드하면 된다.

 

Download Python

The official home of the Python Programming Language

www.python.org

 

아래 블로그들을 참고하여 설치했다.

우분투와 마찬가지로 설치는 간단하다 !

 

- 주피터 노트북 설치하기

 

주피터 노트북 (Jupyter Notebook) 이란? / 설치방법? - 파이썬을 웹(Web) 으로!

오늘은 주피터 노트북 (Jupyter Notebook) 이라는 것에 대해 알아보려고 합니다. 주피터 노트북이 어떤 것인지, 왜 사용을 하는지, 단점은 없는지에 대해 적어둔 다음 하단에 설치방법 까지 포스팅 하

s1mcoding.tistory.com

- 주피터 노트북 VS Code에서 사용하기

 

[Jupyter Notebook] VS Code에서 사용하기

지금까지 주피터 노트북 파일을 열기 위해서는 항상 cmd창을 통해 jupyter notebook을 실행시켰다. 하지만, 이제는 VS code를 이용해서 바로 jupyer notebook 파일을 열고자 한다. 1. 아래 링크를 통해 vscode를

taehooh.tistory.com

- 주피터 노트북에서 자바 사용하기

 

[Jupyter notebook] 주피터 노트북에서 자바(Java) 사용하기

주피터 노트북에서 자바(Java) 사용하기 주피터 노트북은 보통 파이썬과 관련해서 사용된다. 하지만 조금의 설정을 통해 자바 또한 주피터 노트북에서 실행시킬 수 있다. (주피터 노트북이 이미

computer-science-student.tistory.com

 

이제 아래 사진처럼 ipynb 파일이면 VS Code에서 주피터 노트북 사용이 가능하다.

한 줄씩 실행하는 것을 한눈에 보기가 편하다 !

 

728x90

'Log' 카테고리의 다른 글

프랙탈 트리 (Fractal Tree) 🌳  (0) 2023.02.02
백준 골드 달성 일지 v`_`v  (0) 2023.01.25
신기한 AI 세상 🤖  (0) 2022.09.08
728x90

Naver Cloud Platform

Naver Cloud PlatForm 에는 정말 다양한 API 서비스가 많다.

그 중에서도 AI Services 에 속한 몇 가지 API를 사용해보았다.

 

Naver Cloud Platform에서 제공해주는 API를 활용해 

SpringBoot에서  SpringMVC 구조로 만들어

Tomcat 서버를 돌려 웹 페이지로 결과를 보았다 !

 

 

 

Object Detection 

이미지 속 사람 및 자동차 등 다양한 객체의 타입과 위치를 감지하여 정보를 제공해준다.

빨간색 박스는 AI가 인식한 객체를 시각적으로 보여주기 위해 Json 데이터와 canvas를 이용해 그린 것이다.

수도리가 강아지라고 잘 인식해준다.

놀라운 건 프리즈비도 잘 인식한다 ! 

97% !

 

ㄴㅁㄱ

 

 

사진 위에 쓰여진 글씨를 보면 알 수 있듯이,

객체의 수와 객체 타입(ex) dog)과 탐지 정확률(ex) 99%)을 제공해준다.

Json 데이터에 정보가 저장되어 있어서 JSON Viewer를 활용해 분석했다.

 

JSON Viewer

Easily view and visualize JSON (and JSON like) data using our JSON Viewer, visualization tools, and online REPL

jsonviewer.arianv.com

복잡한 Json 데이터를 예쁘게 보여준다.

사실 예뻐도 복잡하긴 매한가지다. ^^

 

 

 

 

Pose Estimation

이미지 속의 사람을 감지하고 몇 명이 어떤 포즈를 취하고 있는지에 대한 좌표 정보를 얻을 수 있다.

주요 신체 영역을 인식한 좌표 정보를 제공해주기 때문에 자세 교정을 도와줄 때 사용하기 좋다고 한다.

 

아래 사진은 해외에서 Pose Estimation을 Deep Learning으로 구현한 것이라고 하는데 제법 멋지다.

 

 

 

아래 사진은 Naver Cloud Platform에서 제공해주는 API를 이용해 구현해본 것이다.

역시 Json 데이터와 canvas를 이용했다.

신체 부위를 딱 정확하게 찝어낸다.

놀라운 AI ,,,,,, 

 

신체부위를 점으로 나타내는 것 뿐만 아니라

저 위에 스케이드 타는 사진처럼 좌표와 좌표끼리 이어 선을 만들 수도 있다. 

 

 

 

 

CLOVA Voice

그리고 !

네이버의 얼굴 (?)

CLOVA !

 

CLOVA Voice는 다양하고 자연스러운 목소리를 만들 수 있는 고품질 음성 합성 서비스라고 한다.

 

아래 영상은 질문을 쓰고 대화 버튼을 누르면 !

CLOVA Voice API를 이용해 음성으로 대답해주는 간단한 테스트이다.

 

질문과 대답은 HashMap으로 저장해두었다.

 

 

 

 

CLOVA Chatbot

그런데, 실제로 이런 형태를 만드려면 CLOVA Chatbot 서비스를 사용해야겠다.

CLOVA Chatbot은 마케팅, 고객 응대 등 다양한 서비스에 활용할 수 있는 챗봇을 생성하는 서비스이다.

챗봇은 질문과 대답을 다양한 형태로 여러개 생성할 수 있고, 특히 정규식 표현도 가능해서 훨씬 편리하다.

 

 

 

 

CLOVA OCR, CLOVA Speech Recognition

이미지 속 문자를 추출해 디지털 데이터로 변환해주는 CLOVA OCR,

사람 목소리를 텍스트로 바꿔주는 CLOVA Speech Recognition(CSR)도 사용해봤는데 흥미로웠다.

 

STT(Speech to Text), TTS(Text to Speech)가 가능하다는 점을 이용해

시각 혹은 청각 장애를 겪고 있는 사람들에게 도움이 될 만한 서비스가 많아지는 세상이 올 수 있겠다는 생각이 들었다. 

 

 

 

 

NAVER CLOUD PLATFORM

cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification

www.ncloud.com

 

 

 

 

 


Reference

 

An Overview of Human Pose Estimation with Deep Learning

An introduction to the techniques used in Human Pose Estimation based on Deep Learning.

medium.com

 

728x90

'Log' 카테고리의 다른 글

프랙탈 트리 (Fractal Tree) 🌳  (0) 2023.02.02
백준 골드 달성 일지 v`_`v  (0) 2023.01.25
우분투 (Ubuntu)와 주피터 노트북 (Jupyter notebook)  (0) 2023.01.17

+ Recent posts