PyTorch version: 2.5.1
TorchVision version: 0.20.1
Python 3.11.2
라즈베리파이5를 이용해 Opencv활용 방법 및 Yolov5를 이용한 실시간객체 인식 방법
PyTorch version: 2.5.1
TorchVision version: 0.20.1
Python 3.11.2
라즈베리파이5를 이용해 Opencv활용 방법 및 Yolov5를 이용한 실시간객체 인식 방법
안녕하세요, 라즈베리파이 5에서 OpenCV와 YOLOv5를 활용하여 실시간 객체 인식을 구현하고자 하는 것으로 이해했습니다.
먼저 라즈베리파이에 PyTorch와 필요한 라이브러리들을 설치해야 합니다.
라즈베리파이의 제한된 리소스를 고려하여 경량화 버전의 PyTorch를 설치하는 것이 좋습니다.
그리고 YOLOv5 레포지토리를 클론하고 필요한 패키지를 설치합니다.
OpenCV를 활용하여 카메라로부터 영상을 입력받고 YOLOv5 모델로 추론을 수행합니다.
각 프레임마다 YOLOv5 모델에 입력으로 넣어 객체 감지 결과를 얻어냅니다.
감지된 객체의 클래스, 신뢰도, 바운딩박스 좌표 등의 정보를 활용할 수 있습니다.
아래는 실시간 객체 인식을 위한 샘플 코드입니다.
import cv2
import torch
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
cap = cv2.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
results = model(frame)
cv2.imshow('YOLOv5', np.squeeze(results.render()))
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
위 코드는 웹캠에서 영상을 입력받아 YOLOv5s 모델로 객체 감지를 수행하고 결과를 화면에 보여줍니다.
q
키를 누르면 프로그램이 종료됩니다.
객체 감지 성능 향상을 위해 모델 경량화, 전처리/후처리 최적화, 멀티스레딩 등 여러가지 기법을 활용해볼 수 있습니다.
또한 카메라 및 전반적인 파이프라인 구성을 최적화하는 것도 중요합니다.
아래 링크들이 프로젝트를 진행하는데 도움이 될 것 같습니다.
추가로 궁금한 점이나 필요한 정보가 있다면 말씀해 주세요. 최선을 다해 도와드리겠습니다.
제가 놓친 부분이 있거나 잘못된 내용이 있다면 지적해 주시면 감사하겠습니다. 함께 배워나가며 발전해 나갈 수 있기를 바랍니다.
안녕하세요. 라즈베리 파이 5에서 OpenCV와 YOLOv5를 사용하여 실시간 객체 인식을 수행하는 데 도움을 드리겠습니다.
sudo apt-get update
sudo apt-get install libopencv-dev python3-opencv
pip install torch torchvision
git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt
wget https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt
import cv2
import torch
import torchvision.transforms as transforms
# YOLOv5 모델 로드
model = torch.hub.load('ultralytics/yolov5', 'custom', path='yolov5s.pt')
model.eval()
# 라즈베리 파이 카메라 초기화
cap = cv2.VideoCapture(0)
while True:
# 프레임 읽기
ret, frame = cap.read()
if not ret:
break
# 프레임 전처리
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frame = transforms.ToTensor()(frame)
# 객체 인식
with torch.no_grad():
outputs = model(frame)
# 인식 결과 출력
for box in outputs.xyxy[0]:
cv2.rectangle(frame, (int(box[0]), int(box[1])), (int(box[2]), int(box[3])), (0, 255, 0), 2)
cv2.putText(frame, f'{box[5].item():.2f}', (int(box[0]), int(box[1]-10)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# 프레임 출력
cv2.imshow('frame', frame)
# 'q' 키를 누르면 종료
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 카메라 해제
cap.release()
cv2.destroyAllWindows()
이 답변이 도움이 되었길 바랍니다. 문제가 지속되면 추가 정보를 제공하여 새로운 게시물을 작성해 주세요. 또한 제 답변에 오류가 있을 수 있으니 참고하시기 바랍니다.
안녕하세요, 환 기님. 라즈베리파이 5를 이용하여 OpenCV와 YOLOv5를 사용한 실시간 객체 인식을 설정하는 방법에 대해 자세히 설명해 드리겠습니다.
라즈베리파이 5에서 OpenCV를 설치하는 방법은 다음과 같습니다.
첫째, 시스템을 업그레이드하고 필요한 패키지를 설치합니다.
sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential cmake git libatlas-base-dev gfortran libeigen3-dev libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxine2-dev libjpeg-dev libpng-dev libtiff-dev
sudo apt install -y python3-dev python3-numpy
이 명령들은 시스템을 최신 상태로 유지하고, OpenCV 컴파일에 필요한 패키지를 설치합니다4.
다음으로, OpenCV 소스 코드를 다운로드하고 컴파일합니다.
mkdir opencv
cd opencv
wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip
unzip 4.8.0.zip
cd opencv-4.8.0
mkdir build
cd build
cmake -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.8.0/modules -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_XINE=ON -D ENABLE_PRECOMPILED_HEADERS=OFF -D BUILD_NEW_PYTHON_SUPPORT=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D PYTHON3_PACKAGES_PATH=/usr/lib/python3.11/dist-packages ../
make -j4
sudo make install
이 과정은 OpenCV 4.8.0 버전을 다운로드하고, 필요한 설정을 적용하여 컴파일하고 설치하는 과정입니다4.
라즈베리파이의 메모리 제한으로 인해 에러가 발생할 수 있으므로, 스왑 파일을 설정하는 것이 중요합니다.
sudo nano /etc/dphys-swapfile
# CONF_SWAPSIZE=100을 CONF_SWAPSIZE=2048로 변경
sudo /etc/init.d/dphys-swapfile restart
이 설정은 메모리 부족으로 인한 에러를 방지합니다1.
이미 PyTorch 2.5.1과 TorchVision 0.20.1이 설치되어 있다고 가정합니다. 만약 설치가 필요하다면, 다음 명령을 사용합니다.
pip3 install torch torchvision
YOLOv5를 설치하기 위해 다음 명령을 사용합니다.
git clone https://github.com/ultralytics/yolov5 # YOLOv5 리포지토리 클론
cd yolov5
pip install -r requirements.txt # 의존성 패키지 설치
OpenCV와 YOLOv5를 사용하여 실시간 객체 인식을 실행하는 예제 코드는 다음과 같습니다.
import cv2
import torch
# YOLOv5 모델 로드
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
# 카메라 열기
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# 프레임을 RGB로 변환 (YOLOv5는 RGB를 사용)
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# YOLOv5로 객체 인식
results = model(rgb_frame)
# 결과를 원본 프레임에 그리기
results.render()
output = results.imgs[0]
# 출력
cv2.imshow('Frame', output)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 리소스 해제
cap.release()
cv2.destroyAllWindows()
이 코드는 카메라에서 실시간으로 프레임을 읽어 YOLOv5를 사용하여 객체를 인식하고, 결과를 화면에 출력합니다.
이 방법을 따라하면 라즈베리파이 5에서 OpenCV와 YOLOv5를 사용하여 실시간 객체 인식을 설정할 수 있습니다.
안녕하세요! 라즈베리파이5에서 OpenCV와 YOLOv5를 사용하여 실시간 객체 인식을 구현하려고 하시는군요. 이 과정은 매우 흥미롭고, 많은 학습이 될 수 있는 프로젝트입니다. 제가 도와드릴 수 있어서 기쁩니다.
라즈베리파이5에서 OpenCV와 YOLOv5를 활용하여 실시간 객체 인식을 구현하는 방법을 단계별로 설명드리겠습니다.
환경 설정:
pip install opencv-python
명령어를 사용합니다.YOLOv5 설치:
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
OpenCV를 사용한 카메라 스트림:
import cv2
# 카메라 열기
cap = cv2.VideoCapture(0)
while True:
# 프레임 읽기
ret, frame = cap.read()
if not ret:
break
# 프레임을 화면에 표시
cv2.imshow('Camera Stream', frame)
# 'q' 키를 누르면 종료
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 자원 해제
cap.release()
cv2.destroyAllWindows()
YOLOv5를 사용한 객체 인식:
detect.py
스크립트를 수정하여 실시간 스트림에 적용할 수 있습니다.import torch
from yolov5.models.common import DetectMultiBackend
from yolov5.utils.general import non_max_suppression, scale_coords
from yolov5.utils.torch_utils import select_device
# 모델 로드
device = select_device('')
model = DetectMultiBackend('yolov5s.pt', device=device, dnn=False)
# 카메라 열기
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# YOLOv5에 입력할 이미지 전처리
img = cv2.resize(frame, (640, 640))
img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416
img = np.ascontiguousarray(img)
# 모델 예측
img = torch.from_numpy(img).to(device)
img = img.float() # uint8 to fp16/32
img /= 255.0 # 0 - 255 to 0.0 - 1.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
pred = model(img, augment=False, visualize=False)
pred = non_max_suppression(pred, 0.25, 0.45, None, False, max_det=1000)
# 결과 처리 및 표시
for i, det in enumerate(pred): # detections per image
if len(det):
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], frame.shape).round()
for *xyxy, conf, cls in reversed(det):
label = f'{model.names[int(cls)]} {conf:.2f}'
plot_one_box(xyxy, frame, label=label, color=colors[int(cls)], line_thickness=3)
cv2.imshow('YOLOv5 Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
이제 라즈베리파이5에서 OpenCV와 YOLOv5를 사용하여 실시간 객체 인식을 구현할 수 있습니다. 더 자세한 내용은 PyTorch 공식 튜토리얼을 참고하시면 좋습니다. PyTorch 튜토리얼 또는 한국어 튜토리얼을 방문해 보세요.
이 답변이 도움이 되었기를 바라며, 추가적인 질문이 있다면 언제든지 문의해 주세요. 제 답변이 틀릴 수 있으니, 항상 다양한 자료를 참고하시기 바랍니다. 감사합니다!