개발자/라즈베리파이4

PiCamera 및 Python – 이미지와 비디오에 텍스트 추가하는 방법

지구빵집 2023. 2. 14. 10:22
반응형

 

 

웹캠 설정을 구성하는 방법 및 이미지에 텍스트를 추가하는 방법과 같은 picamera 라이브러리에 대한 몇 가지 배웁니다. 이러한 개념에 익숙해지기 위해 Python으로 일련의 예제를 작성합니다. 마지막으로 PiCamera를 사용한 비디오 감시에 대한 요약 – 비디오를 촬영하는 동안 현재 시간을 추가하는 방법을 실습합니다. 

 

picamera와 관련된 몇 가지 구성을 알고 있어야 합니다. 실제로 웹캠을 사용하여 사진을 찍을 때 스캔한 이미지 품질은 여러 요인에 따라 달라질 수 있습니다.

 

동영상을 촬영하거나 이미지를 제대로 캡처하려면 해상도는 가장 중요한 제어 요소입니다. 해상도는 사진이 얼마나 자세하게 정의되는지 또는 이미지를 정의하는 데 필요한 픽셀 수를 나타내는 지표입니다. 이러한 픽셀이 많을수록 해상도가 높을수록 사진의 디테일이 커집니다.

 

PiCamera의 경우 이미지나 비디오를 캡처하기 전에 다른 해상도를 정의할 수 있습니다. 다음 표는 Picamera 라이브러리 의 공식 웹사이트에서 가져온 것입니다. 표는 비디오 또는 이미지를 올바르게 캡처하기 위해 설정할 수 있는 가능한 해상도를 명확하게 보여줍니다. 

 

 

# RESOLUTION ASPECT RATIO FRAMERATES VIDEO IMAGE FOV BINNING
1 1920×1080 16:9 1-30fps x Partial None  
2 2592×1944 4:3 1-15fps x x Full None
3 2592×1944 4:3 0.1666-1fps x x Full None
4 1296×972 4:3 1-42fps x Full 2×2  
5 1296×730 16:9 1-49fps x Full 2×2  
6 640×480 4:3 42.1-60fps x Full 4×4  
7 640×480 4:3 60.1-90fps x Full 4×4  

 

아래 명령어를 사용해 파일을 만든다

 

$ nano picamera01.py

 

from picamera import PiCamera
import time

camera = PiCamera()
camera.resolution = (2592, 1944)

camera.start_preview()
time.sleep(5)
camera.capture('image01.jpg')
camera.stop_preview()

 

실행은 $ python picamera01.py 명령어로 실행한다. 폴더에 image01.jpg 파일이 만들어진 것을 볼 수 있다. 코드를 실행하면 약 2.4MB 크기의 JGP 파일로 2592 x 1944 픽셀의 이미지를 얻을 수 있습니다. 

 

고려해야 할 또 다른 중요한 요소는 밝기(밝기)입니다. 이 값은 코드 내에서 정의할 수 있으며 PiCamera의 밝기 매개변수를 통해 표현됩니다. 이 값은 0에서 100 사이의 모든 값을 가정할 수 있습니다. 코드에 지정되지 않은 경우 기본값은 50입니다(위 그림 참조). 더 어두운 이미지(밝기 = 30)와 더 선명한 이미지(밝기 = 70)를 지정하여 두 가지 다른 값을 설정해 보십시오.

 

코드에서 해상도 설정 직후에 밝기를 지정할 수 있습니다. 

 

camera = PiCamera()
camera.resolution = (2592, 1944)
camera.brightness = 30

마찬가지로 대비를 조정할 수 있습니다. 이 값은 PiCamera의 대비 매개변수로 표현되며 0에서 100 사이의 값을 가질 수 있습니다. 기본값은 50입니다.

 

위의 예를 반복하여 밝기를 50으로 재설정하고(코드에서 선언하지 않음) 대비를 변경합니다(효과를 향상하려면 비교 값으로 10과 90을 선택). 

 

 

이미지 위에 글쓰기

 

웹캠의 구성을 설정하는 방법을 살펴보았으므로 이제 이미지나 영화 위에 가사를 쓰는 것과 같은 보다 실용적인 예제 작업을 시작할 수 있습니다. 따라서 위의 코드를 수정하여 그림의 맨 위에 텍스트가 추가되도록 합니다.  

아래 명령어로 파일을 만들고 편집한다

 

$ nano textonimage.py  

 

from picamera import PiCamera
import time

camera = PiCamera()
camera.resolution = (2592, 1944)

camera.start_preview() 
camera.annotate_text = "I am what I am" 
time.sleep(5) 
camera.capture('image02.jpg') 
camera.stop_preview()

 

 

camera.annotate_text_size = 120

 

글은 이미지에 비해 정말 작다고 해야 할까요. 이것은 해상도가 최대이기 때문입니다. 실제로 해상도를 낮추면 비문의 크기가 달라집니다. 하지만 해상도를 변경하는 것보다 annotate_text_size 매개변수를 통해 텍스트의 크기를 변경하는 것이 더 정확한 방법입니다. 이 값은 기본적으로 32이며 6에서 160 사이의 값을 가정할 수 있습니다. 

 

이제 글꼴 크기를 설정했으므로 색상도 설정할 수 있습니다. 흰색이 마음에 들지 않으면 코드에 몇 가지 추가 문을 추가하여 원하는 색상으로 바꿀 수 있습니다. PiCamera 모듈의 Color 클래스를 가져오고 텍스트 색상에 해당하는 annotate_foreground 매개변수를 설정합니다. 글씨는 투명하게 쓰는데 배경을 색으로 설정하고 싶다면 annotate_background 파라미터를 설정하면 됩니다. 

 

 

from picamera import PiCamera
from picamera import Color
import time

camera = PiCamera()
camera.resolution = (2592, 1944)

camera.start_preview()
camera.annotate_size = 120 
camera.annotate_foreground = Color('black')
camera.annotate_background = Color('white')
camera.annotate_text = " I am what I am " 
time.sleep(5) 
camera.capture('image02.jpg') 
camera.stop_preview()

 

지금 궁금한 점이 있다면... 이제 메시지를 어떻게 옮길 수 있습니까? 글쎄, 불행히도 이것은 picamera로는 불가능합니다. 희망은 다음 릴리스에 있거나 솔루션은 이미 캡처된 이미지에서 작동하는 다른 Python 라이브러리를 사용하는 것입니다(획득 시점이 아님). 그러나 이것은 우리가 이 기사에서 설정한 것이 아닙니다. 우리가 원하는 것은 비디오를 캡처할 때 쓰기 도구입니다. 

 

비디오에 텍스트 쓰기 파일을 생성하고 코드를 입력한다.

 

이제 텍스트로 이미지를 캡처하는 방법을 알았으므로 다음 단계는 비디오로 캡처하는 것입니다. $ nano textonvideo.py. 

 

from picamera import PiCamera 
import time 

camera = PiCamera()
camera.resolution = (1280, 720)

camera.start_preview()
camera.annotate_text = "I am what I am"
camera.start_recording('video.h264')
time.sleep(10)
camera.stop_recording()
camera.stop_preview()

프로그램을 실행하면 현재 디렉토리에서 video.h264 파일을 찾을 수 있습니다. MP4 형식으로 변환하려면 명령을 실행하십시오. 

 

MP4Box -fps 30 -add video.h264 video.mp4 

 

MP4Box Raspbian에 설치하지 않은 경우 설치할 수 있습니다. 

 

$ sudo apt-get install -y gpac 

 

비디오는 전체 재생 시간 동안 상단에 "입력한 문자"를 표시합니다. 

 

 

동영상 스트림에 현재 시간을 표시하기 

 

마지막으로 우리가 설정한 목표, 즉 비디오에 현재 시간을 추가하는 목표를 달성했습니다. 비디오 감시 카메라는 촬영하는 동안 항상 현재 시간을 표시합니다. 따라서 이전 예제에서 시작하여 몇 가지 추가 작업을 수행하여 영화에 날짜와 시간이 있는 텍스트를 가져올 수 있습니다. 

 

from picamera import PiCamera 
import datetime as dt
import time 

camera = PiCamera()
camera.resolution = (1280, 720)

camera.start_preview()
camera.annotate_text = dt.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
camera.start_recording('video.h264')

start = dt.datetime.now()
while (dt.datetime.now() - start).seconds < 30:
    camera.annotate_text = dt.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    camera.wait_recording(0.2)
camera.stop_recording() camera.stop_preview()

 

먼저 시간과 날짜를 관리하려면 datetime 모듈을 가져와야 합니다. 그런 다음 annotate_text에서 날짜와 시간을 모두 표시하는 % Y-% m-% d% H:% M:% S 형식으로 현재 시간 문자열을 할당합니다.

 

그런 다음 촬영 중 시간을 변경하기 위해 비디오가 점차적으로 캡처되고 annotate_text 값이 while 루프에서 업데이트됩니다. 이를 통해 항상 현재 시간을 보고할 수 있습니다. 

 

 

참고

How to add text on images and video 

 

 

 

 

반응형