NotePad 17

[MediaPipe] Hand Landmark 적용 과정 정리

이번 글에서는 Google MediaPipe 에서 개발한 Hand Landmark Detection 을 사용하여, 손이 나오는 영상에서 손을 추적해 스켈레톤화 하는 과정을 정리하고자 한다. 개발 환경 macOS Sonoma 14.1.1 Python 3.10.6 1. Google MediaPipe HandLandmark MediaPipe Hand Landmark 는 이미지에 보이는 손의 랜드마크(Landmark)를 인식하여, 시각적으로 가시화까지 해주는 기능들을 포함하고 있다. 여기서 랜드마크(Landmark) 라는 단어가 살짝 어색해 보일 수 있다. 쉽게 생각하자면, 랜드마크는 손의 중요 포인트를 뜻한다고 생각하면 된다. 중요 포인트는 다음 그림과 같다. 위 그림을 보면 손의 형상을 0~20까지 21가지..

NotePad 2023.11.17

Kotlin 으로 JWT 를 Decode 하기

JWT 는 JSON Web Token 의 약자로, 서버 API 를 호출할 때 토큰으로 주로 사용된다. JWT 는 크게 Header, Payload, Signature 라 불리는 세 개의 부분으로 나눌 수 있다. Header 에는 인코딩 알고리즘과 토큰의 타입을 정의하는 내용을 담고 있고, Payload 는 JWT 에 넣고 싶은 데이터를 가진다. 마지막으로, Signature 는 Header 와 Payload 의 내용을 검증할 때 사용한다. JWT 문자열을 생성하는 것은 jwt.io 홈페이지에서 해볼 수 있다. 이제 본 글의 목적에 맞게 JWT 문자열을 디코딩하여, 인코딩 했을 때의 JSON 값들을 추출하는 코드를 구현해보자. 우선, 디코딩을 하고자 하는 JWT 값을 선정한다. 본 글에서는 jwt.io 페..

NotePad 2022.11.09

MusicXML 4.0 Tutorial - File Structure

본 글은 W3C 의 MusicXML 공식 문서를 기반으로 작성한다. 이전 글은 MusicXML 의 기초적인 내용을 정리했다. 이번 글에서는 MusicXML 의 구조에 대해 알아보고, 더 많은 MusicXML 문법을 정리한다. 1. Adapting Musical Scores to a Hierarchy 이전 글에서 다뤄봤던 예시 악보는 한마디만 있는 간단한 악보였다. 이번에는 더 많은 Part 와 더 많은 Measure(마디) 로 이루어진 악보를 예시로 삼아서 학습한다. 보통 XML 은 계층구조로 데이터를 표시하지만, 실제 악보는 계층 구조보다는 격자(Lattice) 구조에 가깝다. 그렇다면 MusicXML 은 XML 과 실제 악보 간의 구조적 차이를 어떻게 극복하였는지 알아보자. MusicXML 은 2가지..

NotePad 2022.09.21

[음악] 음자리표 (Time Signature)

본 글은 MusicXML 을 공부하던 중, 에 대한 이해를 위해서 "음자리표" 와 관련된 지식이 필요하다 생각되어 따로 정리하게 되었다. 혹시나 음악과 관련된 배경 지식이 전무하거나 잘 모르는 개발자들을 위해 정리하면 좋을 것 같아 본 글을 쓰게 되었다. 본 글의 목표는 MusicXML 의 에 대한 이해를 돕기 위함이므로, "음자리표"에 대해 깊이 있는 지식을 기술하지 않는다. 1. 우리가 보통 보게 되는 음자리표 보통 주변에서 악기를 다룰 줄 안다고 하면, 피아노, 플룻, 바이올린, 드럼, 기타, 베이스 등등이 흔하다. 그 중에서 "음자리표" 를 가장 많이 사용하는 악기는 클래식 음악 쪽으로, 피아노, 플룻, 바이올린 등이 해당된다. 대표적인 예시로 든 3개의 악기는 공통적으로 "높은음자리표" 를 사용..

NotePad 2022.09.20

[Angular] AngularJS 와 Angular 2~14

1. AngularJS ( Angular 1.+ ) - 2010.10 AngularJS 는 이름에서 알 수 있듯이 JavaScript 를 기반으로 만들어진 오픈 소스 프론트엔드 웹 애플리케이션 프레임워크이다. 싱글 페이지 애플리케이션 개발 중에 마주치는 여러 문제들을 해결하기 위해 개발되었다. 2009년에 Google 직원인 Misko Hevery 와 Adam Abrons 가 공동 개발하였으며, 현재는 Google 뿐만 아니라 개별 커뮤니티 및 여러 회사에 의해 유지보수 되고 있다. [ 싱글 페이지 애플리케이션 (SPA)] Sing-Page Application 은 서버로부터 완전히 새로운 페이지를 불러오지 않고, 현재의 페이지를 동적으로 다시 작성함으로써 사용자와 소통하는 웹 애플리케이션이나 웹 사이트..

NotePad 2022.09.06

[Ionic] Photo Gallery 앱을 모바일로 & Live Reload

[Ionic] Ionic Angular 입문 및 Photo Gallery 앱 만들기 Cross-Platform Mobile App Development: Ionic Framework Ionic Framework's app development platform builds amazing cross-platform mobile, web, and desktop apps all with one shared code base and open-.. choboit.tistory.com 이전 글에서 Ionic 에 대한 전반적인 지식과 첫 가이드 앱인 Photo Gallery 앱을 웹 버전으로 만들어보았다. 사진을 찍고, Grid 형태의 앨범으로 찍은 사진을 보여주며, 촬영한 사진을 Filesystem 에 저장하는 것까..

NotePad 2022.09.05

[Ionic] Ionic Angular 입문 및 Photo Gallery 앱 만들기

Cross-Platform Mobile App Development: Ionic Framework Ionic Framework's app development platform builds amazing cross-platform mobile, web, and desktop apps all with one shared code base and open-web standards. ionicframework.com Android 와 iOS 뿐만 아니라 웹까지 다양한 멀티 플랫폼의 애플리케이션을 개발할 수 있는 프레임워크들이 있다. ReactNative, Ionic, Xamarin, Flutter 가 있다. 그 중에서 Ionic 에 대한 공부를 해볼 예정이다. Ionic 은 Apache Cordova 를 사용하..

NotePad 2022.09.02

Mac FTP : Cyberduck - EC2 서버에 접속하여 폴더 다운로드

FTP 를 통해 원격 서버의 코드를 다운 받을 일이 생겨서 Mac 에서 사용할 수 있는 FTP 프로그램들을 알아보았다. 그 중에서 Mac 의 FTP 프로그램은 Cyberduck 이 대표적이라는 말을 듣고, Cyberduck 을 접하게 됐다. 무료 버전을 쓸까 했지만, App Store 에서 단돈 3만원에 판매를 하고 있어서 과감히 유료 버전을 구매했다. 1. EC2 서버와 연결 1-1) [새 연결] 클릭 1-2) [SFTP (SSH File Transfer Protocol)] 선택 1-3) 서버 주소, 사용자 이름, 비밀번호 입력 EC2 서버의 주소라 하면, "ec2-" 로 시작해서 "~.amazonaws.com" 으로 끝나는 주소가 있을 것이다. 해당 주소를 복사해주면 된다. 그리고, 서버에 접속 가능..

NotePad 2022.08.31

SSH 로 접속한 원격 서버의 코드들을 VSCode 에서 바로 보기

개발 환경 - M1 Macbook (2021) - macOS Monterey 12.3.1 보통 원격 서버에 접속할 때, 터미널 프로그램을 사용해서 접속한다. 필자는 iTerm 을 사용해서 SSH 원격 접속을 하며, 터미널 창에서 명령어를 통해 원격 서버를 뒤적뒤적 한다. 그런데, 원격 서버에 있는 서버 코드를 수정하거나, 읽어야할 때 터미널 창은 조금 불편하다. Vi 나 Nano 가 있기는 하지만, VSCode 와 같은 에디터에 적응된 필자는 터미널에서 코드를 읽는게 불편했다. 그렇다고 원격 서버에 VSCode 를 설치해서 사용하자니, 뭔가 아깝다는 생각이 들었다. 그래서 원격 서버의 폴더나 파일들을 VSCode 에서 바로 볼 수 있고, 수정이 가능한 환경 구축이 가능하지 않을까 찾아보게 되었다. 가능한..

NotePad 2022.08.30

AWS CLI, AWS SAM CLI 설치하기 (on M1 Mac)

설치 환경 - M1 Macbook Pro (2021) - macOS Montrey 12.3.1 본 글은 AWS CLI, AWS SAM CLI 공식문서를 옮긴 글입니다. 1. AWS CLI AWS CLI 는 명령어를 통해 AWS 서비스와 상호작용할 수 있도록 해주는 오픈 소스 툴이다. 최소한의 설정만 해주면, AWS CLI 와 명령어를 사용해서 브라우저의 AWS 관리 콘솔과 같은 기능을 사용할 수 있다. 명령어를 사용할 수 있는 터미널 프로그램은 다음과 같다. - Linux shells : bash, zsh, tcsh - Windows command line : Powershell, 명령 프롬프트 - Remotely(기타 원격) : EC2 인스턴스의 명령어를 실행할 수 있는 PuTTY, SSH, AWS S..

NotePad 2022.06.20

iOS 앱 배포 하려다 키체인 암호 팝업에서 막혔을 때

지금 이 글을 작성하고 있는 날의 전날에 회사의 Apple Developer 계정으로 iOS 앱을 배포해야할 일이 있었다. 그래서 오랜만에 Xcode 를 키고, 회사 계정을 로그인하여 추가한 다음 Signing 설정까지 하면서 Archive 를 진행했다. 그 과정에서 키체인 암호를 묻는 팝업이 나타났지만, 엔터키를 치니 그대로 지나갔다(키체인 암호를 몰랐다). 아무 문제 없이 앱스토어의 테스트 플라이트까지 업로드가 되어, 그대로 앱 심사를 제출하고 퇴근했다. 다음날 출근해보니 특정 사유로 인해 앱 심사를 통과하지 못했고, 추가적인 이슈 사항이 생겨서 다시 빌드를 하여 업로드 해야했다. 코드가 업데이트가 되고, 이슈가 해결된 것을 확인한 후에 어제와 똑같이 Archive 를 하려 했다. 키체인 암호를 묻는..

NotePad 2022.06.15

[PlantUML] 1. PlantUML 설치와 실행 그리고 기본적인 요소

새로운 프로젝트를 시작하면서, 개발 기획서를 써야할 상황이 왔다. 클라이언트 앱 개발 담당이기 때문에 클라이언트 앱 기획서를 서비스 기획서 기반으로 작성하여 보고해야하는 상황이었다. 기획과 설계를 진행하면서 클래스 다이어그램으로 같이 만든다면 보고하기도 쉽고, 피드백 받기도 좋을 것 같다는 생각이 들었다. 그리고 마침 유튜브 "생활코딩"의 이고잉님이 커뮤니티에 PlantUML을 사용하여 멋지게 UML을 그리신 것을 보고 한번 해보고 싶다는 생각이 들었다. 개발 환경 - M1 Macbook (2021) - macOS Monterey 12.3.1 1. UML & PlantUML 1-1) UML Unified Modeling Lanuage, 통합 모델링 언어를 뜻하는 UML은 소프트웨어 공학에서 사용되는 범용..

NotePad 2022.05.04

AMD 에서 Android HAXM 오류 문제 해결

데스크탑을 새로 맞추면서 Android Studio에서 AVD를 돌려보려고 하는데 Android Version을 선택하는 창의 모서리에 Install HAXM 이라는 하이퍼링크가 활성화 되어있었습니다. Version은 당연히 Download가 안되었고 저걸 클릭하여 설치해야 하나보다 싶었는데... 아래와 같이 오류가 떴습니다. 오류 상황에 캡처할 생각을 하지 못하여 다른 블로그의 사진을 캡처하여 왔습니다. 출처 : https://codedragon.tistory.com/7747 대충 오류 내용을 읽어보면 Intel의 Hyper-V 기능을 활성화하지 못했다는 그런 문구 같았습니다. 여기서 제가 찔끔했던 부분은 이번에 맞춘 데스크탑의 CPU는 AMD의 Ryzen 이라는 점이었습니다. 그래서 CPU의 회사가 ..

NotePad 2020.02.10

[알고리즘] N-Queen

백트래킹(BackTracking) 가능한 모든 방법을 탐색한다. 단, 한정 조건을 통해 유망성을 점검하고 유망하지 않으면 해당 경우의 수를 배제한다. N-Queen N*N 체스판에 N개의 퀸을 서로 공격할 수 없게 배치하는 경우의 수를 출력하는 문제이다. 나의 멍청했던 접근법 단순하게 2차원 배열을 생성하고 모든 값을 0으로 초기화한 후에, 퀸을 하나 두었을 때 공격 가능한 모든 칸을 1로 바꾸고 남아 있는 0 중에 하나에 퀸을 두고 또 1로 바꾸고... 이런식으로 구현을 하였다. 정말 단순하고 무식한 방법이었다. 모든 경우의 수를 보았기 때문에 시간은 엄청나게 소요되었고, 중복된 경우의 수도 횟수에 추가되어서 어마어마한 뻥튀기 결과값을 초래했다. 해답 우선, 2차원 배열을 생성할 필요가 없다. 1차원 ..

NotePad 2020.01.26

[알고리즘] 정렬(Sort)

n개의 숫자가 입력으로 주어졌을 때, 이를 사용자가 지정한 기준에 맞게 정렬하여 출력하는 알고리즘 1. 선택 정렬(Selection Sort) 현재 위치에 들어갈 값을 찾아 정렬하는 배열 현재 위치에 저장 될 값의 크기가 작냐, 크냐에 따라 __최소 선택 정렬(Min-Selection Sort)과 최대 선택 정렬(Max-Selection Sort)로 구분 최소 선택 정렬은 오름차순, 최대 선택 정렬은 내림차순 로직 정렬 되지 않은 인덱스의 맨 앞에서부터, 이를 포함한 그 이후의 배열값 중 가장 작은 값을 찾아간다. C++ STL : sort algorithm 헤더파일에 속해 있다. sort(start, end)를 이용하여 start 이상, end 미만에 있는 인자를 오름차순(default)으로 정렬해주는..

NotePad 2020.01.14

C# 과 Python 연동

1. IronPython 설치 Visual Studio 2019 - 도구 - Nuget 패키지 관리자 - 패키지 관리자 콘솔 PM> Install-Package IronPython -Version 2.7.9 2. Python 코드 3. C# 코드 디렉터리 구분자는 역슬래시(\)가 아니다. 4. C# 코드 실행 알아낸 점 IronPython 실행과정 엔진 생성 var engine = IronPython.Hosting.Python.CreateEngine(); 스코프 생성 var scope = engine.CreateScope(); 파일 읽기 var source = engine.CreateScriptSourceFromFile("~~~~~~~"); 스코프를 넣어 파일 실행 source.Execute(scope)..

NotePad 2020.01.07
반응형