본문 바로가기
Python/OpenCV

[OpenCV] cvlib 영상 객체 인식 / (+cvlib GPU연동)

by hotelshoe 2022. 3. 8.
반응형

https://prlabhotelshoe.tistory.com/34

 

[OpenCV] cvlib 이미지 객체 인식

python과 OpenCV를 통해 간단하게 컴퓨터 비전 프로그래밍을 테스트해볼 수 있는 라이브러리 cvlib 이번 테스트에서는 cvlib의 detect_common_objects 함수를 활용해 이미지 속 객체들을 인식해보도록 하겠

prlabhotelshoe.tistory.com

이전 포스팅에서 cvlib 라이브러리를 활용하여 이미지 속 객체들을 검출해보는 테스트를 실시하였습니다. 이번 포스팅에서는 영상or캠 에서 객체 검출 테스트를 해보겠습니다. 


※GPU 연동 빌드를 실시하지 않고 테스트를 진행하거나 GPU가 없는 경우 해당 과정을 생략하고 바로 소스코드로 넘어가시면 되겠습니다.

https://prlabhotelshoe.tistory.com/26

 

[CUDA&OpenCV] Python 환경 OpenCV GPU 연동 (CUDA backend in OpenCV) - 2. 빌드 & 테스트

지난 포스팅에서 빌드를 위한 파일들을 모두 설치하였고 이제 직접 빌드하여 테스트를 진행하겠습니다. 2.1 빌드 프로젝트 파일 생성 설치하였던 CMake를 실행합니다. 그 후 첫 번째 'Where is the sour

prlabhotelshoe.tistory.com

소스 코드 작성에 앞서, OpenCV를 GPU 연동 빌드를 하였다면 다음의 작업을 통해 GPU와 연동된 테스트를 실시해볼 수 있겠습니다. OpenCV의 GPU 연동에 대해선 상단의 링크를 참조하면 되겠습니다.

 

먼저, cvlib 라이브러리가 설치된 경로로 진입합니다. 저의 경우 anaconda의 가상환경에서 테스트를 진행하였기 때문에 다음의 경로에 해당 라이브러리가 위치하였습니다.

anaconda 환경의 경우 \anaconda3\envs\cpt\Lib\site-packages\cvlib 의 경로에 위치해 있으며, 일반적인 python 개발 환경일 경우 \Python38\Lib\site-packages\cvlib 일 것입니다. 해당 경로에서 object_detection.py 파일을 기타 편집기나 IDE 등을 통해 실행시킵니다. 저의 경우 VScode를 통해 실행하였습니다.

 

해당 파일을 열고 66번째 라인에 detect_common_objects 함수를 볼 수 있는데, 해당 변수 중 enable_gpu 값을 True로 변경합니다.

변경 예시

저장한 뒤 이제 코드 작성을 실시하면 되겠습니다.


소스 코드

import cvlib as cv
from cvlib.object_detection import draw_bbox
import cv2

vedio_path = '/vedio.mp4' #-- 동영상 파일 경로

webcam = cv2.VideoCapture(vedio_path) #-- 캠 사용 시 vedio_path 대신 0 사용

if not webcam.isOpened():
    print("Could not open webcam")
    exit()
    

while webcam.isOpened():

    status, frame = webcam.read()

    if not status:
        break

    #-- detect 함수 불러오기
    bbox, label, conf = cv.detect_common_objects(frame)

    #-- 검출 객체 박스 처리
    if label:
        out = draw_bbox(frame, bbox, label, conf, write_conf=True)
        
    cv2.imshow("Real-time object detection", out)

    #-- q 입력 시 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

webcam.release()
cv2.destroyAllWindows()

테스트

출력 예시

이 역시도 검출 성능 또한 yolo 기반이기 때문에 yolo와 같은 출력 성능을 보입니다. GPU와 연동하지 않을 경우 느린 성능의 검출을 볼 수 있겠습니다.

반응형

댓글