관리 메뉴

웹개발자의 기지개

[라즈베리파이4] PiCamera로 실시간 CCTV 영상 만들기2 본문

라즈베리파이

[라즈베리파이4] PiCamera로 실시간 CCTV 영상 만들기2

http://portfolio.wonpaper.net 2021. 5. 1. 15:49

라즈베리파이4의 PiCamera 로 웹캠과 같이 실시간으로 영상이 나타나도록 해보자.

 

1.  라즈베리파이 업데이트

sudo apt-get -y update && sudo apt-get -y  upgrade
sudo apt-get -y install python3-dev

 

 

2. OpenCV 4.1버전 설치

pypi.org/project/opencv-contrib-python/4.1.0.25/

 

opencv-contrib-python

Wrapper package for OpenCV python bindings.

pypi.org

호환성문제 때문에 현재 최신 4.5버전이 나왔으나, 필자는 4.1 버전을 선택하여 설치했다.

 

pip3 install opencv-contrib-python==4.1.0.25

설치한 다음에는 

import cv2 라는 코드만 넣어서 파이썬을 실행해 본다.

import cv2

아무 문제가 없으면 정상적으로 설치가 잘된것이다.

 

sudo nano openCV_test.py

[ openCV_test.py ]

import cv2

img = cv2.imread("/home/pi/test01.png")
cv2.imshow("Test",img)

img_canny = cv2.Canny(img, 50, 150)
cv2.imshow("Test img Edge", img_canny)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

[Test 이미지]

 

[Test img Edge]

위의 파일예제를 돌려보니 이미지 화면 처럼 잘 돌아간다.

 

 

3. imagezmq 설치

imagezmq 는 PyZMQ 메시징 형태로 하나의 컴퓨터에서 다른컴퓨터로 OpenCV 이미지를 전송해 준다.

 

github.com/jeffbass/imagezmq#id10

 

jeffbass/imagezmq

A set of Python classes that transport OpenCV images from one computer to another using PyZMQ messaging. - jeffbass/imagezmq

github.com

pip3 install imagezmq

 

4. imutils 설치

imutils 는 이미지 표시나 가장자리 감지 등 이미지 처리를 할때 훨씬 편리하게 처리해 주는 기능을 한다.

 

pypi.org/project/imutils/#description

 

imutils

A series of convenience functions to make basic image processing functions such as translation, rotation, resizing, skeletonization, displaying Matplotlib images, sorting contours, detecting edges, and much more easier with OpenCV and both Python 2.7 and P

pypi.org

pip3 install imutils

 

5. CCTV 관련 실제 구동 파일 실행하기

 

빵형 님의 깃허브 파일을 이용하자.

github.com/kairess/cctv_raspberrypi

 

kairess/cctv_raspberrypi

Surveillance camera solution using Raspberry Pi. Contribute to kairess/cctv_raspberrypi development by creating an account on GitHub.

github.com

 

 

 

위의 화면 처럼 server.py  를 우선 실행한다음, client.py 를 실행하면 웹캠처럼 실시간 영상 화면이 바로 실행된다.

 

cctv_raspberrypi-master.zip
0.32MB

 

[ server.py ]

1
2
3
4
5
6
7
8
9
10
11
12
13
import cv2
import imagezmq
 
image_hub = imagezmq.ImageHub()
 
while True:
  rpi_name, image = image_hub.recv_image()
  
  cv2.imshow(rpi_name, image)
  if cv2.waitKey(1== ord('q'):
    break
  
  image_hub.send_reply(b'OK')
cs

 

[ client.py ] 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import socket
import time
from imutils.video import VideoStream
import imagezmq
 
sender = imagezmq.ImageSender(connect_to='tcp://192.168.0.1:5555')
 
rpi_name = socket.gethostname() # send RPi hostname with each image
 
picam = VideoStream(usePiCamera=True).start()
time.sleep(2.0)  # allow camera sensor to warm up
 
while True:  # send images as stream until Ctrl-C
  image = picam.read()
  sender.send_image(rpi_name, image)
cs

위 소스중 6라인에 ip 주소를 해당 ip 에 맞게 적절히 수정하면된다.

 

 

참고 1 : www.youtube.com/watch?v=DIGwweDJCBk&list=PLAQofLHbsrjfP6JJVsnFERUFvWdEx6VBI

참고 2 : github.com/kairess/cctv_raspberrypi

참고 3 : github.com/jeffbass/imagezmq#id10

참고 4 : softtone-someday.tistory.com/8

 

 

 

Comments