Emgucv , Tesseract 를 이용해 C# 으로 자동차 번호 인식 프로그램을 개발해 보았다.

OCR 공부할겸 해보았는데 번호판을 찾는 과정을 어떻게 하느냐가 가장 큰 관건이다.

번호판을 찾기위한 전처리 과정을 해볼수 있게 개발했고

거기에 로직을 1,2,3 로 나누어 처리하였다.

1 은 인터넷에 떠도는거 2는 직접 이것 저것 로직을 넣어봤다.

3 번 방법 또한 인터넷상에서 찾은 것으로 1,2 보다 번호판을 잘식별해 낸다.

 

(추가)

사진에서 자동차를 먼저 추출하는 로직을 추가했다.

주변 배경이 엣지추출시 같이 추출되어 번호판 찾는데 방해를 한다.

그래서 이를 자동으로 잘라주는 로직을 넣었다.

아래와 같은 사진에서 자동 잘라내기 를 하면 자동차만 추출된다.

(다른 자동차와 같이있으면 다른 자동차를 잘라낼때가 있다;;;)

[잘라내기 전]

[잘라낸 후]

---------------------------------------------------------------------------------------------------------------------------

아래처럼 0과 8 이 들어간 경우 영역을 잡기가 정말 힘들었다 0 내부영역과 8 내부영역이 엣지 영역으로 인식을 해서..;

로직으로 해결.

 

아래처럼 은색그릴이 있는 경우 그릴도 엣지로 추출되면서 난리가 났고(빨간사각형이 그릴에 모여있다;;)

숫자가 흐리게 찍혀 판별이 어려웠다.

이런 사진 같은 경우는 아래 처럼 전처리 과정을 하고 번호영역을 찾으면 잘 찾아진다.

선명하게 처리하였기 때문에 번호 판별력도 좋아졌다.

 

아래는 내차..

가까이에서 찍은 차량이고 차를 제외한 주변 배경이 별로 없으면 정말 인식률이 높다.

 

아래 차량은 조금 번호판이 크기가 이상하다;;;

그것보다도 처음에 숫자 1이 있어서 번호판 영역을 표시할때 좀더 신경을 써야한다.

한글인식룰이 영... '두' -> '푸' , '너' -> '녀' 이런식으로 한글은 잘못 판단할 때가 있었다.

솔직히 주차장 같은 경우는 뒷자리로만 판단해도 충분하다.

 

아래처럼 비스듬한 경우도 판별하지만 영역찾기가 쉽지않다.

(그래서 주차장 시스템에 들어가기전 일직선구간이 존재....)

 

구형번호판은 인식이 안된다.;;

여기까지만 하련다.ㅋ

 

전처리 과정에 엣지 추출이나 이진화, 감마, 대비 등등 이것저것 해보면서

전처리를 테스트 할수 있다.

(전처리는 저게 다가 아니다 .더있다... 하지만 이 프로그램상에서는 여기까지만...)

 

 

junijuniya@naver.com

EmguCV 버전에 따라 코드가 너무 달라지는것들이 있다 ㅠ

하나씩 정리해봐야겠다.

EmguCV 3.3 버전 기준이다.

 

Index fln = new Index(supermatrix, 4);

아래 처럼 변경하면 된다. (EmguCV 3.3)

Index fln = new Index(supermatrix, new KdTreeIndexParams(4))’,

  1. Favicon of http://kjun.kr kjun.kr 2018.03.12 13:38 신고

    https://www.codeproject.com/Articles/1187512/Image-recognition-with-Csharp-and-Emgu-libraries

+ Recent posts

티스토리 툴바