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

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

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

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

 

(추가)

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

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

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

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

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

[잘라내기 전]

[잘라낸 후] - 파란선은 다른 로직태운값

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

아래처럼 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 https://kjun.kr kjun.kr 2018.03.12 13:38 신고

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

+ Recent posts