2024의 게시물 표시

파이썬으로 만든 부산 버스앱

이미지
개요 안녕하세요. 😁  오늘은 일상에서 많이 사용하는 버스(Bus)앱 을 파이썬으로 만들어 보려 합니다. 제 고향인 부산의 버스정보 를 표시하도록 구성하였으며 파이썬 언어, PyQt6를 이용해 제작되었습니다.

시간복잡도 (Time Complexity), Big-O

이미지
개요 우리가 작성한 코드는 실행시간이 얼마나 걸릴까요? 🤔 컴퓨터는 매우 빠르지만 계산이 복잡하거나 데이터의 양이 많다면 결과를 얻는 시간은 점차 길어질 것입니다. 

Qt6기반 소켓프로그래밍 (채팅앱)

이미지
들어가며 2020년쯤에 작성된 " MFC 기반 소켓 프로그래밍 " 예제가 있습니다. 

Google MediaPipe를 활용한 인체관절 각도측정

이미지
개요 안녕하세요. 평소 육체적, 정신적 건강을 위해 자전거 를 즐겨탑니다. 훈련양이 적어 실력이 부족함에도 늘 더 잘타고 싶은 욕망에 좀 더 시간대비 효과적인 훈련방법에 대한 고민이 많습니다. 😓 특히 페달링을 하는 각도 와 안장의 높이에 대해 여러 공부를 하고 있습니다. 그러던 와중에 구글의 MediaPipe 라는 기술을 알게 되었고 취미인 싸이클에 적용하기 위해 앱을 만들어 보았습니다.  꼭 싸이클분야가 아니어도 아래의 내용을 읽은 후 관절 번호를 변경하면 신체의 어느 부위라도 관절 인식 및 각도 측정이 가능 합니다. YouTube 운동영상 녹화후 분석 골격인식 후 팔꿈치, 무릎각도 측정 주요 기능으로 1. 실시간, 또는 저장된 동영상에서 인체 골격 추출 2. 골격의 위치좌표 를 역탄젠트 함수로 각도 측정 3. 어깨, 팔꿈치, 팔목 3 좌표로 팔꿈치(ELBOW) 각도 측정 4. 엉덩관절, 무릎, 발목 3 좌표로 무릎(KNEE) 각도 측정   Google MediaPipe MediaPipe 솔루션은 애플리케이션에 인체특징인식 관련  인공지능 (AI) 및 머신러닝 (ML) 기법을 빠르게 적용할 수 있는 라이브러리와 도구 모음을 제공합니다. Google MediaPipe 소개   아래의 솔루션에서 인체 특징을 감지할 수 있으며 저는 "Pose Landmark" 기술을 활용해 앱을 제작하였습니다.  보통 구글 GCP( G oogle C loud P latform

PyQt6를 이용한 동영상플레이어앱

이미지
개요 안녕하세요. 예전에 PyQt5 기반의 동영상플레이어 를 만든 게시물이 있었습니다. 수업 때 종종 활용해왔던 코드인데, 2024년부터 학원수업에 Qt6 기반의 PyQt6 를 사용하다 보니 PyQt5와 다른 몇가지 변화가 있어 새롭게 동영상 플레이어를 만들어 보았습니다.  PyQt6 Multimedia 변경사항 새롭게 추가된 부분을 보면 레코딩 관련 클래스들이 추가되었습니다. 출처 : Qt Documentation 삭제된 부분은 추가보다 더 많습니다. 존재의 의미를 잘 몰랐던 QMediaContent (QUrl과 다른점이 🤔 )가 삭제되었으며, 잘 사용해오던 QMediaPlaylist 가 삭제되었습니다. 😩 출처 : Qt Documentation 이제 미디어 파일(비디오, 오디오 등)을 리스트로 관리해주던 QMediaPlaylist 클래스가 없어지면서 사용자가 직접 미디어 파일들을 관리 해야 합니다. 본 예제에서는 파이썬의 리스트를 사용해서 처리하였습니다. Qt는 크로스 플랫폼을 지원하기 때문에 그 클래스 내부는 다양한 OS에 대응하기 위해 복잡한 구조로 이루어져 있을 것으로 추측되고 편의적인 목적의 클래스들이 삭제된 것으로 추측됩니다. 좀 더 세부적인 변화는 아래 Qt 링크를 참조하기 바랍니다. Changes to Qt Multimedia 개발환경 Windows 11 Pro, MS Visual Studio 2022  Python 3.11.9 64bit, PyQt6 6.7.0   소스코드 Git Link : Movie

코딩챌린지 1등을 축하합니다

이미지
안녕하세요. 오션코딩학원장 김주원입니다. 지난 5월 부산광역시교육청 정보영재교육원에서 주관하는 썸머코딩페스티벌 이 있었습니다. C++, Python 에 대한 교육도 진행하고 코딩챌린지라는 프로그래밍 대회도 같이 진행됩니다. 무료교육도 받고 코딩 챌린지 참가자 전원 생기부에 해당활동을 기재 해 주는 좋은 기회입니다. (교내대회를 제외하고 사교육 조장등 이유로 외부대회 수상은 생기부에 기록불가)

NYPC 문제풀이

이미지
개요 NYPC 는 넥슨에서 개최하는 청소년 프로그래밍 대회입니다. 매년 여름방학 시즌에 진행되어 비교적 학업에 지장을 덜 받고 출전해 볼 수 있습니다. 학원생 중 이 대회를 준비하는 친구들이 많아 문제풀이를 지속적으로 업데이트할 계획입니다. 자세한 대회 세부 요강 및 기출문제는 NYPC 홈페이지 를 참조하기 바랍니다.

파이썬 성능을 극대화하는 테크닉

이미지
개요 파이썬의 성능을 올리는 프로그래밍 팁 은 여러 가지가 있습니다. 여기 몇 가지 유용한 팁과 예시를 소개하겠습니다. 1. 리스트 컴프리헨션 사용 리스트 컴프리헨션 (List Comprehension) 은 for 루프를 사용한 리스트 생성보다 더 빠르고 간결합니다. 소규모 배열보다 대규모 배열 생성시 그 차이를 체감할 수 있습니다. # 일반적인 방법 squares = [] for x in range(10): squares.append(x**2) print(squares) # 리스트 컴프리헨션 사용 squares = [x**2 for x in range(10)] print(squares) 결과는 동일합니다. 참고로 "전문가를 위한 파이썬" 에서 저자인 루시아누 하말류는 List Comprehension을 "지능형 리스트" 라고 표현합니다. 지능형리스트나 리스트 컴프리헨션이나 이름이 중요하진 않지만 용어가 친숙하면 두려움없이 다가가는데 도움이 됩니다. 2. 제너레이터 사용 리스트나 튜플(Tuple) 대신 제너레이터(Generator)를 사용하면 메모리 사용을 줄일 수 있습니다. # 리스트 사용 nums = [x for x in range(1000000)] # 제너레이터 사용 nums = (x for x in range(1000000)) 리스트는 모든 요소를 메모리에 한 번에 저장합니다. 즉 리스트의 크기만큼 메모리가 필요합니다.  이를 위해 필요한 메모리 공간이 충분히 확보되어야 하며, 큰 리스트를 만들 경우 메모리 사용량이 급격히 증가할 수 있습니다. 반면, 제너레이터는 필요할 때마다 요소를 하나씩 생성합니다. 제너레이터는 전체 데이터를 한 번에 메모리에 올리지 않고, 데이터를 필요로 할 때 생성하여 처리하므로 메모리 사용이 매우 적습니다.   3. 내장 함수 사용 파이썬의 내장 함수(Built-in

Google Maps API 를 활용한 C++ REST 예제

이미지
개요 Google Maps API 중 Static Map 을 이용, 지도이미지를 온라인으로 다운 받아 출력하는 예제입니다. 사용법은 구글지도를 웹브라우저에서 사용하는 방식과 유사합니다. 이전에 작성된 게시물 중 Python 으로 작성된 예제 와 동일하며, C++ 로 만들어 보았습니다. 동작 방식은 아래의 동영상과 캡쳐이미지를 참조 바랍니다. 완성본 앱 이미지 Google Static Map Google Static Map API 는 구글지도 서비스를 이용할 수 있는 API 함수 를 제공하는 것을 말합니다. 웹브라우저, 구글앱으로 구글지도를 사용하는 것은 무료지만, 지도 API를 내 앱에서 활용하는 본 예제같은 서비스는 유료이며 사전에 GCP ( G oogle C loud P latform)에 해당 서비스를 신청하고 결제 정보를 연동해 두어야 합니다. GCP (링크) 에서 제공되는 방대한 서비스(A.I, DB, 머신대여, 스토리지, 지도 등)  중 내게 필요한 서비스를 신청 후, API Key 를 받을 수 있으며, 해당 키가 있어야만 API 호출이 가능합니다. 아래는 구글의 소개자료 입니다.  보다 자세한 내용은 구글 소개자료 링크 를 참조 바랍니다. Google Developer Guide 비용은 대략 1000번의 이미지 호출당 US 2$ 정도의 비용이 발생합니다. 더 많이 사용하는 경우는 약간 저렴하고 매우 많이 사용하는 경우는 별도의 비용으로 책정한다고 합니다. Pricing 정책

파이썬 개발환경 설치

이미지
개요 시대가 변해도 인간세상의 주류언어 는 영어 에서 변함이 없습니다. 하지만 프로그래밍 세상에서는 느리지만 변화가 있습니다. 과거의 C, C++, JAVA 에서, 2024년 현재의 프로그래밍 주류언어 는 Python 이라고 생각합니다. 미래를 예측하는 능력은 없지만 다음 세대는 아마도 Dart 언어 기반의 Flutter Framework 이 아닐까 추측해 봅니다.

Qt6 기반의 Tetris(테트리스) 게임앱

이미지
개요 이전 게시물과 동일하지만 C++ 언어로 만든 테트리스 게임 입니다. 파이썬 버전과 최대한 동일하게(변수, 함수, 클래스명 등) 만들어져 있으므로 코드 설명은 이전 게시물 참조 바랍니다.

PyQt5 기반Tetris(테트리스) 게임앱

이미지
개요 이번 주제는 Python + PyQt5 로 만든 테스리스 게임입니다. (키보드 화살표 ←, →, ↑(회전), ↓(빨리하강) 로 조작) 예전에 C++ 로 만들어 올려둔 게시물이 있는데, 구글에서 저작권 위반 신고가 들어와 게시물이 삭제(?)되어 현재는 게시글이 없어진 상태입니다. 제가 직접  짠 코드인데 이유는 정확히 모르지만 같이 넣어둔 게임 효과음이 원인이 아닐까 추측합니다.😓 

QTableWidget Copy & Paste 사용해보기

이미지
개요 최근 QTableWidget Class를 사용하는 중,  Excel 파일 값 복사, QTableWidget에 붙여넣기 QTableWidget의 값 복사 Excel에 붙여넣기 를 할 필요가 생겼습니다. 혹시나 해서, 코드를 따로 작성하지 않고 빈 QTableWidget 을 만들고 엑셀 데이터를 복사( Copy )해 붙여넣기( Paste ) 해보니 역시나 동작하지 않습니다. 세상에 공짜는 없습니다. 😅 아마도 QWidget 에서 Ctrl + C, V 키보드 이벤트 발생을 감지하고, 복사된 클립보드의 내용을 따로 처리해주는 코드가 필요할 것으로 예상됩니다. 간단하게 생각하고 바로 코드를 작성하기 진행하였지만 생각보다 복잡해 그 과정을 정리해 보았습니다.    목표 Copy data from Excel file to QTableWidget   Copy data from QTableWidget to Excel 소스코드 from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTableWidget, QTableWidgetItem from PyQt5.QtCore import Qt import sys QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) class Window(QWidget): def __init__(self): super().__init__() self.initUi() self.resize(400,600) def initUi(self): self.setWindowTitle('Ocean Coding School') self.tw = QTableWidget() row = 10 col = 3 self.tw.set

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기