전국 어린이 보호구역의 불법 주·정차 단속 카메라 설치 비율은 설치 1.7%, 미설치 98.3%로 매우 낮다. 지자체는 고가의 단속 전용 카메라를 한정된 예산 내에서 교통이 혼잡한 지역에 우선적으로 설치하기 때문에 어린이 보호구역의 불법 주·정차 단속 카메라 설치 비율이 현저히 낮아지게 된 것이다. 이처럼 카메라가 설치되지 않은 단속 구간은 인력을 직접 투입해 단속하지만 단속 인력마저도 부족한 현실이다. 이에 따라 어린이 보호구역에 불법 주·정차가 성행하면서 교통사고로까지 이어지는 문제가 발생하고 있다.

이런 문제를 해결하기 위해 어린이 보호구역에 설치돼 있는 방범용 CCTV에 딥러닝 기술을 적용한 불법 주·정차 단속 기능을 추가하는 방안을 모색했다. 결과적으로 어린이 보호구역 방법용 CCTV 영상 속에서 실시간으로 차량을 자동 탐지하고 추적해 불법 주·정차 여부를 판단하고 해당 차량번호와 색상을 추출하고 과태료를 고지하는 딥러닝 기반 자동 탐지 시스템을 개발했다.
어린이 보호구역 외에도 기존에 설치된 방범용 CCTV에 이 기술을 추가하면 영상 속에서 자동으로 차량을 탐지하고 추적해 불법 주·정차 여부를 판단하고 증거 사진과 영상을 촬영한 뒤 해당 차량 정보(차량 번호, 색상)를 토대로 과태료를 고지하는 과정을 자동화할 수 있다.

자동차 번호판 인식과 객체 탐지 기술
먼저 딥러닝 기반 어린이 보호구역 불법 주·정차 자동 탐지 시스템의 구현을 위해 검토, 활용한 자동차 번호판 인식 기술에 대해 먼저 알아보자.

딥러닝 기반 다중 자동차 번호판 인식 기술
‘딥러닝 기반 다중 자동차 번호판 인식 기술(다차로 LPR2.0, 전기차/신규번호판 수용)’은 무센서형 번호판 인식, 다중 차량 인식, 자연영상에서의 인식 등 자동차 번호판 인식 기술의 개발 필요성이 증가함에 따라 개발됐다. 이 기술은 동영상 환경에서 영상 내에 존재하는 차량을 감지하고 번호판을 인식해 텍스트 정보를 추출하는 기술이다. 자동차 번호판 인식 기술은 번호판 영상을 인식하기 위한 차량 검출기술(Vehicle Detection), 번호판 검출기술(LP Detection), 문자 인식기술(Recognition) 세 가지의 주요 기술로 구성돼 있다.
차량 검출기술은 동영상이 입력되면 딥러닝 기반으로 프레임 단위에서 영상 내의 차량을 검출하고, 번호판 검출기술은 검출된 차량 영역내의 번호판을 딥러닝 기반으로 검출한다. 마지막으로 문자 인식기술은 번호판 내의 개별문자의 위치를 찾아내어 텍스트 정보를 추출한다[그림 1].

[그림 1] 자동차 번호판 인식 과정

실제 현장 데이터를 적용했을 때, 자연영상(실제 현장 CCTV영상)만으로도 다중 차량의 번호판 검출(검출률: 99.9% 이상)과 인식(인식률: 99.5% 이상)이 가능하다. 특히 단일 정지영상뿐 아니라 동영상에서의 번호판 인식이 가능하고, 루프/레이저 등 차량 검지 센서가 필요 없다. 또한 머신러닝 기반의 기술로 잡영이나 왜곡, 조도 변화에 강하다는 것이 장점이다.

딥러닝 기술을 활용한 효과적인 차량 번호판 인식 시스템
‘딥러닝 기술을 활용한 효과적인 차량 번호판 인식 시스템’기술은 전 과정에서 딥러닝 알고리즘을 모두 사용한다는 것이 특징이다.
첫 번째 차량 번호판 영역 검출 단계에서 YOLO(You Only Look One)v2를 이용해 번호판을 검출한다. 그 이유는 색상 모델에 의한 번호판 영역분할 방법, 색상 밝기 값을 활용한 방법 등이 있었지만 이런 기존 연구 방법들은 날씨나 빛의 강도, 차량의 색상의 영향을 받으면 구분이 어렵다는 단점이 있기 때문이다.
두 번째 차량 번호판 숫자 인식은 k-NN (Nearest Neighbors) 알고리즘을 사용한다. 그 이유는 학습 데이터를 분류 단계에서 바로 사용하기 때문에 별도의 훈련단계가 필요 없으며 번호판의 숫자는 모두 같은 글씨체와 크기로 구성돼 있기 때문이다.
세 번째 차량 번호판 문자 인식은 템플릿 매칭(Template Matching)을 활용한다. 그 이유는 한글의 모음 부분의 차이가 매우 미세해, 이를 분류하기 위해서는 템플릿 매칭을 활용하는 것이 가장 적합하기 때문이다[그림 2].

[그림 2] ‘딥러닝 기술을 활용한 효과적인 차량 번호판 인식 시스템’ 전체 구성도

‘딥러닝 기술을 활용한 효과적인 차량 번호판 인식 시스템’의 논문의 연구 결과는 장비와 비용을 최소화하고 실험결과 인식의 정확도를 향상 시켰다고 나와 있지만 얼마나 정확도를 높였는지에 대한 테스트 결과가 나와있지는 않다. 마찬가지로 문자 인식 단계에서 문자를 인식하지만 해당 문자가 어떤 문자를 뜻하는지에 대해서도 설명이 부족하다.

YOLO
R-CNN(Regions with Convolutional Neural Networks)과 같은 YOLO 이전의 객체 탐지 알고리즘은 복잡한 처리과정으로 인해 이미지 내 객체 탐지에 상당한 시간을 요구했다. 객체 탐지에 있어 빠른 시간은 상당히 중요한 요소였던 만큼 Fast R-CNN이나 Faster R-CNN처럼 탐지 과정을 효율화하는 알고리즘들이 등장했지만, 이미지 처리에 있어서의 실시간성을 보장하기에는 역부족이었다.
YOLO는 기존 객체 탐지 알고리즘과는 다른 방법으로 훨씬 빠른 처리 속도를 구현해냈다. You Only Look Once라는 뜻처럼, YOLO는 단일 convolutional network로만 이미지 내의 객체를 탐지한다. 이처럼 간단한 처리과정 덕에 매우 빠른 속도를 자랑하며, 이미지 전체를 보고 판단하는 방식이기 때문에 객체 클래스(Object class)에 대한 맥락적 이해도가 높다.

[그림 3] 객체 탐지 알고리즘 성능 비교자료: YOLO 9000 : Better, Faster, Stronger(University of Washington, 2016)

시스템 구성과 개발 환경
‘딥러닝 기반 어린이 보호구역 불법 주정차 자동 탐지 시스템’의 시스템 구성과 개발 환경은 ‘인공지능 분석’, ‘수집 및 저장’, ‘GUI구성’과 같은 크게 3가지 단계로 나눌 수 있다[그림 5].

[그림 5] 전체 시스템 구성도

’인공지능 분석’단계는 실시간으로 CCTV 영상을 입력받고 증거 사진과 메타데이터를 출력하는 단계다. 입력된 영상은 차량 탐지와 차량 추적 기술을 통해 해당 차량이 불법 주정차인지 여부를 판단하고 불법 주정차한 차량의 번호판을 이미지로 저장한다.
저장된 이미지를 OpenCV를 이용해 광학 문자로 변환한 다음 TesseractOCR을 통해 번호판의 광학 문자를 텍스트화해 데이터로 저장한다. 그 결과 불법 주정차한 차량의 번호판 등의 이미지와 메타데이터가 저장된다. 이 단계에서는 윈도우 10 환경에서 파이썬(Python)을 활용했다. 특히 파이썬에 등록된 Darkflow, YOLO, OpneCV, pyterract 라이브러리를 사용했다.
두 번째, ‘수집 및 저장’단계는 첫 번째 단계를 거쳐 출력된 이미지와 메타데이터를 실시간으로 수집하고 저장한다. 수집하고 저장하기 위해 하둡(Hadoop) 플랫폼을 사용했다. 하둡 플랫폼 구축은 윈도우 10 환경의 VMware에 설치해, 3개의 컴퓨터에 가상환경으로 CentOS 7을 각각 설치했으며, 총 3개의 노드(Node)로 하둡 플랫폼을 구성했다.
실시간 수집과 저장은 아파치 니피(Apache NiFi)를 이용했으며, 니피는 첫 번째 단계에서 출력된 불법 주정차 이미지와 메타데이터가 저장된 경로에 접근해 실시간으로 수집을 진행한다. 그리고 수집된 이미지 파일과 메타데이터는 데이터베이스에 저장한다. 편리한 관리를 위하여 메타데이터는 Hbase에 저장했으며, 이미지 파일은 HDFS에 저장했다.
세 번째, ‘GUI구성’ 단계에서는 저장된 메타데이터와 이미지 파일을 이용해, 사용자에게 꼭 필요한 서비스를 제공한다. 서비스는 총 3가지로 ‘차량번호 조회 서비스’, ‘불법 주정차 실시간 업데이트 서비스’, ‘차량번호 수정 서비스’를 제공한다.
‘차량 조회 서비스’는 차량 번호를 조회하면 해당 차량 번호의 증거사진과 촬영된 시간, 위치 등을 사용자에게 보여준다. ‘불법주정차 실시간 업데이트 서비스’는 불법 주정차가 적발되면 사용자화면에 제공되는 불법 주정차 목록을 실시간으로 업데이트해 최신 목록을 사용자에게 제공한다.
’차량번호 수정 서비스’는 좋지 않은 촬영환경으로 정확한 번호판 검출이 실패했을 때를 위한 서비스로, 검출에 실패한 번호판 사진을 사용자에게 직접 제공해 사용자가 올바르게 수정할 수 있도록 도와준다. ‘GUI구성’ 단계는 윈도우 10에서 스프링 프레임워크(Spring Framework)와 HTML을 이용해 웹사이트를 구성했으며, Hbase에 접근하기 위해 Hive를 사용했다.

차량 탐지와 추적
불법 주정차 차량을 적발하기 위해 첫 번째로 필요한 것은 바로 객체 탐지 기술이다. 이미지 내에서 차량에 해당하는 부분을 탐지할 수 있어야 추적이나 불법 주정차 차량 선별 등 이후의 프로세스가 가능하기 때문이다.
이미지 내 객체 탐지 알고리즘에는 YOLO, R-CNN, Faster R-CNN, SSD(Single Shot Multibox Detector) 등이 있다. 본 프로젝트는 이단계에서 DarkFlow를 사용했다. 이는 텐서플로우(TensorFlow)로 YOLO의 darknet을 구현한 것이다.
각 객체탐지 알고리즘들은 각자의 장단점을 갖고 있는데, YOLO, 그중에서도 이 프로젝트에서 사용한 YOLOv2는 다른 방식에 비해 탐지 속도가 빠른 것이 특징이다. CCTV를 통한 실시간 탐지가 무엇보다 중요한 프로젝트 특성을 고려했을 때, 최대한 빠른 탐지속도가 필요했다[그림 4]. 다시 말해 객체 탐지의 실시간성을 확보하기 위해, OpenCV가 제공하는 darknet 모듈이 아닌 DarkFlow를 사용한 것이다.

[그림 4] 객체 탐지 알고리즘 성능 비교자료 : YOLO(Real-Time Object Detection, 2018)

또한 이 프로젝트는 파이썬 위주로 프로그래밍을 진행했으나, 파이썬에서는 OpenCV의 GPU 가속 기능을 사용하기 힘들었다. 반면 기존의 YOLO darknet 모델을 텐서플로우를 통해 구현한 DarkFlow를 사용할 경우, 텐서플로우의 GPU 가속 기능을 그대로 활용할 수 있었다. 이 때문에 OpenCV의 darknet 모듈보다는 DarkFlow를 통해 결과물(좌표)를 산출한 후 OpenCV로 화면에 표시하는 방법을 사용했으며, 이를 통해 더 효율적으로 빠른 객체 탐지를 구현했다.
객체 탐지에 사용한 학습 모델은 새로 학습시키는 방법을 사용하지 않고, darknet이 기본으로 제공하는 사전 학습(Pre-trained) 모델을 사용했으며, 화면에서 자동차 이외에 다른 객체는 표시하지 않도록 필터링했다. 물론 자동차만 라벨링한 후 학습시켜 독자적인 학습 모델을 얻어낼 수 있었다면 더 빠른 탐지가 가능했을지도 모르나, 그러기에는 학습을 위한 데이터를 모으는 과정이 힘들고, 많은 시간이 소요될 것이라 판단했다.
단순히 화면상에서 자동차를 탐지해낸다고 해서 어떤 자동차가 그 자리에 얼마나 머물렀는지 알아낼 수 있는 것은 아니다. 객체 탐지 알고리즘은 단지 그 영상의 프레임 한 장 한 장 속에서 어디에 자동차로 보이는 객체가 존재하는지를 알려주는 것에 불과하다. 서로 다른 프레임 속에 같은 자동차가 인식되고 있다고 해서 이를 동일한 개체로 인식하는 것은 아니며, 이를 가능하게 해주는 것이 바로 객체 추적 알고리즘이다.
객체 추적 알고리즘은 매우 다양하며 OpenCV에서도 여러 가지 객체 추적 알고리즘을 제공한다. 그러나 이를 프로젝트에 적용하기에는 여러 가지 어려움이 있었다. 이 프로젝트는 각각의 프레임에서 탐지된 객체 간의 연관성을 확인해 줄 추적 알고리즘이 필요했지만, 고전적인 추적 알고리즘은 일반적으로 한 번 탐지가 이뤄지면 이후로는 탐지를 통해 얻어낸 특징(주로 색상)을 통해 추적만 하는 방식으로 사용되기 때문이다.
이런 시행착오 과정에서 찾아낸 것이 바로 SORT(Simple Online and Realtime Tracking) 알고리즘이다. SORT알고리즘은 칼만(Kalman) 필터와 헝가리안(Hungarian) 알고리즘 등을 이용, 프레임에서 탐지된 객체를 이전 프레임에 탐지된 객체와 비교해 연관성을 찾아내 추적하는 탐지 기반 추적(Tracking-by-detection) 프레임워크다. 다른 비슷한 객체 추적 알고리즘과 비교해 정확하면서도 빠른 속도를 보여준다는 것이 장점이다[그림 6].

[그림 6] 객체 추적 알고리즘 성능 비교

차량 번호판 탐지
영상에서 차량을 탐지하고 추적해 해당 지역에서 오랫동안 머무르고 있는 차량을 특정해냈다면, 해당 차량의 이미지가 따로 추출된다. 그러나 단속을 위해서는 이미지뿐 아니라 텍스트 형식으로 데이터베이스에 저장할 필요가 있다. 번호판 탐지는 차량 번호를 보다 효과적으로 추출하기 위해 필요한 과정이다.
차량 이미지에서 번호판을 탐지하기 위한 알고리즘으로는 YO LO v 2 를 사용했다. 다만 이번에는 DarkFlow가 아닌 OpenCV의 darknet 모듈을 사용했다. 영상 속 차량 탐지와는 달리 단일 이미지 내 탐지이기 때문에 실시간성을 보장할 필요가 없었고, 더 간단하게 모델을 적용할 수 있었기 때문이다.
모델 또한 사전 학습 모델에는 자동차 번호판이 없었기 때문에 독자적으로 학습시킨 모델을 사용했다. 국내외 자동차 사진 약 700여 장에 번호판을 라벨링한 후, 아마존 EC2 P2 인스턴스에서 학습시켜 모델을 생성했다.

[그림 7] 번호판 검출 결과

지금까지 불법 주정차 차량을 인지하기 위한 객체 탐지, 추적에 방법에 대해 알아봤다. 다음에는 자동차의 특정 요소, 즉 번호판의 차량 번호와 색상을 DB화하고 서비스 구현하는 과정에 대해 알아보겠다.

 

글 | 김지성, 양주영, 이새몬, 이지현, 최재영

이 글은 과학기술정보통신부와 정보통신기획평가원의 ‘2018년 혁신성장 청년인재 집중양성 사업’ 중, 한양대학교에서 수행한 ‘프로젝트 주도형 빅데이터 전문가 양성과정’의 프로젝트 결과물이며, 담임강사 장석주 교수(한국폴리텍대/융합기술교육원)와 박주열 교수(한양대학교 SW융합원)의 감수로 진행됐다.


본 프로젝트는 취업준비생의 교육을 위해 진행된 것으로 본 제작물의 저작권 침해 등에 대한 문의는 hyuswec@naver.com으로 메일주시면 안내해드립니다.

이 기사를 공유합니다
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지