개학과 동시에 졸업작품을 제작하는 프로젝트가 시작은 되었지만,

실제로는 약 2주간은 제안서 작성으로 소모되는게 현실이고,

남은 2주간은 다시 부품 구매 제안서 및 허가가 나기를 기다립니다.




그리고 4월 3일 이후로 구매가 가능하며,  그 말은 실제 부품 수령등은 4월 둘째주에나 가능하게 됩니다만,

일단은 프로젝트가 마인드스톰 위에 라즈베리파이를 올리고 카메라와 연동하여 작동되는 무인자동차이니 만큼, 친구에게서 미리 라즈베리를 빌렸으며, 일단은 선행작업으로 OpenCV 공부 및 개발을 미리 진행하고 있습니다.




2015/03/20 작업내용




OpenCV 예제 2개를 엮어서, 간단한 속도안내판 인식을 테스트 해봤습니다.


문제점 : 템플릿을 이용한 방식 [ Template Matching ] 인데, 위에서 이용한 템플릿의 경우, 속도안내판 30과 40의 차이가 적은 관계로 둘다 동일하게 인식합니다.
즉, 차이를 더 주던가 아니면 템플릿 비교를 다른 인식 알고리즘으로 교체 혹은 다른 방법으로 개발해야 될 필요성이 있습니다.
또한 카메라와 일정거리에서만 제대로 작동하며, 아직 앞뒤로 움직일 경우의 인식에 대해서는 보장하지 못합니다.
템플릿 이미지 사이즈 조절등이 필요합니다.



노트북 웹캠 + VS2013 을 이용한 작업이였는데, 웹캠에서 실시간 영상을 받아와서 그 인식을 해봤다는데서 의의가 있습니다.
학교 영상처리 수업에서는 bmp파일만 다뤄봤었는데, OpenCV 를 활용하니 사실상 API 호출 수준으로 매우 쉽게 영상에서 프레임 단위로 뽑아와서 처리가 가능했습니다.




2015/03/25 작업내용




현재까지 구현한 템플릿 매칭 알고리즘으로서는 위의 속도제한 표지판 30과 40을 구별해내지 못합니다.

그리하여 다른 알고리즘 확인을 테스트 해 볼겸 SURF 라는 알고리즘으로 구현된 예제를 발견, 적용해봤습니다.

일단 기존 템플릿이 30과 40을 전혀 구별하지 못했다면, SURF의 경우는 구별을 하는 경향이 있으나, 역시 완벽하지는 않았으며, 무엇보다 사각형을 제대로 그려주지 못하는 문제점이 있습니다.

제일 큰 문제점이라면 역시 속도 문제 입니다.




2015/03/27 작업내용




위 이미지를 참고하여 아래와 같이

실제 전시장에서 사용할 표지판을 포토샵을 이용하여 미리 제작하였습니다.

아무래도 영상처리 자체가 표지판을 기준으로 작업을 할 수 밖에 없는지라,

표지판 제작을 선행하는 것도 나쁘지 않다고 판단했습니다.





대략적으로 컬러로 규제표지와 지시표지를 식별한 뒤..

이리저리 해봐야 되지 않나 싶긴 하네요.





2015/03/31 작업내용




[ 각각의 인식 출력물을 GIF 로 만든 화면입니다. ]



템플릿 하나로 다양한 사이즈에서 인식하게 하는 것은 성공한 것 처럼 보입니다.

다만, 아직까지는 완벽한 조건하에서만 저렇게 작동하고 있습니다.

동작원리는 기존의 템플릿 매칭이 계속되고 있는 가운데,

기존 소스코드가 단순히 가능성이 높은 곳에서 사각형을 계속 그려주고 있었다면,

템플릿 매칭 이후에 그 영상을 그대로 갖고 와서

R,G,B 를 분리 후, R을 분리하여 빨간색 부분만 남긴 시점에서 이진화 했습니다.

그 이후 변형된 컨투어 트래킹을 이용하여 추출된 영상의 크기 값을 측정 후

여기서 사각 박스를 그려주고 있습니다.





하지만 같은 소스 코드를 이용하여 실제로 테스트 해보면



기대한 것 만큼 깔끔하게 나오고 있지는 않은 것을 확인 할 수 있습니다.




해당 영상의 이진 영상을 살펴보니..

뭔가 이상합니다 ㅠㅠ..

R값만 추출한거 같은데 제대로 동작을 안하는 거 같습니다만,

여튼..  변형된 컨투어 트래킹 원리상 잡음이 들어가면 잡음까지도 하나로 인식해버리는 문제점이 있습니다.

아마 옵션값의 문제인 듯 한데,

좀 더 연구해볼 필요성이 느껴집니다.




기존의 방식으로 같은 영상을 인식시켰을 경우 다음과 같습니다.





사각 박스를 그려주는게 템플릿의 이미지 크기 그대로 그려주는 코드기 때문에

거리가 달라질때 이미지 변화를 제대로 포착못하는 것 처럼 보여주는 문제점이 있습니다.








2015년 4월 3일 작업내용

...........

처음부터 접근을 잘못하고 있었습니다.

정확하게 생각을 잘못하고 있었습니다.

R,G,B 로 접근했었는데 [빨간색만 뽑아내면 되겠지~?]

그림자와 노이즈 처리에 상당한 애로사항이 있던 도중




영상처리 수업 시간에 만들었던 예제 프로그램을 이용하여

복습겸 하나씩 눌러봤습니다.

그리곤 깨달았습니다.

YUV로 하면 한방에 되겠구나.





그렇게 방향을 전환하자마자 이렇게 원하던 결과를 얻었습니다.

물론 다른 상황에서는 어떻게 될지 모르겠지만,

일단 현재 목표한 환경에서만큼은 기대했던 그대로 작동하는 것을 확인 할 수 있습니다.



Y가 흑백, 즉 밝기값만 갖고 있고,

U가 파란색 계통

V가 빨간색 계통으로 구성되어 있으니,

V값을 이용하여 추적했습니다.






2015년 4월 4일 작업내용





어제 성공한 표지판 추적을 바탕으로

오늘은 추적한 지점만 뽑아내는 ROI를 구현했습니다.




2015년 4월 5일 작업내용


인식용 표지판 획득.






2015년 4월 8일 작업내용



ROI 로 추출한 영상에서 다시 필요한 문자만 획득 시도해봤습니다.

문자 인식 영역을 파란 박스로 그려주고 있습니다.

현재로서는 노이즈에 약한 모습을 보여주고 있습니다.






2015 년 4월 12일 작업내용



이전 문자 인식 대비 노이즈는 어느정도 잡았습니다만,

여전히 특정 각도 이상에서는 메롱되는것은

현재 실력으로서는 어떻게 할 방법을 모르겠습니다.

당장은 시간 투자 대비 효과가 낮다고 판단하여 다음 단계로 넘어갈 예정입니다.







앞 문자만 추출하는 것을 시도해봤습니다.

레이블링 된 것을 바탕으로 앞에것만 추출을 시도했는데,

이유는 모르겠지만, 때때로 레이블링이 바뀌는거 같습니다.

음..

아마 위에서 노이즈를 제거하기 위해 2개의 큰 레이블링 값만 남기는 방식으로 이용한 것 때문에 생기는게 아닌가 싶은데, 해결방법은 모르겠습니다만,

어차피 모멘트를 하던 뭘 하던간에 결과엔 큰 영향을 주지 않을것이라 보고 있습니다.






2015년 5월 1일 작업내용



모멘트 값을 이용하여, 추출한 앞 문자들의 모멘트 값에 따라

속도 표지판을 구별하는 영상입니다.



아직 방향표지판을 구별하는 기능을 추가하지 못했기에,

방향 표지판만 나오는 영상에서는 오류가 뿜어져 나오는 것을 볼 수 있습니다만..

아마도 구현과 동시에 사라지지 않을까 기대해봅니다.





2015년 5월 8일 작업내용



속도표지판과 도로표지판 인식을 시도하여 성공했습니다.

일차적으로 졸업작품의 프리뷰버전이 완성되었다고 볼 수 있겠습니다.

라즈베리파이가 비록 최신형이긴 하지만,

영상처리를 얼마나 해줄 수 있는지에 관해서

전혀 알고 있지 않기에, [라즈베리를 이용하여 가능하다는 수준만 알고 있었습니다]

최대한 간단하게 색상인식 기반을 바탕으로 약간의 꼼수를 이용하였습니다.

특징점 이용한 방법은 유감스럽게도 라즈베리에서 충분한 속도를 뽑아줄지 의심스럽습니다.



이제 앞으로 라즈베리파이에 옮긴 뒤,

지속된 테스트와 더불어 조정에 들어가면 될 듯 합니다.



물론 라즈베리에서 충분히 버텨준다면,

인식하는 방법을 조금 더 고급스럽게 올려보고 싶네요.





2015년 5월 19일 작업내용



라즈베리파이에 코드를 옮기고 실행해본 화면입니다.

카메라 실행이 안되서 식겁했었는데,

여전히 카메라 실행이 되었다 안되었다를 반복하고 있습니다.



또한 예상보다 표지판 인식률이 낮은데, 이는 카메라가 바뀌면서 그런건지는 몰라도

값 자체를 다시 조절해야 될 필요성도 느껴집니다.

XRDP 문제인지는 몰라도, 실행 속도 또한 상당히 낮네요.






2015년 5월 20일 작업내용



나름 최적화라고 시도해봤지만

실행속도에는 전혀 체감 상승이 없습니다.

또한 어제 문제는 오늘도 여전합니다.



실행이 항상 된다는 보장이 없는게 가장 큰 문제네요.






2015년 5월 24일 작업내용



프리뷰 버전2에 해당하는 영상입니다.

실제 주행 인식 영상은 아니고..

마인드스톰 위에 휴대폰 올려서 촬영한 영상을 받아서

PC로 영상인식을 테스트 한 영상입니다.



마인드스톰은 조원들이 학교에서 작업하고,

영상처리는 제가 집에서 작업하는 형태인지라..

무엇보다 라즈베리파이를 현재 제가 갖고 있습니다 ㅋ..

그런고로 작업 자체는 따로따로 진행중에 있습니다.




결과를 평가하자면,

일단은 중간중간에 나타나면 안되는데 나타나 버리는 엉뚱한 인식들이 문제네요.

더 문제는 라즈베리파이에서도 제 속도가 안나온다는 거..

콘솔 화면창에 오류들이 뿜어나오는 것을 도무지 해결할 능력이 없기에,

아예 화면 위에다가 방향 인식했다고 출력을 시키기로 결정하여,

그렇게 출력시키고 있습니다.




개인적으로는 차라리 이 편이 훨씬 보기도 좋고 나은 듯 합니다.





기존 문제가, 출력해야 되는 시간안에 assertion error 등이 떠버리면

출력이 안되고

에러가 끝나고 난뒤에 다시 출력이 되서

중간 중간 끊기기에

아예 그러면 에러가 뜨기전에 출력자체를 끝내버리면 어떨까 싶어서

3초간 출력에서 1초간 출력으로 바꿔봤습니다 =ㅅ=




발표 시연용으론 충분할듯 합니다.

발표는 실제 보여주는게 아닌, 시간 관계상 보통 동영상으로 보여주는 경우가 많다기에..






2015 년 5월 29일 작업내용



영상에 좌우 출력하는거 자체가

콘솔화면에 뜨는 무수한 에러를 잡지 못해서였는데,

오늘 드디어




요 2가지 에러에 한해서 잡았습니다!!



덕분에 콘솔 화면은 안정적으로 출력되고 있습니다만,

저 동영상이외의 환경에서는 여전히 불안합니다.





2015년 6월 8일 - 프로젝트 종료 및 발표



OpenCV 를 사용하였으며, 라즈베리파이2와 마인드스톰을 이용한 무인자율주행 자동차 개발을 목표로 하였습니다.

다만 라즈베리파이에서 카메라가 불안정한데다 (몇번이나 교환을 받았음에도 불구하고)

라즈베리 이용시에는, PC와 달리 오류발생시 대처가 어렵다는 문제가 있어서,

일종의 네트워크 카메라를 이용한 방식으로 선회하였습니다.

폰카를 마인드스톰 앞에 거치시킨 뒤, 폰카의 영상을 네트워크를 통해 PC로 연결,

PC에서 영상처리 후 마인드스톰에 값을 보내는 방식이죠.

다만 네트워크 상태에 따라 마인드스톰으로 값이 제대로 넘어가지 않는 점이 있었으며,

영상인식쪽은 색상인식 기반인지라 그림자등의 잡음에 민감한 편이였습니다.

다만 그래도, 예상보다는 잘 인식되더군요.




위 영상은 조원이 촬영 및 제작하였습니다.








원 블로그 주소 : http://www.nipa0711.net/2015/03/OpenCV-Graduation-project-autonomous-car.html


위 블로그에 있던 내용을, 티스토리로 옮겼습니다.


  1. Ccomment 2017.02.19 19:02 신고

    안녕하세요.. 저도 현재 자율주행 자동차 프로젝트를 진행하고 있는 학생입니다.
    저의 경우 표지판 인식 기능을 맡아 구현중인데 혹시
    표지판 내에 숫자(문자인식)은 어떠한 기술을 사용하였는지 알수 있을까요..?
    책의 뒤져보며 특징점 검출 , OCR등 여러가지를 테스트 해봤는데 잘 안되서요..
    답변 주시면 감사하겠습니다..

    • 니파 nipa0711 2017.02.19 22:03 신고

      OCR이 안될리가 없을텐데요;;

      저 같은 경우는 결국 휴 모멘트로 처리했습니다.

    • Ccomment 2017.02.20 21:23 신고

      답변 감사합니다.. 한가지 더 여쭤볼께 있는데 표지판을 현재 연두색 사각형으로 잡고 있는데 저 같은 경우는 원검출 이후 yuv를 이용해서 표지판을 잡다보니 원이 표지판 내에 큰원과 작은원을 동시에 잡아서 문제가 생기더라구요.. 혹시 원검출을 이용하셨나요?? 아니면 템플릿 매칭으로만 표지판 외곽을 잡는게 가능한지 궁금합니다..
      답변 주시면 감사하겠습니다.

    • 니파 nipa0711 2017.02.21 15:12 신고

      원검출 같은 것은 따로 쓴 기억은 없습니다. 표지판 외곽은 결국 표지판을 ROI로 설정하는 것과 동일하다고 봅니다.
      제가 졸작 당시에는 흰색바탕을 배경으로 하였기에 편하게 할 수 있었습니다만..
      실제 영상이라면 단순히 이런 색상만으로 하는 것은 상당히 무리에 가까운 방식일꺼에요.

    • Ccomment 2017.02.22 16:27 신고

      답변 감사합니다. 저의 경우 숫자인식을 템플릿 매칭을 이용하여 성공하였습니다..
      그동안 답변 주셔서 감사했습니다.

+ Recent posts