[AI] OpenCV에 대해 알아보자

심지혜·2024년 3월 17일
1

영상인식이란?

영상인식은 사람, 물체, 장소 및 기타 요소를 식별할 수 있는 이미지를 감지하고 분석하는 기술이다.

분류, 태깅, 검출, 분할 등과 같은 기술을 사용해 공장 자동화 시스템에서 얼굴 인식, 의료 분야에서 질병 진단, 자율 주행 차량에서의 장애물 인식에 이르기까지 다양한 분야에 적용된다.

OpenCv란?


OpenCv(Open Source Computer Vision)는 이미지나 영상 처리에 사용할 수 있는 오픈 소스 라이브러리이다. OpenCV의 기원은 인텔에서부터 시작되는데, 컴퓨터 비전과 인공지능의 발달 시키고자 하는 바램으로 OpenCV를 출시한 것이다.
인텔은 OpenCV를 배포해서 OpenCV가 점차 발전함에 따라 빠른 인텔 프로세서의 수요가 늘어나는 것을 노렸을 지도

이런 걸 할 수 있다.

Mac 파이썬 가상환경부터 주피터 노트북 세팅까지...

파이썬이 없어도 OK입니다

  1. 아나콘다 설치
    https://www.anaconda.com/download#downloads
    mac m2쓰는 사람도 맨 위에 있는 것 말고 아래에 있는 m1용을 깔도록 하자.

  2. 가상환경 생성 및 실행

conda create -n [가상환경 이름] python=[사용할 파이썬 버전]
  1. 가상환경에 주피터노트북 커널 연결하기
conda activate [가상환경 이름] 
pip install ipykernel
python -m ipykernel install --user --name [가상환경 이름] --display-name [가상환경 이름]
  1. 주피터 노트북 실행
    터미널을 끄고 킨 후에 주피터를 실행시키자.
conda activate [가상환경 이름] 
jupyter notebook

openCv 이미지 출력, 영상 출력 방법

파일을 이용한 이미지 출력 방법

import cv2
 
img = cv2.imread('data/Dog.jpg')
cv2.imshow('image', img) # 파일 경로에서부터 사진을 찾아 이미지를 출력해준다.
cv2.waitKey() # 안에 들어가는 숫자의 ms만큼 기다린다.
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)

사진을 흑백으로 띄우고 싶으면 imshow 부분을 아래처럼 쓰면 된다

cv2.imshow('image', gray) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
cv2.imshow('image', gray)

cv2.waitKey(1) * 4 는 mac을 사용하는 사람만 써주면 된다..

영상을 이용한 이미지 출력 방법

웹캠 on

cap = cv2.VideoCapture(0)
print(cap.isOpened())
while(cap.isOpened()):
    ret, frame = cap.read()  # 웹캠에서 성공여부 ret과 이미지객체 frame 을 추출한다
    if ret :
        cv2.imshow('frame', frame) # 이미지를 윈도우에 출력
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)

이것도 흑백처럼 쓸 수 있다.

    if ret :
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('frame', gray)

영상 녹화 - VideoWriter

import cv2

cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 코덱 정하기
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480)) # 영상녹화 세팅

print(cap.isOpened())
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret == True:
        out.write(frame)
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('frame', gray)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)

영상에 문자 넣기

import cv2
import datetime
cap = cv2.VideoCapture(0)

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret :
        font = cv2.FONT_HERSHEY_SIMPLEX
        text = 'Width: ' + str(cap.get(3)) + ' Height: ' + str(cap.get(4)) # 그냥 글자 그대로 너비랑 높이다
        datet = str(datetime.datetime.now()) # 지금시간
        frame = cv2.putText(frame, datet, (10,50), font, 1, (0,255,255), 2, cv2.LINE_AA)  # 글자 출력
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)

지금까지 배운 것들을 통해 과제를 해결해보자
과제(assignment 라는 뜻)

  1. 이미지를 불러오는데 제목을 이미지 오른쪽 상단에 넣기
  2. 웹캠 영상을 불러오는데 웹캠 영상 왼쪽 상단에 HADURI 라고 출력
    웹캠 영상 오른쪽 하단에 본인 영어 이름 출력
    출력될 때는 컬러로 출력되지만
    녹화본은 그레이스케일로 녹화

1. 이미지를 불러오는데 제목을 이미지 오른쪽 상단에 넣기

import cv2
img = cv2.imread('data/very_hard.jpg')
font = cv2.FONT_HERSHEY_SIMPLEX
text = "i'm tired"
cv2.putText(img, text, (400,50), font, 1, (0,255,255), 2, cv2.LINE_AA) # 위치 (400,50), 폰트 크기 1, 색깔 하양, 두께 2
cv2.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)

2. HADURI 웹캠

import cv2
import datetime
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID') # 저장하려고 코덱 설정
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480), isColor=False) # isColor=False -> 흑백으로 저장
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret :
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
        out.write(gray) # 그레이스케일로 녹화
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.putText(frame, 'HADURI', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 194, 133), 2, cv2.LINE_AA)
        cv2.putText(frame, 'KimEunHye', (frame.shape[1] - 100, frame.shape[0] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1, cv2.LINE_AA)
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
out.release()
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)
cv2.waitKey(1)


아무래도 얼굴은 부담스러워서 귀여운 농담곰으로 대체했습니다.

mac에서 avi파일이 안열리길래 잘 저장됐나보다 생각하겠습니다.

끝~~~

0개의 댓글