분류 전체보기 254

[파이썬] tkinter (2) - PDF 페이지 추출 프로그램

tkinter 개요   지난 시간에는 GUI에서 기초적인 라벨을 생성하고 창을 띄우는 작업을 해보았다. 이번 시간에는 이미지를 삽입하고 버튼을 생성하여 이벤트를 할당하는 방법에 대해 알아보겠다. 또한 입력을 받는 Dialog를 생성하여입력을 받고, 이를 이용한 프로그램을 만들어 보겠다.본문위젯 - 백그라운드 이미지 설정   오늘의 목표는 버튼을 클릭하면 PDF 파일을 선택하는 창이 뜨고, 해당 PDF 파일에서 특정 페이지를 추출하는 프로그램을 만드는 것이다. 먼저 그럴싸한 프로그램을 만들기 위해 백그라운드 이미지를 설정할 것이다. 이미지를 다루기 위해 다음과 같이 pillow 라이브러리를 설치하자.  pip install pillow   PIL(Python Imaging Library)은 Python에서..

Language/Python 2024.06.29

[파이썬] tkinter (1)

tkinter개요  파이썬에는 다양한 GUI(Graphical User Interface) 라이브러리가 존재한다. 그중, Python 표준 라이브러리인 tkinter는 Python과 함께 배포되므로 별도의 설치가 필요하지 않다. 이번 시간에는 해당 라이브러리를 통해 간단하게 GUI를 생성하는 방법에 대해 알아보도록 하겠다.GUI: 사용자가 컴퓨터와 상호작용할 수 있는 시각적 인터페이스. 텍스트 기반 인터페이스와 달리 아이콘, 버튼, 윈도우, 라벨 등 시각적 요소를 사용하여 직관적이고 사용하기 쉽게 만들 수 있다본문위젯 - 윈도우(Window)   윈도우는 기본적인 애플리케이션 창을 의미한다. Tkinter에서 하나의 기본 창을 생성하고 실행하는 방법을 예제로 설명해 보겠다. import tkinter a..

Language/Python 2024.06.24

[통신] CAN DBC

CAN DBC개요  지난 시간엔 CAN 통신에 대한 기초적인 내용(특징, 장점, 단점, 구조 등)에 대해 다뤘다. 이번 시간에는 구체적으로 CAN 통신을 하기 위해서 어떤 과정을 거쳐야 하는지, 이 과정에서 DBC(Data Binary Code)가 어떤 역할을 하는지 알아보도록 하겠다.본문통신 과정  앞서 CAN 통신을 하기 위해서는 MCU 내부에 CAN Controller가 내장되어 있어야 한다고 했다. 이러한 컨트롤러와 통신하기 위해서는 트랜시버(transceiver)가 필요하며, 송/수신되는 데이터를 모니터링하기 위해 물리적인 장치가 필요하다. 대표적으로 Peak CAN과 Vector CAN 장비가 있지만, 이 장비들은 가격이 비싸기 때문에 상대적으로 저렴한 CANable Pro v2.0 제품을 이..

CS/통신 2024.06.22

[통신] CAN 통신 개요

CAN 통신개요 및 특징  CAN(Controller Area Network) 통신은 호스트 컴퓨터 없이 마이크로컨트롤러와 각종 장치들이 상호 통신할 수 있도록 설계된 메시지 기반 멀티플렉스 통신 프로토콜이다. 이때 호스트 컴퓨터(Host Computer)가 없다는 것은 각 장치가 중앙 제어 장치 없이 독립적으로 동일한 버스를 통해 데이터를 주고받는다는 것을 의미하며, 멀티플렉스 프로토콜(Multiplex Protocol)은 여러 신호를 하나의 통신 회선으로 다중 전송하여 회선 수를 줄인 것을 의미한다.  CAN 통신은 다음과 같은 특징을 갖고 있다. 1. 신뢰성: 메시지 충돌과 오류를 자동으로 검출하고 수정하는 기능을 내장하고 있어 노이즈에 강함. 이때 버스가 Twist Pari 2선(High, Low..

CS/통신 2024.06.09

[C++] std::binary_search

이진 탐색 개요 예전 이진 탐색에 대한 개념적인 부분을 해당 글에서 다룬 적이 있었다. 다시 상기하자면, 정렬된 배열을 반으로 나눠가며 원하는 값을 찾는 알고리즘이 이진 탐색이다. 이번 시간에는 해당 알고리즘을 구현한 std::binary_search 함수에 대한 사용법을 알아보도록 하자. 본문 사용법 이진 탐색 또한 탐색의 일종이므로, 배열 내에서 특정 요소가 존재하는지 확인할 때 사용된다. 이때 대상 범위가 이미 정렬되어 있어야 하며, 중복 요소가 있는 경우 어느 요소인지 알 수 없다. 이는 함수가 단순히 주어진 값이 배열 내에 존재하는지 여부만을 체크하기 때문이다. #include #include #include int main() { std::vector v = { 1, 2, 4, 5, 9, 10..

Language/C++ 2024.03.11

[백준] 2217 로프 with C++

문제설명 입출력 예제 개념 각 로프는 고유한 중량 한계를 가지고 있으며 이를 초과할 수 없다. 이때 로프 2개가 각각 10kg, 15kg을 버틸 수 있다고 하면, 10kg 한 개를 쓸 땐 10kg, 15kg 한 개를 쓸 땐 15kg, 10kg과 15kg을 함께 쓰면 각 로프가 10kg씩 버틸 수 있으므로 20kg를 버틸 수 있다. 이러한 특징에 착안하여 로프들을 강도에 따라 정렬하여 가장 강한 로프부터 시작하여 점점 약한 로프를 추가하며, 각 단계에서의 최대 중량을 계산할 수 있다. 이때 로프들 중 일부만을 선택해야 할 경우도 고려해야 한다. 예를 들어, 10, 20, 30, 40, 50kg을 버틸 수 있는 로프 5개가 있다고 가정해 보자. 1. 50kg: 50kg 2. 50kg, 40kg: 40 + 4..

Algorithm/백준 2024.03.08

[Unity] VR 시뮬레이터 만들기

VR 시뮬레이터 개요 VR 개발을 하다 보면, 현재 내 상황에 대한 디버깅이 필요한 순간이 있을 것이다. 예를 들어, 운전을 하는 VR을 개발 중이면 현재 개발 단계에서 어느 부분이 모자란지에 대한 정보가 필요한데, 이를 확인하기 위해 매번 빌드하는 과정이 상당히 번거롭다. 따라서 간단한 시뮬레이터를 구현하여 이를 해결해 보는 시간을 가지도록 해보겠다. 본문 전처리 지시문 유니티에서 코드를 실제 빌드 환경과 시뮬레이션 환경을 나누어 처리하고자 할 때 주로 전처리 지시문(Preprocessor Directives)을 사용한다. 전처리 지시문을 활용하면 특정 조건에 따라 코드의 일부를 컴파일러에서 제외하거나 포함시킬 수 있다. 이를 통해 실제 빌드와 에디터 내에서의 시뮬레이션을 구분할 수 있다. 유니티에서 ..

Game/Unity 2024.02.04

[Unity] Google Cardboard Head Tracking

VR 세팅 개요 이전 게시글에서는 주어진 예제를 기반으로 VR 환경을 구축했었다. 이번에는 VR 개발에 필요한 최소한의 패키지만을 받아와서, 직접 VR을 개발할 수 있는 최소한의 기본 환경을 만들어보도록 하겠다. 본문 환경 세팅 일단 Cardboard XR 플러그 인을 설치해야 하므로, Package Manaer에서 깃 URL을 추가해 준다. https://github.com/googlevr/cardboard-xr-plugin.git 그리고 해당 게시글의 VR 빌드 세팅 부분을 그대로 따라 하면 된다. 카메라 설정 여기가 헤드셋의 움직임을 감지하기 위해 메인 카메라에 Tracked Pose Driver 컴포넌트를 추가해줘야 한다. Google Cardbard는 머리 회전을 감지하는 기능에 초점을 맞추었기..

Game/Unity 2024.02.03

[C] 구조체(Structure)

구조체 개요 프로그래밍을 하다 보면 서로 다른 타입의 변수들을 하나의 단위로 묶어야 할 때가 있다. 예를 들어, 학생들의 점수를 관리하는 프로그램을 만든다고 가정해 보자. 학생들의 이름을 저장해야 하므로 문자형 배열, 점수가 필요하므로 정수, 혹은 실수형 데이터가 필요할 것이다. 즉, 학생 한 명당 여러 개의 변수가 필요하므로, 학생 수가 많아질수록 관리해야 할 변수의 수가 기하급수적으로 늘어난다. 이는 가독성의 저하와 코드의 복잡성 증대로 인해 오류 발생 가능성을 야기한다. 이런 문제점을 해결하기 위한 방법으로 구조체를 사용하는 것이 매우 효과적이다. 구조체(Struct)는 서로 다른 타입의 변수들을 하나의 논리적 단위로 묶는 사용자 정의 타입이다. 위의 예시에서 구조체를 이용하여 각 학생들의 정보를 ..

Language/C 2024.01.31

[라즈베리파이] 기초 세팅

라즈베리파이 기초 세팅 개요 이번 시간에는 임베디드 리눅스 기반 개발 보드 중 하나인 라즈베리 파이를 세팅하는 방법에 대해 알아보도록 하겠다. 필자는 라즈베리 파이 버전 4를 사용하고 있으므로, 해당 모델을 기준으로 설명하도록 하겠다. 본문 설치 라즈베리파이는 전체 컴퓨터 시스템으로서 작동한다. 즉, 이를 위해 파일 시스템, 사용자 인터페이스, 네트워킹, 드라이버 지원 등을 제공하는 운영 체제가 필요하다. 따라서 내장 하드 드라이브가 없는 라즈베리파이는 SD 카드를 이용해 운영 체제 이미지를 복사하고, 필요한 부팅 설정을 구성해야 한다. 먼저 해당 링크를 타고 들어가서 라즈베리 파이 OS Imager를 설치해 주자. 그러면 다음과 같은 Imager 프로그램이 실행될 것이다. 어떤 종류의 디바이스인지 골라..