Tkinter 화면 중앙에 창 배치하기 from tkinter import Tk, BOTH from tkinter.ttk import Frame class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.title("Centered window") self.pack(fill=BOTH, expand=1) self.centerWindow() def centerWindow(self): w = 290 h = 150 sw = self.master.winfo_screenwidth() sh = self.master.winfo_screenheight() x = (sw - w)/2 y = (s..
Tkinter tutorial이것은 Tkinter 튜토리얼입니다. 파이썬에서 Tkinter로 GUI 프로그래밍의 기초를 다룹니다. 이 자습서는 초급 및 중급 프로그래머에게 적합합니다. Tkinter는 Tk GUI 툴킷에 대한 파이썬 바인딩입니다. Tk는 Tcl 언어의 원래 GUI 라이브러리입니다. Tkinter는 파이썬 인터프리터에 내장 된 완전한 Tcl 인터프리터를 둘러싼 파이썬 래퍼로 구현된다.첫 번째 예에서는 화면에 기본 창을 표시합니다. from tkinter import Tk, BOTH from tkinter.ttk import Frame class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(se..
중일전쟁 (20세기 아시아 최대 규모 전쟁) 중일 전쟁(中日戰爭)은 1937년 7월 7일 일본의 중국 대륙 침략으로 시작되어 1945년 제2차 세계 대전이 끝날 때까지 계속된 중화민국과 일본제국 사이의 전쟁이다. 중화인민공화국에서는 중국 항일 전쟁(중국어 간체자: 中国抗日战争, 정체자: 中國抗日戰爭, 병음: Zhōngguó Kàngrì Zhànzhēng), 일본에서는 일중 전쟁(일본어: 日中戦争)혹은 지나 사변, 서구권에서는 제2차 중일 전쟁(Second Sino-Japanese War) 이라고 부른다. 중일 전쟁은 20세기 아시아 최대 규모의 전쟁이었다. 1930년대, 경제 대공항으로 큰 위기가 닥친 일본은 중국을 침략하기에 이른다. 1931년 9월 18일 일본은 만주 사변을 일으킨다. 만주 사변(滿洲..
4.2. 파이카메라 OpenCV 객체로 캡처이것은 numpy 배열로 캡처하는 변형입니다. OpenCV는 numpy 배열을 이미지로 사용하고 평면 BGR의 색상을 기본값으로 사용합니다. 따라서 다음은 OpenCV 호환 이미지를 캡처하는 데 필요한 모든 것입니다. import time import picamera import numpy as np import cv2 with picamera.PiCamera() as camera: camera.resolution = (320, 240) camera.framerate = 24 time.sleep(2) image = np.empty((240 * 320 * 3,), dtype=np.uint8) camera.capture(image, 'bgr') image = ima..
4.1. 파이카메라 수 많은 배열로 캡처 1.11부터 picamera는 파이썬의 버퍼 프로토콜 (numpy의 ndarray 포함)을 지원하는 모든 객체에 직접 캡처 할 수 있습니다. 단순히 대상을 캡처 대상으로 지정하면 이미지 데이터가 객체에 직접 쓰여집니다. 대상 객체는 다양한 요구 사항을 충족해야합니다 (일부는 사용중인 Python 버전에 따라 다릅니다). 버퍼 객체는 쓰기 가능해야합니다 (예 : 변경 불가능한 바이트 객체로 캡처 할 수 없음). 버퍼 오브젝트는 모든 이미지 데이터를 수신 할만큼 충분히 커야합니다. (Python 2.x에만 해당) 버퍼 객체는 1 차원이어야합니다. (Python 2.x에만 해당) 버퍼 객체는 바이트 크기의 항목을 가져야합니다. 예를 들어, 3 차원 numpy ndarr..
3.16. 파이카메라 LED 제어 특정 상황에서는 V1 카메라 모듈의 빨간색 LED가 방해가 될 수 있습니다 (V2 카메라 모듈에는 LED가 없습니다). 예를 들어, 자동 확대 야생 생활 사진의 경우, LED가 동물을 놀라게 할 수 있습니다. 클로즈업 피사체로 인해 원치 않는 반사 된 적색 눈부심을 유발할 수도 있습니다.이를 처리하는 한 가지 간단한 방법은 단순히 불투명 한 커버링을 LED에 배치하는 것입니다 (예 : 청사 또는 전기 기술자 테이프). 또 다른 방법은 부팅 구성에서 disable_camera_led 옵션을 사용하는 것입니다.그러나 RPi.GPIO 패키지가 설치되어 있고 Python 프로세스가 충분한 권한 (일반적으로 sudo python으로 루트로 실행됨을 의미 함)으로 실행되는 경우, ..
3.15. 파이카메라 출력에 텍스트 겹쳐 쓰기 카메라에는 모든 출력 (미리보기, 이미지 캡처 및 비디오 녹음 포함)에 최대 255 자의 ASCII 텍스트를 겹쳐 쓸 수있는 초보적인 주석 기능이 있습니다. 이것을 달성하기 위해서는 단순히 annotate_text 속성에 문자열을 할당하십시오 :import picamera import time camera = picamera.PiCamera() camera.resolution = (640, 480) camera.framerate = 24 camera.start_preview() camera.annotate_text = 'Hello world!' time.sleep(2) # Take a picture including the annotation camera.c..
3.14.파이카메라 미리보기에서 이미지 오버레이 카메라 미리보기 시스템은 여러 레이어 렌더러를 동시에 조작 할 수 있습니다. picamera 라이브러리는 하나의 렌더러 만 카메라의 미리보기 포트에 연결하도록 허용하지만 정적 렌더러를 표시하는 추가 렌더러를 만들 수 있습니다. 이러한 중첩 렌더러는 간단한 사용자 인터페이스를 만드는 데 사용할 수 있습니다. 참고: 오버레이 이미지는 이미지 캡처 또는 비디오 녹화에는 나타나지 않습니다. 카메라 출력에 추가 정보를 삽입해야하는 경우 출력물에 텍스트 오버레이를 참조하십시오. 오버레이 렌더러를 사용하는 한 가지 어려움은 카메라의 블록 크기까지 패딩 된 인코딩되지 않은 RGB 입력을 기대한다는 것입니다. 카메라의 블록 크기는 32x16이므로 렌더러에 제공되는 모든 이..
3.13. 파이카메라 네트워크 스트림에 기록 이것은 비디오를 스트림에 녹화하는 것과 비슷하지만 BytesIO와 같은 메모리 내 스트림 대신 socket ()에서 생성 된 파일과 유사한 객체를 사용합니다. 네트워크 스트림에 캡처하는 예제와 달리 이미지 길이와 같은 것을 작성하여 네트워크 프로토콜을 복잡하게 만들 필요가 없습니다. 이번에는 비디오 프레임의 연속적인 스트림을 보내고 있습니다. (훨씬 효율적인 형식 임에도 불구하고 필연적으로 이러한 정보가 통합되어 있습니다.) 따라서 녹화를 네트워크 소켓으로 바로 내보낼 수 있습니다. 첫째, 서버 측 스크립트는 비디오 스트림을 읽고 미디어 플레이어에 파이프하여 표시합니다. import socket import subprocess # Start a socket l..
3.12. 파이카메라 순환 스트림에 기록이는 비디오를 스트림에 녹화하는 것과 비슷하지만, picamera 라이브러리가 제공하는 특별한 종류의 인 메모리 스트림을 사용합니다. PiCameraCircularIO 클래스는 링 버퍼 기반 스트림, 특히 비디오 녹화를 구현합니다. 이렇게하면 비디오의 마지막 n 초를 포함하는 메모리 내 스트림을 유지할 수 있습니다. 여기서 n은 비디오 레코딩의 비트 전송률과 스트림의 기본 링 링 버퍼 크기로 결정됩니다. 이러한 종류의 저장 장치의 일반적인 사용 사례는 동작을 감지하고 모션이 감지 된 위치의 비디오만 디스크에 기록하려는 보안 응용 프로그램입니다. 이 예는 write_now 함수가 True를 반환 할 때까지 20초의 비디오를 메모리에 유지합니다 (이 구현에서는 무작위이..
3.11. 파이카메라 여러 파일에 녹음레코딩을 여러 파일로 분할하려면 split_recording () 메서드를 사용하여 다음을 수행 할 수 있습니다.import picamera camera = picamera.PiCamera(resolution=(640, 480)) camera.start_recording('1.h264') camera.wait_recording(5) for i in range(2, 11): camera.split_recording('%d.h264' % i) camera.wait_recording(5) camera.stop_recording()이 방법은 1.h264, 2.h264 등 10 개의 비디오 파일을 생성해야하는데, 각각 약 5 초 길이입니다 (대략 split_recording ..
3.10. 파이카메라 비디오를 스트림에 녹화하기이것은 비디오를 파일에 기록하는 것과 매우 유사합니다 :from io import BytesIO from picamera import PiCamera stream = BytesIO() camera = PiCamera() camera.resolution = (640, 480) camera.start_recording(stream, format='h264', quality=23) camera.wait_recording(15) camera.stop_recording()여기서는 품질 매개 변수를 설정하여 인코더가 시도하고 유지하고자하는 이미지 품질 수준을 나타냅니다. 카메라의 H.264 인코더는 기본적으로 두 가지 매개 변수로 제한됩니다.비트 전송률은 인코더의 출력..
3.9. 파이카메라 비디오를 파일에 기록하기비디오를 파일에 기록하는 것은 간단합니다. import picamera camera = picamera.PiCamera() camera.resolution = (640, 480) camera.start_recording('my_video.h264') camera.wait_recording(60) camera.stop_recording() 위의 이미지 캡처 방법에서 사용했던 time.sleep () 대신에 위 예제에서 wait_recording ()을 사용합니다. wait_recording () 메소드는 지정된 시간 (초) 동안 일시 정지한다는 점에서 유사하지만 time.sleep ()과 달리 기다리는 동안 계속해서 기록 오류 (예 : 디스크 공간 부족 상태)를 ..
3.8. 파이카메라 네트워크 스트림 캡처 이는 timelapse 시퀀스 캡처의 변형입니다. 여기서 우리는 두 개의 스크립트를 가지고 있습니다 : 서버 (아마도 빠른 머신에 있음)는 Raspberry Pi로부터의 연결을 청취하고, 클라이언트는 Raspberry Pi에서 실행되어 이미지를 연속적으로 서버로 전송합니다. 우리는 아주 간단한 통신 프로토콜을 사용합니다 : 먼저 이미지의 길이가 32 비트 정수 (Little Endian 형식)로 전송 된 다음 이미지 데이터의 바이트가옵니다. 길이가 0이면 더 이상 이미지가 제공되지 않으므로 연결을 닫아야 함을 나타냅니다. 이 프로토콜은 다음과 같습니다. 먼저 서버 스크립트 (JPEG를 읽는 데 PIL을 사용하지만 OpenCV 또는 GraphicsMagick과 같은..
3.7. 파이카메라 낮은 조명(low light)에서 캡처 Pi의 카메라는 일관된 이미지 캡처와 비슷한 기술을 사용하여 조명이 약한 곳에서도 이미지를 캡처 할 수 있습니다. 주된 목적은 높은 게인을 설정하고 카메라가 최대한 많은 빛을 모을 수 있도록 긴 노출 시간을 설정하는 것입니다. 그러나 shutter_speed 속성은 카메라의 프레임 속도에 의해 제한되므로 가장 먼저 느린 프레임 속도로 설정해야합니다. 다음 스크립트는 6 초 노출 시간으로 이미지를 캡처합니다 (Pi의 V1 카메라 모듈이 가능한 최대, V2 카메라 모듈은 10 초 노출을 관리 할 수 있음).from picamera import PiCamera from time import sleep from fractions import Fracti..
3.6. 파이카메라 타임랩스 시퀀스 캡처 긴 시간 경과 시퀀스를 캡처하는 가장 간단한 방법은 capture_continuous () 메서드를 사용하는 것입니다. 이 방법을 사용하면 카메라가 멈추라고 말할 때까지 카메라가 이미지를 계속 캡처합니다. 이미지에는 자동으로 고유한 이름이 지정되므로 캡처 사이의 지연을 쉽게 제어 할 수 있습니다. 다음 예제는 각 샷 사이에 5 분의 지연 시간으로 이미지를 캡처하는 방법을 보여줍니다.from time import sleep from picamera import PiCamera camera = PiCamera() camera.start_preview() sleep(2) for filename in camera.capture_continuous('img{counter:..
3.5. 파이카메라 일관된 이미지 캡처밝기, 색상 및 대비 측면에서 모두 동일한 일련의 이미지를 캡처하고자 할 수 있습니다 (예 : 시간 경과 사진에서 유용 할 수 있음). 여러 샷에서 일관성을 유지하려면 다양한 속성을 사용해야합니다. 특히 카메라의 노출 시간, 화이트 밸런스 및 게인이 모두 고정되어 있는지 확인해야합니다. 노출 시간을 수정하려면 shutter_speed 속성을 적당한 값으로 설정하십시오.선택적으로 iso를 고정 값으로 설정하십시오.노출 이득을 수정하려면 analog_gain 및 digital_gain을 적절한 값으로 설정 한 다음 exposure_mode를 'off'로 설정하십시오.화이트 밸런스를 수정하려면 awb_mode를 'off'로 설정 한 다음 awb_gains을 (빨간색, 파란..
3.4. 파이카메라 크기가 조정 된 이미지 캡처 때로는 특히 이미지에서 일종의 분석이나 처리를 수행하는 스크립트에서 카메라의 현재 해상도보다 작은 이미지를 캡처하고자 할 수 있습니다. 이러한 크기 조정은 PIL 또는 OpenCV와 같은 라이브러리를 사용하여 수행 할 수 있지만 이미지를 캡처 할 때 Pi의 GPU가 크기 조정을 수행하는 것이 훨씬 더 효율적입니다. capture () 메서드의 resize 매개 변수를 사용하여이 작업을 수행 할 수 있습니다. from time import sleep from picamera import PiCamera camera = PiCamera() camera.resolution = (1024, 768) camera.start_preview() # Camera warm..
3.3.파이카메라 PIL 이미지 캡처이는 스트림으로 캡처하는 변형입니다. 먼저 BytesIO 스트림 (Python의 메모리 내 스트림 클래스)에 이미지를 캡처 한 다음 스트림의 위치를 시작 부분으로 되감고 스트림을 PIL Image 객체로 읽습니다. from io import BytesIO from time import sleep from picamera import PiCamera from PIL import Image # Create the in-memory stream 메모리 내 스트림 만들기 stream = BytesIO() camera = PiCamera() camera.start_preview() sleep(2) camera.capture(stream, format='jpeg') # "Rewi..
3.2. 파이카메라 스트림으로 캡처 이미지를 파일과 유사한 객체 (socket (), io.BytesIO 스트림, 기존 열린 파일 객체 등)로 캡처하는 것은 사용하는 capture () 메소드의 출력으로 객체를 지정하는 것만 큼 간단합니다. :from io import BytesIO from time import sleep from picamera import PiCamera # Create an in-memory stream my_stream = BytesIO() camera = PiCamera() camera.start_preview() # Camera warm-up time sleep(2) camera.capture(my_stream, 'jpeg') 이 형식은 위의 경우에 명시적으로 지정됩니다. B..