일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 삼성코테
- DP
- dfs
- MCU 딥러닝
- 초소형머신러닝
- 포스코 ai 교육
- 포스코 교육
- 삼성코딩테스트
- 코테
- 영상처리
- tflite
- bfs문제
- 코딩테스트
- tinyml
- 컴퓨팅사고
- 임베디드 딥러닝
- 코테 문제
- dfs문제
- 알고리즘
- BFS
- 포스코 AI교육
- sort
- TensorFlow Lite
- 딥러닝
- 다이나믹프로그래밍
- 삼성역테
- DP문제
- 삼성역량테스트
- 그리디
- 자료구조
- Today
- Total
코딩뚠뚠
[대학활동] 2019 ESW 본문
2018년에 이어 2019년에도 참가했다.
2019년에는 이 대회 수상을 목표로 주력대회로 삼고 준비했다.
우수상 전자부품연구원장상 수상!
대회소개 :
임베디드SW와 산업간의 협업 아이디어를 제공하고 창의적이고 혁신적인 SW개발 아이디어를 획득을 통한 SW분야 우수인력 발굴 및 양성을 하기 위한 대회
주최 : 산업통상자원부
주관 : 임베디드소프트웨어,시스템산업협회
주제 :
처음 주제선정을 할 때부터 소외계층을 위한 프로젝트를 구상했다.
여러가지 이유로 소외된 사람들 중에서 우리가 구현한 시스템, 제품을 사용했을때 가장 큰 효과를 볼 사람들은 누구인가 생각해봤다.
결과적으로 제품을 만들어냄으로써 무언가를 대신해줄 수 있을 것이라고 생각했고, 그 대상은 시청각중복장애인이라고 생각했다.
듣지도 못하고 보지도 못하는 이들이 소통하는 방법 중 '점화' 라는 것을 알게되었고 이를 활용한 제품 개발을 진행했다.
방법 :
● 개발과정은 다음과 같았다.
아이디어 구상 → 구체화 → 선행기술 조사 → SW기초설계 → HW기초설계 → 기본 영상처리 → c++ knn algorithm → python tesseract → SSH서버와 연결 → HW제작 → 보완 및 오차분석
● 기본적으로 OpenCV를 이용한 프로젝트이다.
Python과 C++을 이용하였고 라즈베리파이4와 motor 동작을 위한 아두이노보드를 이용하였다.
입력장치로는 USB Camera를 이용하였다.
● 동작순서는 다음과 같다.
1. USB 카메라를 통해 목표 도서를 실시간 촬영, PC에 전송한다.
2. 촬영된 사진은 PC의 code에 의해 처리된다.
3. 처리 된 영상은 문자열의 형태로 MCU에 전송된다.
4. 전송된 문자열에 알맞게 MCU는 장갑에 장착된 모터를 진동시킨다.
● HW기능은 다음과 같다.
cap video : usb camera를 통해 영상을 촬영, 실시간으로 전송한다.
calculate algorithm : algorithm을 통해 촬영된 영상을 문자열로 변환한다.
serial communicate : serial communicate 를 통해 문자열을 MCU로 전송한다.
motor control : 전송된 문자열을 문자로 분리하여 문법에 맞게 motor를 진동시킨다.
● Software 구성은 다음과 같다.
Software |
설명 |
Ubuntu linux |
캐노니컬이 개발한 컴퓨터 운영체제이다. python, Tesseract, OpenCV 코드 등의 개발의 응용을 위하여 사용한 운영체제이다. |
Python |
귀도 반 로섬이 개발한 프로그래밍 언어이다. pytesseract와 pyserial, OpenCV의 코드 응용을 위하여 사용하였다. |
OpenCV |
영상처리를 위해 OpenCV 라이브러리를 사용하였고 영상이 tesseract OCR을 가장 효율적으로 사용할 수 있는 이미지로 변환을 한다. |
Tesseract |
tesseract OCR은 leptonica를 기반으로 작동한다. C++, Python을 기반으로 작동한다. 광학 문자 인식 기술로 영상에 출력되어있는 문자를 txt로 렌더링한다. |
Knn Algorithm |
글씨체나 필기체 등 tesseract ocr이 인식 할 수 없는 문자의 경우 knn 알고리즘을 이용, 머신러닝을 기반으로 하여 즉각적 학습을 시킬 수 있도록 하였다. |
● Software 설계도
역할 :
팀은 전자공학과 2명과 앱제작을 위한 컴퓨터공학과 1명으로 구성
팀원으로 역할을 수행했다.
정 - C++를 이용한 KNN algorithm 작성
-> tesseract로 인한 방식도 있지만 KNN (k-nearest neighbor) 알고리즘(쉬운 지도학습 머신러닝 - supervised machine learning)을 이용하여 문자를 직접 학습시키기도 하였다. 필기체나 악필 등의 글씨는 tesseract가 인식하지 못하기 때문에 직접 여러개의 상황을 가정하여 학습시키고 인식시키는 과정을 거쳤다.
부 - python을 이용한 opencv 전체코드 작성
-> 팀장과 함께 영상처리 알고리즘을 작성하고 구현하였다. 실시간으로 비디오를 받아오고 알고리즘의 어떤 조건에 걸리게 된다면 그 때의 화면을 캡쳐하여 이미지 전처리를 하고 tesseract로 문자로 변환하였다. 이를 점화형식 출력으로 변환하어 진동모터로 출력하였다.
결과 :
https://youtu.be/O23K3e7kRdg
위와 같은 결과를 도출할 수 있었고 작년 PT발표를 보완해서 우리의 소프트웨어적인 강점을 잘 설명하며 어필할 수 있었다.
우수상인 전자부품연구원장상을 수상할수 있었다.
어려웠던점과 해결방안 :
검지손가락 끝에 달린 카메라가 허공을 가르면서 문자를 가리킬 때 실시간으로 그 영상을 문자로 변환해야 했다.
문자의 길이가 띄어쓰기 없이 길다면 한 프레임 안에 들어오지 않아 인식된 부분만 읽을 수 있었지만 그보다 큰 문제는 한번 읽은 문자를 어떻게하면 또 읽지 않을까 라는 문제였다.
기존 개발한 알고리즘으로는 손가락의 포인터박스가 (크기 2pixel*30pixel) 박스를 가리킬 때 박스의 첫 세로줄 임계점을 통과하면 그 때의 문자를 읽어 문자로 변환했다.
하지만 박스의 끝을 나타낼 무언가가 없었고, 시작 후 매 프레임마다 박스를 캡쳐하여 수백개의 이미지가 반환되게 되었다.
이에 우리 팀은 frame의 복사본을 하나 더 만들어 그 복사본으로 작업을 하였고 복사본 frame은 모든 점을 mophology 연산 중 dilation 연산을 하여 팽창시켰다.
5배쯤으로 팽창시키게되며 문자를 담고있는 박스는 문자의 색으로 가득차게 된다.
이에 손가락의 포인터박스 (2*30크기) 는 흰색으로 초기화 시켜놓고 문자의 박스 안에 들어가게 되면 어느정도는 검정색으로 바뀌게 될 것이다.
바뀔 때 영상을 한 번 캡쳐하고 박스 전체가 흰색이 아니라면 캡쳐하지 않는 방식을 사용하여 박스 하나당 한번만 캡쳐하는 방식을 구현하였다.
이를 우리팀은 no whilte 알고리즘으로 명명하였다.
여담 :
지금보면 별거아닌것 같은데 그땐 왜그리 힘들었을까 모르겠다.
대회가 기말고사와도 겹치고 다른 대회랑도 겹쳐서 대회장에서도 기말고사 공부를 하고 팀원이 뿔뿔이 흩어져서 각자 다른 대회에 출전해 PT한 신기한 경험을 했다. 이 대회는 팀장없이 내가 PT했다. 팀장도 물론 상을 타왔다!
두번째 ESW 출전이여서 긴장을 덜했던 것도있고 발표때 질문들을 좀 예상해뒀었다. 대회의 이름답게 소프트웨어를 많이 물어보더라.
컴공친구를 끼워서 어플도 만들어놓으니 좀더 그럴듯해보였던 프로젝트였다. (추후 안드로이드도 배워보고싶어서 Kotlin을 공부하다 내 길이 아니라는것을 깨달음ㅋㅋ)
코엑스 밥맛은 여전하더라
끝!
'대학 활동' 카테고리의 다른 글
[대학활동] 2019 교내 캡스톤 대회 (0) | 2020.12.25 |
---|---|
[대학활동] 2019 공학페스티벌 E-festa (0) | 2020.12.25 |
[대학활동] 2019 Tech-Business camp (0) | 2020.12.25 |
[대학활동] 2018 교내 포트폴리오 경진대회 (0) | 2020.12.25 |
[대학활동] 2018 ESW (0) | 2020.12.25 |