반응형
카메라와 OpenCV를 사용한 방법:
카메라를 사용할 때는 실시간 객체 감지를 위해 적절한 프레임 속도를 유지하는 것이 중요합니다. 추가적으로 딥러닝 모델의 출력 결과를 후처리하여 중복 감지를 피하는 방법을 설명합니다.
import cv2
import numpy as np
# 카메라 초기화
cap = cv2.VideoCapture(0)
# YOLO 모델 로드
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
classes = []
with open("coco.names", "r") as f:
classes = [line.strip() for line in f.readlines()]
count = 0
while True:
ret, frame = cap.read()
height, width, channels = frame.shape
blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers)
class_ids = []
confidences = []
boxes = []
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5:
center_x = int(detection[0] * width)
center_y = int(detection[1] * height)
w = int(detection[2] * width)
h = int(detection[3] * height)
x = int(center_x - w / 2)
y = int(center_y - h / 2)
boxes.append([x, y, w, h])
confidences.append(float(confidence))
class_ids.append(class_id)
indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
for i in range(len(boxes)):
if i in indexes:
x, y, w, h = boxes[i]
label = str(classes[class_ids[i]])
count += 1
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(frame, label, (x, y + 30), cv2.FONT_HERSHEY_PLAIN, 3, (0, 255, 0), 3)
cv2.imshow("Image", frame)
key = cv2.waitKey(1)
if key == 27:
break
print(f"Total count: {count}")
cap.release()
cv2.destroyAllWindows()
이 예시는 YOLO 모델을 사용하여 객체를 감지하고, 비최대 억제(NMS) 기법을 사용하여 중복 감지를 피하는 방법을 보여줍니다. 카메라와 OpenCV를 사용한 방법은 높은 정확도를 요구하는 프로젝트에 적합합니다.
이 외에도 사용자의 프로젝트 환경과 요구사항에 따라 다양한 센서와 방법을 조합하여 사용할 수 있습니다. 각 센서의 특성과 데이터를 처리하는 방법을 잘 이해하고 적용하는 것이 중요합니다.
반응형
'인공지능' 카테고리의 다른 글
Ollama Local LLM 실행 (0) | 2024.11.13 |
---|---|
YOLOv8을 사용한 오브젝트 감지 코드 - Claude.ai (0) | 2024.07.23 |
Machine Learning 참고 사이트 (0) | 2024.01.04 |
Anomaly Detection (0) | 2023.03.17 |
chatGPT (0) | 2023.01.10 |
댓글