본문 바로가기

파이썬/이미지데이터 처리

YOLO (You Only Look Once)

728x90
반응형

카메라 관련 인공지능 프로그램을 개발하려면 몇 가지 라이브러리와 프레임워크를 사용해야 합니다. 다음은 파이썬으로 카메라 관련 인공지능 프로그램을 개발하는 데 도움이 될 수 있는 몇 가지 라이브러리와 프레임워크입니다.

  1. OpenCV (Open Source Computer Vision):
    • OpenCV는 이미지 및 비디오 처리를 위한 강력한 라이브러리입니다. 카메라에서 영상을 읽고 처리하는 데 사용할 수 있습니다.
  2. TensorFlow 및 Keras:
    • TensorFlow와 Keras는 딥러닝 모델을 만들고 학습시키는 데 사용되는 강력한 도구입니다. 객체 감지, 얼굴 인식 등을 수행할 수 있는 사전 학습된 모델을 활용할 수 있습니다.
  3. PyTorch:
    • PyTorch는 딥러닝 연구 및 개발을 위한 라이브러리로, 유연하고 사용하기 쉬운 API를 제공합니다. PyTorch를 사용하여 강력한 컴퓨터 비전 작업을 수행할 수 있습니다.
  4. Dlib:
    • Dlib은 얼굴 감지, 얼굴 인식 및 얼굴 특징 추출을 위한 라이브러리로, 오픈소스로 제공됩니다.
  5. YOLO (You Only Look Once):
    • YOLO는 물체 감지를 위한 신경망 아키텍처로, 실시간 객체 감지에 많이 사용됩니다. YOLO를 통해 카메라 영상에서 물체를 식별하는 프로그램을 개발할 수 있습니다.
  6. face_recognition 라이브러리:
    • face_recognition은 얼굴을 식별하기 위한 간단한 라이브러리로, 빠르게 얼굴을 감지하고 식별할 수 있습니다.

이러한 라이브러리와 프레임워크를 조합하여 원하는 인공지능 프로그램을 개발할 수 있습니다. 필요에 따라 다양한 튜토리얼과 예제 코드를 참고하여 진행하면 도움이 될 것입니다.

학습을 목적으로 쥬피터 노트북으로 뭔가 우선 하나쯤 만들어 볼려 합니다 .
5번 YOLO를 이용해서 간단한 예제로 시작해보도록 하겠습니다. 물론 저도 이 부분은 처음이라 같이 공부하는 방식으로 진행하고자 합니다. 

필요한 모듈을 설치하는 것으로 부터 시작하겠습니다. 

!pip install opencv-python numpy

YOLO의 예제를 실행하기 위해서 필요한 3개의 파일을 다운 받아야 합니다. 

https://pjreddie.com/media/files/yolov3.weights

https://github.com/pjreddie/darknet/blob/master/data/coco.names

https://github.com/AlexeyAB/darknet/blob/master/cfg/yolov3.cfg

저는 D:/YOLO로 임시로 저장하였습니다. 각자 다운받은 위치를 # YOLO 모델 부분에 파일의 경로를 잘 넣어 주시면 되겠습니다. 

import cv2
import numpy as np

# YOLO 모델 로딩
net = cv2.dnn.readNet("D:/YOLO/yolov3.weights", "D:/YOLO/yolov3.cfg") # 파일경로
layer_names = net.getLayerNames()
output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]

# 클래스 이름 로딩
with open("D:/YOLO/coco.names", "r") as f: #파일경로
    classes = [line.strip() for line in f.readlines()]

# 웹캠 열기
cap = cv2.VideoCapture(0)  # 0은 기본 웹캠을 나타냄

while True:
    # 웹캠에서 프레임 읽기
    ret, frame = cap.read()

    # YOLO 입력 이미지로 변환
    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:  # 신뢰도가 50% 이상인 경우
                # 감지된 객체의 바운딩 박스 정보 저장
                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)

    # 감지된 객체 정보를 화면에 표시
    font = cv2.FONT_HERSHEY_PLAIN
    for i in range(len(boxes)):
        if i in indexes:
            x, y, w, h = boxes[i]
            label = str(classes[class_ids[i]])
            color = (0, 255, 0)  # 각 클래스에 대해 새로운 색상을 할당
            cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
            cv2.putText(frame, label, (x, y + 30), font, 3, color, 2)

    # 화면에 결과 표시
    cv2.imshow("YOLO Object Detection", frame)

    # 'q' 키를 누르면 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 웹캠 해제 및 창 닫기
cap.release()
cv2.destroyAllWindows()

이상으로 YOLO 예제 하나 실행하였네요. 

오늘은 여기까지 입니다. 

 

 

 

728x90
반응형

'파이썬 > 이미지데이터 처리' 카테고리의 다른 글

Jupyter Notebook에 가상환경 구성하기  (0) 2023.12.17
TensorFlow 설치하기  (0) 2023.12.17
Pytorch 설치하기  (0) 2023.12.17
detectron2 튜토리얼  (0) 2023.12.09