OpenCV를 해보자 3

200원짜리개발자·2024년 3월 27일
0

인공지능 수업

목록 보기
5/8
post-thumbnail

선형 회귀(Linear regression)

회귀란 한 개 이상의 변수를 다룰 때 특정 변수와 다른 변수와의 관계를 분석하고 이를 토대로 모델을 정의해 값을 예측하는 방법

선형 회귀라는 것은 데이터를 가장 잘 대변하는 최적의 선을 찾는 과정이다.

CNN

Convolutional neural network(CNN 또는 ConvNet)란 데이터로부터 직접 학습하는 딥러닝의 신경망 아키텍처입니다.


이런 데이터를

이런식으로 필터를 사용해가지고 학습할 수 있다.

텐서플로우(tensorflow)

구글에서 제공하는 오픈소스 소프트웨어 라이브러리로 다양한 작업에 대한 데이터 흐름을 프로그래밍하기 위해 사용 GPU를 사용하여 이미지, 음성, 비디오 등의 데이터를 처리할 수 있다.

Hypothesis와 Cost

  • Hypothesis : 가설
  • Cost는 비용, 실제값과 예측값의 차이 / 오차

전이학습

  • 일반적으로 모든 층을 쌓아 모델을 설계하는 것은 비용이 많이 듦
  • 많은 수의 데이터를 모아 가중치를 얻는 것도 비용이 많이 듦
  • 아주 큰 데이터셋에 훈련된 가중치를 들고 와서 우리 데이터셋에 맞게 보정하여 사용하는 것을 전이학습이라고 함

사물 구분

import sys
import numpy as np
import cv2


filename = 'data/beagle.jpg'

img = cv2.imread(filename)

if img is None:
    print('Image load failed!')
    exit()

# Load network

net = cv2.dnn.readNet('data/bvlc_googlenet.caffemodel', 'data/deploy.prototxt')

if net.empty():
    print('Network load failed!')
    exit()

# Load class names

classNames = None
with open('data/classification_classes_ILSVRC2012.txt', 'rt') as f:
    classNames = f.read().rstrip('\n').split('\n')

# Inference

inputBlob = cv2.dnn.blobFromImage(img, 1, (224, 224), (104, 117, 123))
net.setInput(inputBlob)
prob = net.forward()

# Check results & Display

out = prob.flatten()
classId = np.argmax(out)
confidence = out[classId]

text = '%s (%4.2f%%)' % (classNames[classId], confidence * 100)
cv2.putText(img, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 1, cv2.LINE_AA)

cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()

얼굴 구분


캠이 없어서 옆에 친구 캠을 사용했다.

import cv2


model = 'data/dnn/res10_300x300_ssd_iter_140000_fp16.caffemodel'
config = 'data/dnn/deploy.prototxt'
#model = 'opencv_face_detector_uint8.pb'
#config = 'opencv_face_detector.pbtxt'

cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print('Camera open failed!')
    exit()

net = cv2.dnn.readNet(model, config)

if net.empty():
    print('Net open failed!')
    exit()

while True:
    _, frame = cap.read()
    if frame is None:
        break

    blob = cv2.dnn.blobFromImage(frame, 1, (300, 300), (104, 177, 123))
    net.setInput(blob)
    detect = net.forward()

    detect = detect[0, 0, :, :]
    (h, w) = frame.shape[:2]

    for i in range(detect.shape[0]):
        confidence = detect[i, 2]
        if confidence < 0.5:
            break

        x1 = int(detect[i, 3] * w)
        y1 = int(detect[i, 4] * h)
        x2 = int(detect[i, 5] * w)
        y2 = int(detect[i, 6] * h)

        cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0))

        label = 'Face: %4.3f' % confidence
        cv2.putText(frame, label, (x1, y1 - 1), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 1, cv2.LINE_AA)

    cv2.imshow('frame', frame)

    if cv2.waitKey(1) == ord('q'):
        break

cv2.destroyAllWindows()

마무리

오늘은 다양한 작업을 해보았다. 욕 제스처를 처리하는 프로그램은 만드는 것을 실패하였다.

profile
고3, 프론트엔드

0개의 댓글

관련 채용 정보