안경잡이개발자

728x90
반응형

Blinky 예제는, 일반적으로 새로운 MCU를 다루게 되었을 때 가장 먼저 실습해보는 예제라고 할 수 있습니다. 흔히 새로운 프로그래밍 언어를 공부할 때 "Hello World"를 출력해보는 것과 같습니다. Blinky 예제는 구체적으로 GPIO 출력을 이용해 보드에 내장된 LED를 켜고 끄는 예제입니다. 제가 실습할 보드인 Nucleo-144도 내장 LED를 가지고 있기 때문에, 간단하게 Blinky 예제 실습을 진행할 수 있습니다.

 

일단 지난 시간에 설치했던 STM32CubeIDE를 이용하여 [New] - [STM32 Project]로 이동하여 새롭게 STM32 프로젝트를 생성해주도록 하겠습니다.

STM32 제품군 보드(Board)로는 다양한 종류가 있습니다. 따라서 자신이 가지고 있는 보드를 검색 및 선택하여, 그 보드에 맞게 개발환경을 구축하시면 됩니다. 저는 Nucleo-144 F747ZI 모델을 가지고 있기 때문에 이를 선택하였습니다.

다음과 같이 적당한 이름을 선택하여 기본 설정 그대로 프로젝트를 만들 수 있습니다.

 

기본적으로 주변 장치 초기화 항목에 대해서는 [Yes]를 클릭합니다.

또한 Eclipse IDE 형식의 개발환경을 STM32CubeMx 개발 전용으로 Perspective를 변경할 수 있습니다.

그러면 다음과 같이 기본적인 소프트웨어 패키지가 설치됩니다.

설치가 완료된 이후에는 다음과 같이 프로젝트가 초기화됩니다.

실질적인 소스코드는 main.c 파일을 수정하시면 됩니다. 여기에서 main() 함수에 있는 while 구문 안에 우리가 동작시키고자 하는 프로그램의 세부 소스코드를 작성하면 됩니다. 이 부분은 아두이노(Arduino) 프로그램을 개발하는 것과 거의 유사하다고 보시면 됩니다.

프로젝트를 생성하면 기본적으로 확인할 수 있는 .loc 파일에서는 특정한 핀이 LED 기능을 담당하는 것을 알려주고 있습니다. 저는 기본적으로 색상별로 3개의 LED가 활성화되어 있네요.

실제로 main.c 파일의 MX_GPIO_Init() 함수를 살펴 보시면, 3개의 GPIO Pin에 대한 설정 코드를 확인할 수 있습니다.

따라서 다음과 같이 while() 구문 안에 3개의 LED Pin이 모두 1초에 한 번씩 토글되도록 만들 수 있습니다. 바로 이 부분만 넣어주게 되면 Blinky 예제 완성입니다.

기본적으로 빌드(Build)는 [Project] - [Build Project]에 들어가시면 진행하실 수 있습니다.

그러면 다음과 같이 [Console] 탭에서 빌드가 정상적으로 진행이 된 것을 확인할 수 있습니다.

이제 USB를 이용해서 가지고 있는 장치를 연결해야 합니다. 실제로 우리가 작성한 소스코드를 장치에 업로드하기 위해서는 당연한 절차라고 할 수 있습니다.

 

USB를 연결한 뒤에 [Run] - [Debug As] - [STM32 Cortex-M C/C++ Application]를 눌러서 디버깅을 진행할 수 있습니다. 디버깅 모드로 실행을 하시면 코드를 한 줄 한 줄 실행하면서 동작 과정을 살펴 볼 수 있습니다.

이후에 기본 옵션으로 디버깅을 진행하려고 하면, 다음과 같이 ST-LINK Firmware 업그레이드(Upgrade)가 필요하다는 메시지가 나올 수 있습니다. 여기에서 말하는 ST-LINK는 STM32 보드에 있는 USB 디버깅 장치를 의미하는 겁니다. 당연히 보드와 연결한 뒤에 프로그램을 업로드하려면, USB를 통해 업로드해야하기 때문에 관련 USB 펌웨어가 필요합니다. 그래서 ST-LINK 디바이스의 펌웨어 업그레이드가 필요하다는 메시지가 나오면 업그레이드를 진행해주시면 됩니다.

그러면 다음과 같이 STLinkUpgrade 프로그램을 받아 실행하게 되고 [Open in update mode]를 누른 뒤에 [Upgrade] 버튼을 누르면 업그레이드가 진행됩니다.

업그레이드가 다 되었네요.

업그레이드가 된 이후에 다시 디버깅을 진행하면, 정상적으로 진행됩니다.

이후에 디버깅 모드에 맞게 Perspective를 변경(Switch)하라는 메시지가 나옵니다. 그래서 [Switch] 버튼을 누르면 디버깅하기 편한 형태로 개발 환경의 모습이 바뀌게 됩니다.

이제 정상적으로 프로그램이 로드되어, 코드를 순차적으로 실행하여 테스트할 수 있게 됩니다. Step Over (F6) 버튼을 누르게 되면 한 줄씩 실행할 수 있습니다.

그래서 다음과 같이 아까전에 우리가 작성했던 HAL_GPIO_TooglePin(GPIOB, LD1_Pin|LD2_Pin|LD3_Pin); 라인을 실행하게 될 때 보드에 내장되어 있는 LED가 빛나게 됩니다. 실제로 보드를 확인해 보시면 LED 부분이 점멸됩니다. 또한 디버깅을 모두 마친 이후에 실제로 배포(Release)를 하고자 할 때는 다음과 같이 [Release]에 체크를 진행해주시면 됩니다.

이제 아까와 마찬가지로 [Run]을 할 때 Release 폴더에 있는 .elf 파일로 업로드를 진행하면 됩니다.

 

그러면 이제 보드 자체에 해당 .elf 파일이 업로드가 된 것이기 때문에, 한 줄씩 직접(Manually) 코드를 실행하지 않아도 자동으로 무한 반복하여 우리가 작성한 코드를 실행합니다. 보드에 전원 공급을 해주기만 하면, 바로 우리가 작성했던 소스코드에 맞게 동작합니다.

위 빨간색으로 박스를 친 부분의 세 LED가 모두 1초마다 동시에 스위치(Switch) 됩니다.

728x90
반응형

728x90
반응형

STM32 Cube IDE는 다양한 운영체제(OS)에서 실행할 수 있는 마이크로컨트롤러 통합 개발 환경이다. 기본적으로 C/C++ 개발 플랫폼으로서 STM32 마이크로컨트롤러를 위한 주변기기(Peripheral) 환경설정, 코드 생성, 코드 컴파일, 디버그 등의 기능을 제공한다. 일단 기능 자체는 Eclipse/CDT 프레임워크에 기반을 하고 있다. (원래 이전부터 STM32은 Eclipse 개발 환경에 기반하곤 했었다.)

 

아무튼 C언어 개발 환경 답게 CPU 코어 레지스터, 메모리, 주변기기 레지스터 및 변수 값을 확인할 수 있다. 그렇기 때문에 당연히 Stack Analyzer 등의 기능을 이용할 수 있다. 설치 경로는 다음과 같다.

 

▶ STM32 Cube IDE 설치 경로: https://www.st.com/en/development-tools/stm32cubeide.html

 

STM32CubeIDE - STMicroelectronics

STM32CubeIDE - Integrated Development Environment for STM32, STM32CubeIDE-RPM, STM32CubeIDE-Lnx, STM32CubeIDE-Win, STM32CubeIDE-DEB, STM32CubeIDE-Mac, STMicroelectronics

www.st.com

이후에 자신의 운영체제에 맞는 설치 프로그램을 다운로드 한다.

라이센스에 동의한다.

회원가입이 되어있지 않다면, 이메일 주소를 기입하여 다운로드를 진행할 수 있다.

약관에 동의한 이후에 [Download] 버튼을 누르면 메일이 도착한다. [Download now] 버튼을 눌러서 다운로드를 진행할 수 있다.

이제 설치 프로그램을 실행하여 설치를 진행해보자. 기본적으로 동의하고 [Next] 버튼을 누르면 문제 없이 설치가 진행된다.

설치가 끝나고 나면 실행할 수 있다.

실행을 해보면 IDE 자체가 굉장히 이클립스(Eclipse) IDE와 유사하게 생긴 것을 확인할 수 있다. 아무튼 이렇게 간단히 설치가 완료되었다.

 

728x90
반응형

728x90
반응형

Face Swapping에서 추출(Extraction) 과정은 반드시 필요하다.  FaceSwap에서 추출이란 '얼굴 잘라내기'라고 볼 수 있다.  다시 말해, 추출(Extraction) 자체는 단순히 비디오(Video)나 이미지 파일들이 들어있는 폴더로부터 얼굴이 있는 부분을 찾아서, 얼굴 사진들만 따로 모아놓는 일련의 과정을 의미한다. 당연히 얼굴(Face)에 있는 Identity 정보를 파악해서 Swapping을 해야 되는 것이므로 얼굴 이미지만 따로 추출하는 과정은 일반적으로 필요하다. (사람이 직접 추출하지 않아도 되는 것만으로 고맙다...)

추출 과정은 다음의 세 가지 단계로 구성된다. 아래 단계들에서 언급되고 있는 메소드들은 사실 Facial Manipulation 분야에서 굉장히 흔하게 사용되는 메소드들이다.

1) 얼굴 감지(Facial Detection): 동영상의 매 프레임마다 얼굴이 존재하는 위치를 찾는다.
2) 정렬(Alignment): 얼굴이 존재하는 위치를 찾은 뒤에는, 해당 얼굴에서 68개의 랜드마크(Landmarks)의 위치를 찾고 그에 상응하는 얼굴의 방향성을 결정한다.
3) 마스크 생성(Mask Generation): 어떤 부분이 얼굴이고, 어떤 부분이 배경인지를 잘 구분하기 위하여 얼굴 부분에 마스크를 씌운다.

FaceSwap의 학습 과정(Auto-Encoder 기반)에서는 얼굴 데이터가 필요하기 때문에, 이러한 추출 과정은 Face Swapping에서 매우 중요하다고 볼 수 있다.

또한 추출된(Extracted) 얼굴 정보들은 Alignment File 형태로 관리할 수 있다. Alignment File이란, 각 프레임에서의 얼굴에 대한 정보를 포함하고 있는 파일이다. 68개의 랜드마크를 이용하여 얼굴의 위치를 정확히 결정한다. 처음에는 조금 뜬금없게 느껴질 수 있는데, 일반적으로 Face Recognition 분야에서는 사람 얼굴에서 키 포인트들의 위치 정보를 처리하기 위해 68개의 랜드마크를 이용한다. 아무튼 이러한 Alignment File은 다음의 목적을 위해 사용된다.

1) 학습(Training): "Warp to Landmarks" 설정을 한 경우, 학습 과정에서 얼굴 랜드마크 정보를 제공하기 위해서
2) 변환(Converting): 원래 프레임에서 변환되어야 할 얼굴의 위치를 변환 과정(Convert Process)에게 알려주기 위해서

일단 간단히 Extraction을 해보자. FaceSwap을 실행하면 다음과 같은 화면을 만날 수 있다.

일단 가장 중요한 것은 입력(Input)과 출력(Output)이다.

 

Input Dir: 입력으로 사용할 비디오 혹은 이미지
Output Dir: 추출된 얼굴이 저장될 폴더

이어서 플러그인(Plugins)란에서는 어떤 라이브러리를 이용해서 얼굴을 Detection하고 Alignment할 것인지에 대한 내용을 설정할 수 있다. 자세한 내용은 FaceSwap 포럼(Forum)의 Extraction Guide 문서에서 살펴 볼 수 있다.

 

▶ FaceSwap Extraction Guide: https://forum.faceswap.dev/viewtopic.php?t=27

 

다음과 같이 입력으로 비디오 파일(.mp4)을 넣고 출력 폴더를 설정한 뒤에 [Extract] 버튼을 눌러 추출해보자. 저자는 입력과 출력을 설정한 것 이외에는 모두 기본 설정 그대로 진행하였다. [Generate] 버튼은 그냥 Python 커맨드(Command)를 얻기 위해 사용하는 버튼이고, [Extract]와 기능적으로 동일하다.

다만 [Extract] 버튼을 눌러도, 정상적으로 동작하지 않을 수 있다. 그럴 때는 컴퓨터를 재부팅한 뒤에 Conda Prompt를 실행해보거나, 재설치가 필요할 수 있다. 혹은 하드웨어(Hardware)적인 한계 때문일 수 있어서 RAM을 더 많이 끼우거나 더 높은 성능의 GPU 디바이스를 이용해야 할 수도 있다.

 

저자의 경우 자세한 추가적인 메시지 없이 단순히 with status: failed - extract.py. return code: 1라는 오류 메시지가 출력되어 혼란스러웠다. 그래서 Conda Prompt 대신에 바탕화면에 있는 FaceSwap 바로가기를 이용해서 FaceSwap을 실행해서 Extraction을 해보았는데, 그제서야 정상적으로 동작했다.

 

아무튼 정상적으로 Extraction이 수행될 때는 다음과 같은 화면이 나온다. (저자의 경우 20초 가량의 Obama 연설 동영상을 넣었는데, 총 600 프레임의 이미지에 대하여 정상적으로 Extraction이 수행되는 것을 알 수 있다. 저자의 컴퓨터 환경에서는 약 10분 가량이 소요될 정도로 느렸다. 저자의 경우 GPU 디바이스 호환 문제인지 모르겠지만, 이처럼 오랜 시간이 소요되었다.)

또한 저자의 경우 추가적으로 다음과 같이 plaidml.exceptions.Unknown: Unable to map memory: CL_MEM_OBJECT_ALLOCATION_FAILURE라는 메시지와 함께 오류가 발생했다.

OpenCL 관련 오류 메시지가 나온 것으로 보아, 가지고 있는 AMD GPU와의 호환 문제인 것으로 보인다. 그래서 저자의 경우 그냥 Extraction 과정에서 CPU 기반의 플러그인을 사용하도록 하였다. 그래서 [Detector]에서 Cv2-Dnn을 선택하고, [Aligner]에서 Cv2-Dnn을 선택하였다. 저자의 경우 CPU 기반으로 Extraction을 했더니 매우 빠르게 동작했다. (600 Frames에 대하여 약 1분 가량 소요)

결과적으로 다음과 같이 성공적으로 추출이 진행되었다.

또한 추출(Extraction)을 마치고 나면 다음과 같이 폴더 안에 비정상적인 얼굴 이미지도 함께 포함되어 있다. 기본적으로 추출 과정에서 하나의 프레임 안에 여러 개의 얼굴이 감지(Detection)되는 경우 각각의 얼굴을 모두 추출해주기 때문이다. 따라서 다음과 같이 얼굴이 아닌데 얼굴로 감지되어 추출된 개체(Object)가 있는 경우 하나씩 선택하여 수동으로 삭제해주어야 한다.

이후에 저자는 오바마(Obama) 미국 전 대통령의 이미지를 더 추가하여 총 1,600개 가량의 Obama의 이미지를 준비하였다.

 

또한 기본적으로 FaceSwap 실습을 위해서는 두 개의 동영상이 필요하다. 따라서 하나의 동영상에 대해서 추가적으로 또 추출(Extraction)을 해준다. 참고로 두 개의 동영상에 대하여 서로 다른 폴더에 추출된 이미지가 저장되도록 해야 한다.

 

그래서 저자의 경우 부시(Bush) 미국 전 대통령의 스피치 영상 또한 준비하였다. 아까와 마찬가지로 추출 작업을 진행하였으며 대상의 얼굴이 아닌 다른 사람의 얼굴이거나, 사람의 얼굴이 아닌 경우 모두 선택하여 제거해주었다.

결과적으로 서로 다른 사람이 등장하는 2개의 동영상으로부터 각 인물에 대한 이미지를 1,000장 이상씩 추출하였다. 기본적으로 동영상으로부터 이미지를 추출할 때는 두 가지를 기억하자.

 

- 기본적으로 두 동영상에 대해서 사람의 얼굴 이미지가 각각 최소한 1,000장 이상 모일 수 있도록 준비해야 한다. 이미지가 너무 적으면 당연히 학습 결과 모델의 성능이 떨어진다.

- 또한 되도록 다양한 얼굴 각도와 표정이 나오도록 이미지를 구비할수록 좋다.

728x90
반응형

728x90
반응형

GPU SharkGPU 모니터링을 위한 유틸리티 프로그램이다. GPU Shark를 이용하면 NVIDIA GeForce 그래픽 카드 및 AMD/ATI Radeon 그래픽 카드 제품의 정보를 모니터링할 수 있다. 그냥 간단하게 설치한 뒤에 바로 사용할 수 있기 때문에 간편하다.

 

▶ GPU Shark 다운로드: http://www.ozone3d.net/gpushark/

 

GPU Shark의 공식 사이트에 접속하면 다운로드를 진행할 수 있다. 다음과 같이 [Download GPU Shark] 버튼을 눌러서 설치 프로그램을 받아보자.

이후에 릴리즈 된 설치 프로그램을 다운로드 받을 수 있는 경로로 이동할 수 있다.

다운로드를 진행하자.

다운로드 이후에는 gpushark.exe를 실행하면 된다.

기본적으로 다음과 같이 나온다. 저자는 현재 컴퓨터에 그래픽 카드가 하나만 장착되어 있어 하나만 나오는데, 그래픽 카드의 개수가 많으면 그 개수만큼 GPU 정보가 출력된다.

실제로 GPU 사용량이 높은 소프트웨어를 실행하게 되면, 다음과 같이 GPU Usage가 증가하는 것을 확인할 수 있다.

 

 

728x90
반응형

728x90
반응형

FaceSwap사진 혹은 비디오에 있는 얼굴을 인식(Recognize)하여, 얼굴 부분을 바꾸어주는(Swap) Deep Learning 기술 기반의 Software이다. 흔히 DeepFakes와 동일한 의미로 언급되는 라이브러리의 이름이기도 하다. 지금은 다양한 Face Manipulation 기술들이 DeepFakes라는 대명사로 불리는 경우가 많은데, FaceSwap에서 제시된 기술이 기본적인 DeepFakes의 기술적 방법론과 같다.

Computer Vision 기술에 대한 깊은 지식이 없어도, FaceSwap 프로그램을 다운로드 받아서 사용하는 것은 매우 간단하다. 그렇기 때문에 Fake Video들이 자연스럽게 양산될 수 있기 때문에, 올바른 윤리 의식을 갖추는 것이 중요하다. 기본적으로 FaceSwap의 GitHub에서는 다음과 같은 문구들을 따르도록 제시하고 있다.

1) FaceSwap is not for creating inappropriate content.
2) FaceSwap is not for changing faces without consent or with the intent of hiding its use.
3) FaceSwap is not for any illicit, unethical, or questionable purposes.
4) FaceSwap exists to experiment and discover AI techniques, for social or political commentary, for movies, and for any number of ethical and reasonable uses.

쉽게 말하면, 비윤리적인 목적으로 FaceSwap을 이용하지 말라는 소리이다. 비윤리적으로 사용되는 다양한 사례들은 이미 뉴스에서 수차례 언급된 적이 있으므로 생략하겠다. 아무튼 저자는 최근에 AI Security 및 Privacy 파트의 논문도 많이 Follow-up 하고 있는데, DeepFakes로 발생하는 Privacy Concern에 관심이 많아서 실험을 몇 번 해보았다.

 

일단 사용자 친화적인 FaceSwap Software는 다음의 경로에서 설치할 수 있다.

 

▶ FaceSwap 다운로드: https://faceswap.dev/download/

 

Download - Faceswap

You can get the latest Windows Installer from this link. If you experience problems with Github, you can also get the installer directly from this link To install on any other platform, please download our git repository from Github If you’re comfortable w

faceswap.dev

일반적인 Computer Vision 실습과는 다르게, FaceSwap GUI 프로그램은 GPU 환경이 갖추어진 윈도우나 Mac OS에서 실습하는 것이 편할 것이다. 터미널 기반의 Linux와 비교했을 때 사진이나 동영상을 옮기고 쉽게 실행할 수 있기 때문이다.

기본 설정 그대로 설치를 진행하면 된다.

이 때 자신의 그래픽 카드(Graphic Card) 환경에 맞게 설치를 진행한다. 저자는 AMD GPU를 사용하고 있기 때문에 이를 선택했다. 자신의 컴퓨터의 그래픽 카드 정보를 확인하고자 할 때는 [장치 관리자]를 열어서 자신이 사용하고 있는 그래픽 카드 드라이버를 확인하면 된다.

 

또한 기본적으로 아나콘다(Anaconda) 개발환경이 갖추어져 있어야 한다. 만약에 Python 및 Conda 환경이 구축되지 않았다면 Conda 환경부터 구축하자.

 

▶ Anaconda 환경 구축: https://ndb796.tistory.com/355

 

아무튼 FaceSwap의 설치는 매우 간단하다. 

[Install] 버튼을 눌러 설치를 마쳤다.

설치 이후에는 FaceSwap이 설치된 폴더로 이동하여 python faceswap.py gui 명령으로 소프트웨어를 실행할 수 있다.

다만, 이 때 자신의 그래픽 카드 환경 및 설치된 파이썬 패키지에 따라서 오류가 발생할 수 있다. 저자는 PlaidML 라이브러리가 없어서 오류가 발생하였다. 따라서 저자의 경우 pip install plaidml-keras 명령을 통해 필요한 라이브러리를 설치하라는 오류 메시지를 확인할 수 있었다. 그래서 pip install plaidml-keras plaidbench로 라이브러리를 설치하였다.

 

이후에 plaidml-setup 명령으로 환경 설정을 진행하면 된다. 다만, 다음과 같이 [WinError 126] 메시지와 함께 오류가 발생할 수 있다.

이는 저자가 글을 쓸 당시에 존재하던 PlaidML의 버전 문제로, 다음과 같이 PlaidML 삭제 및 구버전으로 재설치하여 해결할 수 있었다.

 

pip uninstall plaidml 
pip uninstall plaidml-keras 
pip uninstall plaidbench 
pip install plaidml==0.6.4

 

아무튼 이제 다시 plaidml-setup 명령으로 설정을 진행하자. 몇 가지를 물어보는데, 다음과 같이 Yes로 답을 진행하면 된다.

 

Q. Enable experimental GPU support? y

Q. Default device? 1 : opencl_amd_tahiti.0

Q. Save settings to C:\Users\\.plaidml? y

이후에 setx KERAS_BACKEND plaidml.keras.backend를 입력한 뒤에 Shell Prompt를 껐다가 다기 실행하자. 또한 FaceSwap의 requirements.txt 폴더에는 필요한 라이브러리들이 명시되어 있다. 따라서 그냥 pip install -r requirements.txt 명령으로 추가적으로 필요한 라이브러리를 모두 설치하자.

이후에 다시 python faceswap.py gui 명령으로 FaceSwap을 실행해보자. PlaidML을 위한 설정은 성공적으로 마쳤으나, 여전히 오류가 발생하고 있다. FaceSwap은 기본적으로 TensorFlow를 이용하여 학습을 진행하기 때문에, TensorFlow가 설치되어 있어야 하는 것이다.

따라서 이러한 오류가 발생하는 경우 pip install tensorflow명령으로 tensorflow를 설치할 수 있다. 다만, 저자의 경우 버전 호환 문제로 TensorFlow 2.0 이상 버전을 설치했을 때는 오류가 발생했다. 따라서 저자는 pip install tensorflow==1.14.0로 설치하였다.

설치가 완료된 이후에 다시 python faceswap.py gui를 입력하여 실행하면 정상적으로 FaceSwap 소프트웨어가 구동된다.

정상적으로 동작이 되는 것을 확인한 이후에는 Tutorial 가이드 문서를 읽어 보면서 사용 방법을 익혀보도록 하자.

 

▶ Extraction: https://forum.faceswap.dev/viewtopic.php?f=5&t=27

▶ Training: https://forum.faceswap.dev/viewtopic.php?f=6&t=146

 

상당히 내용이 잘 정리되어 있기 때문에 이 내용들을 꼼꼼히 읽어보는 것을 추천한다.

728x90
반응형

728x90
반응형

아나콘다(Anaconda)는 파이썬으로 개발을 할 때 필요한 다양한 패키지들을 손쉽게 관리할 수 있도록 도와주는 패키지 관리 시스템입니다. 다시 말해 Python을 활용한 머신러닝을 효과적으로 도와주는 도구라고 할 수 있습니다. 매우 다양한 파이썬 패키지(NumPy, Matplotlib, pandas 등)들을 빠르게 다운로드 하여 사용할 수 있도록 도와줍니다.

 

▶ Anaconda 다운로드: https://www.anaconda.com/distribution/

 

자신의 운영체제에 맞는 Anaconda Installer를 다운로드 하여 설치를 진행하시면 됩니다. 기본 설정(Default Setting) 그대로 설치를 진행하시면 편하게 사용할 수 있을 겁니다.

 

Anaconda를 설치하게 되면, 파이썬에서의 기본적인 다양한 패키지들을 자동으로 함께 설치해주기 때문에 많은 용량을 잡아먹게 됩니다. 제가 설치할 때는 약 3GB 정도를 요구하네요.

이후에 환경변수 설정에 대한 내용이 나오는데, 그대로 진행하겠습니다.

설치가 다 되고 나면 [시작]에서 [Anaconda Prompt]를 검색하셔서 아나콘다 콘솔창을 열어주세요. 이후에 python --version 명령을 입력하여 최신 Python 버전으로 설치가 잘 되었는지 확인합니다.

 

또한 pip list 명령을 이용하여 기본적으로 Anaconda를 통해 설치된 파이썬 패키지들을 확인할 수 있습니다. NumPy나 pandas와 같은 기본적인 라이브러리들이 모두 설치되어 있는 것을 확인할 수 있습니다.

또한 Anaconda를 설치하면 자동으로 Jupyter 개발환경도 설치가 되기 때문에, 바로 jupyter notebook 명령을 통하여 Jupyter 개발환경을 실행하실 수 있습니다.

728x90
반응형

컴퓨터 조립 일기

기타2020. 1. 13. 06:35
728x90
반응형

< 컴퓨터를 조립하다가 고난과 역경에 막주쳤고, 이를 헤쳐나갔던 하루에 대한 일기 >

 

이 글은 일반 데스크탑 PC용 메인보드를 구매해서, 거기에 서버용 그래픽 카드를 꽂아 사용하려고 했다가 고통 받았던 경험을 담고 있는 글이다. 이 글은 굉장히 개인적이고, 의미 없는 글이다.

 

[ 문제 상황 ]

Aorus(어로스) X570 메인보드와 라이젠 3700X CPU 부품을 가지고 있는데, 이 메인보드는 기본적으로 디스플레이가 존재하지 않으면 비프음이 발생함. 외장 그래픽 카드를 꽂더라도, 그 외장 그래픽 카드가 서버용 그래픽 카드 제품이거나 해서 디스플레이가 존재하지 않을 수 있는데, 이 경우 Aorus X570 메인보드는 디스플레이가 없다는 의미로 비프음이 발생하고, 부팅이 이루어지지 않음.

 

[ 해결 기록 ]


디스플레이가 존재하는 외장 그래픽 카드를 장착한 경우, 비프음도 발생하지 않고 정상적으로 부팅이 되었음.  당연히 모니터를 연결해서 화면을 확인할 수 있고, OS를 설치할 수도 있었음. 즉, 외장 그래픽 카드를 꼭 넣어야 하는 상황임.

▶  이러한 원리를 이용하여, 서버 설치를 위해 그래픽 카드를 붙여 설치를 진행하고, 설치 완료 이후에는 그래픽 카드를 제거하는 경우도 있다고 함. 서버를 재시작하면 오류 비프음이 발생하지만 부팅은 문제가 없기 때문에 정상적으로 서버가 동작할 수 있다고 함.

메뉴얼: (100p) http://download.gigabyte.eu/FileList/Manual/mb_manual_x570-aorus-master_1002_e.pdf
해결책: https://superuser.com/questions/454972/does-a-modern-pc-require-a-graphics-card-to-run

메인보드의 메뉴얼을 뒤져서 읽어 보았음. 디스플레이가 없는 경우 비프 경고음이 발생한다고 함. (Long 1, Short 2: 그래픽 카드 관련 오류음) 실제로는 정상적으로 OS가 부팅되어 서버가 동작. 처음에는 디스플레이가 없다고 알려줄 뿐, 부팅은 되는 것이라고 생각했음. 하지만 디스플레이가 없는 테슬라 그래픽 카드를 장착하면, 서버가 동작하지 않음.

Debug LED Codes 확인: No Console Output Devices are found (D6)
 디스플레이가 없는 외장 그래픽 카드를 장착한 경우 D6에서 0E로 변환 (오류)
 디스플레이가 있는 외장 그래픽 카드를 장착한 경우 D6에서 AA로 변환 (부팅 완료)

 

즉, 외장 그래픽 카드 중에서 디스플레이가 있는 그래픽 카드를 넣었을 때만 정상적으로 부팅이 되었음. 서버 연산용 그래픽 카드와 같이 디스플레이 기능은 제공하지 않는 그래픽 카드의 경우, 꽂아도 부팅은 안 된다는 것임.


[ 현재 예상되는 원인 ]

OS가 동작하기 전에 BIOS 단에서부터 오류가 발생하는 것임.  (우분투 설정을 바꾸는 것은 의미 없음.) 따라서 컴퓨터가 정상적으로 '디스플레이 장치'가 있다고 판단하도록 만들어야 함. 이를 위해 저렴한 더미 플러그를 사용할 수 있음.
https://www.google.hu/search?q=dummy+plug+ebay+display

애초에 Key Board 및 Display가 없어도 부팅이 되는지의 여부는 메인 보드 및 BIOS에서 결정할 문제임. 몇몇 보드는 BIOS 설정을 통해 이 여부를 세팅할 수 있도록 하지만, 대부분의 보드에서는 그러한 권한을 주지 않음.  그러한 권한이 있는 지에 대한 여부는 메인 보드의 사용 설명서를 뒤져 봐야 알 수 있음.  따라서 처음부터 헤드리스(Headless) 컴퓨터 등의 운영이 가능한 메인 보드를 구매했어야 함. 즉, 나의 실수.

[ 시도 1 ] 부팅 자체를 못 하는 건가? 0E라는 오류 메시지가 등장하는 것으로 보아, 부팅 자체가 안 되는 경우도 고려.

1) 더미 디스플레이 장치를 꽂아보자.

* Type C - HDMI 변환 케이블 (22,000 원)

* 아직 안 해봄. 가격대가 비쌈.

 

2) 안전 부팅을 해제해보자.
* 안전 부팅을 해제해도 동작하지 않음.

[ 시도 2 ] 부팅은 되고, OS 진입을 못 하는 건가?

* Ubuntu 18.04의 grub 설정을 변경하여 Headless하게 부팅.
참고: https://superuser.com/questions/1106174/boot-ubuntu-16-04-into-command-line-do-not-start-gui/1139020

sudo vi /etc/default/grub  
(초기 상태) 
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 
GRUB_CMDLINE_LINUX="" 
#GRUB_TERMINAL=console  
(바꾼 상태)
GRUB_CMDLINE_LINUX_DEFAULT="quiet" 
GRUB_CMDLINE_LINUX="3" 
#GRUB_TERMINAL=console 주석 취소 
sudo update-grub 

 

* Headless 부팅에 성공했지만 여전히 디스플레이가 없는 경우 비프 경고음이 발생. (Long 1, Short 2: 그래픽 카드 관련 오류음) 더불어 정상적으로 OS가 부팅되어 서버가 동작하기도 함. 하지만 디스플레이가 없는 테슬라 GPU를 꽂으면 서버가 동작하지 않음. 이러한 문제가 발생하는 원인은, 그래픽 카드 드라이버가 없어서 그런 것일까? (다만, 그래픽 카드 드라이버가 없다고 해서 OS 진입부터 안 될 수 있을까? 라는 궁금증이 들었음.)

[ 시도 3 ] 그래픽 카드 드라이버가 없어서 그런가?

* 옛날에 사용하던 VGA, 테슬라 VGA를 모두 끼운 뒤에 확인

일단 디스플레이가 있는 옛날 VGA를 이용하기 때문에 부팅 및 서버 동작까지 문제 없이 진행 됨. lspci | grep -i VGA 로 확인 결과, 옛날 VGA(GTX 560 Ti)와 Tesla K20이 모두 인식 됨. (sudo lshw를 입력하여 전체 PCI에 연결된 장치를 확인하는 방법도 있음.) 일단 테슬라 VGA가 인식이 됨. 드라이버가 설치되어 있지 않아서 동작을 안 하는 것 같음.

* 테슬라 K20 쿠다 버전 확인: https://en.wikipedia.org/wiki/CUDA
* Ubuntu 18.04 NVIDIA 드라이버 설치 명령어: https://www.nvidia.com/download/driverResults.aspx/141623/en-us

확인 결과, 쿠다 10 버전으로 설치하면 됨. (415 버전을 쓰면 될듯.)  따라서 기본적인 그래픽 드라이버 설치를 먼저 진행.

sudo apt-add-repository -r ppa:graphics-drivers/ppa 
sudo apt update 
sudo ubuntu-drivers autoinstall

* 설치 과정에서 종속성 오류가 발생한다면, 해당 항목을 apt-get install 명령으로 설치.

sudo reboot 

 

* 이 때, 필요할 경우 추가적으로 다음의 Tesla 전용 NVIDIA 드라이버 설치 명령어 입력

wget http://us.download.nvidia.com/tesla/415.25/nvidia-diag-driver-local-repo-ubuntu1804-415.25_1.0-1_amd64.deb 
dpkg -i nvidia-diag-driver-local-repo-ubuntu1804-415.25_1.0-1_amd64.deb 

 

* 이 과정에서 추가적인 Public Key 설정 메시지가 나올 수 있는데, 단순히 따라 입력하면 됨. 또한 패키지 다시 제거할 때는 dpgk -r 명령어를 이용

apt-get update 
apt-get install cuda-drivers 
reboot 

 

* 설치 완료 이후에 lspci -k를 입력하면, Kernel driver in use 항목에 NVIDIA라고 정상적으로 기록이 됨. (원래는 기본 드라이버였음.)

* nvidia-smi를 입력하여 추가적인 정보 또한 확인 가능. (Cuda Version도 확인 가능.)
* 다만, 다시 테슬라 그래픽 카드만 넣는 경우 마찬가지로 서버 접속이 안 됨. (드라이버 문제가 아닌 듯.)

[ 확실한 해결 방법 ]

* HDMI를 포함하는 소형 구식 그래픽 카드(3만 원 이내)를 구매하여, 가장 아래 쪽에 넣고, 나머지 공간에 테슬라 2개를 넣음. 그리고 SSD 대신 HDD를 사용하면 동작이 될 것으로 보임.

728x90
반응형

728x90
반응형

  Teensy는 Teensyduino를 이용하여, 아두이노 IDE 상에서 프로그램을 작성할 수 있도록 지원하고 있습니다. 기본적으로 HalfKay 부트로더(Bootloader)가 동작하고 있을 때, Teensy Loader 프로그램이 Teensy Board와 통신하게 됩니다.

 

  ▶ Teensy Loader 다운로드 경로: https://www.pjrc.com/teensy/loader.html

 

  따라서 Teensy Loader 프로그램을 설치해야 합니다. Teensy Loader는 다양한 운영체제를 지원하고 있습니다. 자신의 운영체제에 맞는 프로그램을 설치하시면 됩니다. 저는 윈도우(Windows)를 이용하고 있기 때문에, 윈도우 프로그램을 다운로드 받았습니다. 

 

 

  운영체제별 Teensy Loader 설치 페이지에서는, 제공해주는 두 개의 파일을 모두 받도록 합니다.

 

 

  USB를 이용해 Teensy Board를 컴퓨터와 연결하면, 1초에 한 번씩 LED가 깜빡이는 프로그램이 동작하는 것을 확인할 수 있는데요. 이 상태에서 Teensy Loader 프로그램을 실행하면 다음과 같은 화면이 나옵니다.

 

 

  이 때 자신의 Teensy Board에 있는 버튼(Button)을 눌러 보시면, 프로그램 모드로 진입할 수 있습니다. 저는 Teensy Board 3.6을 사용하고 있는데요. 버전과 상관없이 Teensy Board에는 모두 버튼이 존재할 겁니다. 아무튼 버튼을 누르게 되면, Teensy Loader 프로그램도 다음과 같이 화면이 바뀝니다. 이것은 HalfKay가 동작하고 있다는 의미입니다.

 

 

  그리고 함께 다운로드 받은 Blink 프로그램 예제 압축파일의 압축을 풀어주시면, 다음과 같이 자신의 Teensy 버전에 맞는 프로그램 파일(.hex)을 확인하실 수 있습니다.

 

 

  이제 해당 파일을 우리의 Teensy Board에 업로드 해봅시다.

 

 

  업로드 이후에는 프로그램(Program) 버튼과 재부팅(Reboot) 버튼을 차례대로 클릭해 주시면, 우리가 업로드 한 프로그램 파일(.hex)이 정상적으로 Teensy Board 위에서 실행됩니다.

 

 

  실행 결과, 매우 빠르게 LED가 깜빡이는 프로그램 예제가 정상적으로 Teensy Board에서 실행되는 것을 확인할 수 있었습니다. 가장 먼저 아두이노 IDE를 실행해서 [보드]에서 자신의 버전에 맞는 Teensy Board를 선택합니다.

 

 

  이후에 Teensy 예제 프로젝트 소스코드를 확인하실 수 있습니다. 가장 기본적인 Blink 프로젝트를 열어 봅시다.

 

 

  프로젝트를 확인하신 이후에는 소스코드를 확인 하시고 [확인/컴파일] 버튼을 눌러서 컴파일 해볼 수 있습니다.

 

 

  이후에 소스코드를 업로드 하기 전에 USB를 이용해 Teensy Board와 컴퓨터를 연결하고, 해당 포트를 선택합니다.

 

 

  최종적으로 코드를 업로드하면, 우리가 작성한 코드에 맞게 정상적으로 Teensy Board가 동작합니다.

 

 

※ 소스코드 수정해보기 ※

 

  다음과 같이 소스코드를 수정해서 다시 [스케치] - [확인/컴파일]을 진행합니다. 그리고 [스케치] - [업로드]에 들어가면 됩니다.

 

 

  그러면 이제 우리의 Teensy 보드가 3초 동안 LED를 빛냈다가, 0.5초 동안 껐다가를 반복하게 됩니다.

 

※ 추가 예시 ① Serial 통신 예시

 

  기본적으로 앞으로의 예시들을 수행할 때는 다음과 같이 [툴] - [USB Type]에서 적절한 타입(Type)을 설정해주어야 합니다. USB Type을 제대로 설정해야 관련 라이브러리들을 불러오기 때문에, Type이 제대로 설정되어 있지 않으면 소스코드 오류가 발생할 수 있습니다.

 

 

  바로 기본적인 Teensy 예제에서 [USB Serial] - [HelloWorld]를 확인할 수 있습니다.

 

 

  이 예제는 업로드 이후에 [시리얼 모니터]를 확인하면 됩니다.

 

 

  시리얼 모니터를 통해서 Teensy가 보내는 시리얼 메시지를 확인할 수 있습니다.

 

 

※ 추가 예시 ② 키보드 예시 ※

 

  또한 키보드(Keyboard) 예시도 한 번 실행해보면 좋습니다. 이 예시는 우리의 Teensy 보드를 키보드처럼 인식하고, Teensy 보드가 특정한 문자열을 입력한 것처럼 인식이 되도록 해줍니다.

 

 

  소스코드를 보면, 우리의 Teensy 보드가 5초에 한 번씩 "Hello World"라는 문장을 입력하는 키보드가 되는 것을 알 수 있습니다. 사실 이런 특징을 이용하면 꽂기만 하면 특정 작업을 수행하는 물리적 장치를 만드는 것도 가능할 것으로 보이네요. 예를 들어 꽂기만 하면 윈도우(Windows) 키를 누르거나 하는 작업도 가능할 것입니다.

 

 

※ 추가 예시 ③ 마우스 예시 ※

 

  또한 마우스 예시도 있습니다.

 

 

  소스코드를 실행하면 삼각형 형태로 반복적으로 마우스가 움직이게 됩니다.

 

 

728x90
반응형

728x90
반응형

  PDF 파일을 수정하는 방법은 크게 두 가지입니다. ① 자신의 컴퓨터에서 PDF 파일 Editor 프로그램을 열어서 이용하시거나, ② 온라인 PDF 파일 Editor를 이용하시면 됩니다. 먼저 온라인 PDF 파일 Editor를 소개하겠습니다. Smallpdf라는 사이트인데, 이를 이용하면 무료로 온라인 상에서 바로 PDF 파일을 수정할 수 있습니다.

 

  ▶ Smallpdf 웹 사이트: https://smallpdf.com/kr/edit-pdf

 

  아래와 같은 사이트에서 PDF 파일을 드래그해서 놓아 봅시다.

 

 

  그러면 다음과 같이 온라인 상으로 수정할 수 있는 페이지가 열립니다. 다만 기능적인 한계가 있습니다. 따라서 간단하게 PDF 파일을 수정하는 경우에 이용하면 좋습니다.

 

 

  ▶ Adobe Acrobat 체험판 다운로드: https://acrobat.adobe.com/kr/ko/free-trial-download.html

 

  Adobe Acrobat을 PDF Editor로 사용할 수도 있습니다. Adobe Acrobat은 PDF 파일을 보고, 수정하고, 관리할 수 있도록 해줍니다. 저는 학교에서 Acrobat을 지원해주고 있기 때문에 프로(Pro) 버전을 사용하고 있습니다. 기본적으로 Acrobat을 이용하면 PDF 파일을 매우 손쉽게 수정할 수 있습니다.

 

  Acrobat에서 [PDF 편집] 기능을 이용하면 됩니다.

 

 

  여기에서 [텍스트 및 이미지 편집] 기능을 이용하시면 됩니다.

 

 

  그러면 다음과 같이 내용을 손쉽게 변경할 수 있습니다.

 

728x90
반응형

Teensyduino 설치 방법

기타2019. 12. 2. 13:17
728x90
반응형

  Teensy는 작은 크기의 보드(Board)입니다. 일반적으로 USB 개발(Development)에 사용되는 보드이며, 다음과 같이 생겼습니다.

 

 

  기본 프로그래밍 언어로 C언어를 채택하고 있고, Arduino IDE를 이용해서 코딩할 수 있습니다. 아두이노(Arduino) IDE를 이용하는 것이 간단하므로, 이를 이용하여 개발하는 방법에 대해서 소개하겠습니다. 바로 Teensyduino를 설치하시면 됩니다.

 

  ▶ Teensyduino 설치: https://www.pjrc.com/teensy/teensyduino.html

 

  기본적으로 Teensyduino는 Arduino에 연동되어, 우리가 편하게 사용할 수 있습니다. 아두이노로 작성된 프로그램은 Teensy에서도 동작한다는 점이 특징입니다. Teensy는 표준 아두이노 함수(Standard Arduino Functions)를 지원합니다. digitalWrite, pinMode, analogRead와 같은 함수들을 이용할 수 있다는 의미입니다.

 

  다만, 아두이노가 이미 설치가 되어 있어야 Teensyduino 또한 설치가 가능합니다. 혹시 아두이노 IDE가 설치되어 있지 않은 상태라면, https://ndb796.tistory.com/350 이 경로에서 설명되어 있는대로 따라서 아두이노 IDE를 설치하시기 바랍니다.

 

 

  설치 프로그램을 실행한 뒤에는, 기본적인 설정 그대로 [확인] 버튼만 눌러도 간단히 설치를 진행할 수 있습니다.

 

 

  윈도우에서 설치하는 경우 USB Serial Driver 또한 자동으로 찾아 주네요.

 

 

  이후에 아두이노(Arduino)가 설치되어 있는 위치를 불어봅니다. 아두이노가 설치 되어 있는 상태라면, 자동으로 해당 위치를 찾아줍니다.

 

 

  이후에 기본 설정 그대로 설치하시면 됩니다.

 

 

  위와 같이 Teensyduino가 설치된 이후에는, 아두이노(Arduino)를 실행하면 다음과 같이 Teensyduino를 연동하여 사용할 수 있습니다. [툴]에서 [보드]로 가면, Teensy를 확인할 수 있습니다.

 

728x90
반응형