2025. 2. 17. 05:09ㆍ클라우드 컴퓨팅
-센서를 이용한 데이터 수집
프로젝트 진행을 위해서 총 5개의 센서를 사용했다.
진동 센서, PIR센서(적외선 인체 감지센서), 조도 센서, 온습도 센서, 라즈베리파이 카메라 모듈
3명의 팀원이 함께 프로젝트를 진행했기 때문에 아래 사진처럼 총 3개의 라즈베리파이를 사용해 각각 1-2개씩 연결 후 센싱하였다.

라즈베리파이는 컴퓨터이기 때문에 ADC가 내장되어있지 않아 아날로그 센서를 직접 읽기 어렵다. 딜레이, 데이터누락 등 데이터 수집이 제대로 안 될 수 있기 때문에 라즈베리파이로 센서가 잘 안 되는 경우엔 아두이노로 데이터 센싱 > 라즈베리파이를 이용해서 MQTT로 데이터 전송 하면 된다.
-라즈베리파이 카메라 모듈
담당했던 카메라 모듈을 이용하면서 겪었던 문제 중 가장 많은 시간을 할애한 것들은 아래와 같다.
1) 카메라 연결이 안 됨
2) 카메라 연결은 되는데 코드 상에서 opencv를 활용하니까 프레임 리턴 오류가 계속 뜸
3) picam2 카메라 색상 문제(파랗게 뜸)
4) 라즈베리파이 원격 컨트롤 프로그램(카메라 화면 안 뜸)
1) 카메라 연결 문제
터미널에서 ls /dev/video* 명령어로 카메라가 라즈베리파이에 연결되었는지 확인할 수 있다. 나는 ls /dev/video* 명령어를 쳤을 때 video 4~19등 다른 번호는 나오는 데 0이 안 나왔다. 터미널에서 명령어를 쳤을때 video0이 나와야 카메라가 연결됐다는 의미다.
우선 카메라 연결부터 확인해야한다.
파이 커넥터에 카메라 선을 그냥 막 꽂으면 안되고

라즈베리파이에 모듈 커넥터에 커버가 있는데 이걸 위로 빼서 열어주고 케이블을 꽂은 뒤 커버를 다시 닫아줘야 한다.
그리고 카메라를 사면 기본으로 제공되는 케이블이 짧아 긴 선을 원하는 사람도 있을텐데, 따로 구매가 가능하다. 여기서 또 주의할 점은 카메라 케이블과 디스플레이 케이블은 다르니까 상품명을 잘 보고 사야된다는 것. 생긴 건 같아도 연결이 안 됨.
그리고 라즈베리 파이 버전에 따라서도 사용할 수 있는 선이 다르기 때문에 선 종류(크기)도 잘 보고 사야한다. 라즈베리파이 4에서는 5에서 사용하는 작은 선 사용이 불가하다.
자세한 영상은 아래 유튜브 참고(3:50s)
https://www.youtube.com/watch?v=Z8cs1cRrc
그리고 카메라 연결이 안 돼서 구글에 다른 글을 서치해보면 sudo raspi-config 명령어로 설정도구 인터페이스 옵션을 이용해 카메라 인터페이스를 활성화시키는 글도 있는데 라즈베리파이 os 최신 버전에는 Camera Legacy가 지원되지 않는다.
2) 카메라 연결은 되는데 코드 상에서 opencv를 활용하니까 프레임 리턴 오류가 계속 뜸
터미널에서 libcamera-hello -t 0과 같은 명령어를 사용했을땐 아무 문제 없는데, 코드에서 카메라를 사용하면 에러가 생겼다.
python 코드에서 cap = cv2.VideoCaptrue(0) 함수를 사용해 opencv를 사용해 카메라를 활용하면 문제가 생긴다.
can't return frame 이런식으로 프레임을 가져올 수 없다고 에러가 떴는데 원인은 라즈베리파이 최신 버전에서는 oepncv의 libcamera가 지원되지 않는다는 것이다. 따라서 picam2 라이브러리를 사용해야한다.
라즈베리파이에서 카메라를 사용하는 방법은 Opencv, Picamera2 크게 두 가지다.
| OpenCV | Picamera2 |
| cv2.VideoCapture(0) 함수 | Picamera2() 함수 |
| 라즈베리파이 전용 카메라 라이브러리(속도 빠름) |
videocapture대신 아래와 같이 picam2코드를 사용하면 더이상 프레임 리턴 에러가 안 뜬다.
from picamera2 import Picamera2
import cv2
import numpy as np
picam2 = Picamera2()
picam2.start()
while True:
frame = picam2.capture_array()
cv2.imshow("Real-time Camera Feed", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
picam2.stop()
cv2.destroyAllWindows()
3) picam2 카메라 색상 문제 (파랗게 나옴, 해상도/출력 창 설정)
위와같이 코드를 작성해서 카메라를 연동하면 또 문제가 생긴다. 카메라에 비춰지는 화면의 색상이 파랗게 나온다.
picamera2는 RGB형식 프레임을 사용하고 cv2.imshow()는 BGR형식을 사용한다. 따라서 포맷에 맞게 변경해줘야 한다.
(예제 코드)
from picamera2 import Picamera2
import cv2
import numpy as np
picam2 = Picamera2()
picam2.start()
while True:
frame = picam2.capture_array()
frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
cv2.imshow("Real-time Camera Feed", frame_bgr)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
picam2.stop()
cv2.destroyAllWindows()
이렇게 코드를 변경해주면 화면이 파랗게 나오지 않고 원래 색상대로 잘 나온다.
4) 라즈베리파이 원격 컨트롤 프로그램(카메라 화면 안 뜸)
프로젝트를 진행할 때 라즈베리파이 원격 프로그램으로 Xshell을 이용했는데 xshell로 코드를 실행하면 촬영되는 화면이 나타났다가 꺼진다. xshell은 세션 속성에서 x11 포워딩 사용을 체크하고 설정을 하면 된다는데 안돼서 다른 프로그램을 사용했다.
다른 여러 방법을 찾아봐도 잘 안돼서 xshell대신 xmanager 8을 사용했다. 비디오 캡쳐 외에 크게 사용하고자 하는 기능은 딱히 없어서 아무거나 사용해도 될듯하다.
'클라우드 컴퓨팅' 카테고리의 다른 글
| AWS_클라우드 컴퓨팅 프로젝트 #4) AmazonTimestream과 DynamoDB를 이용한 데이터 관리 및 시각화(Grafana) (0) | 2025.02.20 |
|---|---|
| AWS_클라우드 컴퓨팅 프로젝트 #2) 프로젝트 구성과 센서 데이터 수집1 (라즈베리파이 AWS 연결) (1) | 2025.02.17 |
| AWS_클라우드 컴퓨팅 프로젝트 #1) AWS를 사용해 보면서 (2) | 2025.01.03 |