본문 바로가기
인공지능

젯슨 나노(Jetson Nano)를 이용하여 센서(카메라)를 통해 물체의 수량을 카운트하는 방법

by YJHTPII 2024. 7. 19.
반응형

카메라와 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

댓글