최근 어린이 보호구역 내 교통안전을 강화하는 일명 ‘민식이법’ 시행과 함께 어린이 교통 안전에 대한 사회적 관심이 높아지면서 어린이 보호구역 내에서 운전자의 각별한 주의가 필요해졌다. 이에 대해 본 프로젝트에서는 SSD (Single Shot MultiBox Detector)를 이용하여 어린이 보호구역과 보행자를 인식하는 딥러닝 모델을 개발한다.
##준비 사항
###데이터셋 준비
1) annotation은 labelImg 툴을 사용해 xml 생성
2) ./data/images/train에 학습 데이터 저장
3) ./data/images/test에 테스트 데이터 저장
4) ./code/txt_to_csv.ipynb으로 "Penn-Fudan Database for Pedestrian Detection and Segmentation"의 annotation txt파일을 csv로 변환
5) ./code/object_detection.ipynb에서 xml->csv->tfrecord로 변환해 학습에 사용
선택) ./code/augmentation.ipynb으로 데이터셋 부풀리기
###학습
./code/object_detection.ipynb를 순서대로 따라서 실행 (tfrecord 변환, pretrained model 설치, 학습, tflite 변환, 테스트 단계 포함)
###안드로이드
Android studio 먼저 설치,API 21이 최소인 android 디바이스 및 android 개발환경 ,Android Studio 3.2 이상인 환경 필요
Android에서 Tensorflow lite를 사용하기 위해서는 build.gradle dependencies에 “compile‘org.tensorflow:tensorflow-lite:+’”. 라이브러리를 추가
Android-tensorflow lite에서는 object detection을 하기 위해 ./code/object_detection.ipynb로 양자화된 tfilte 모델과 라벨링된 txt파일을 android/app/src/main/assets 폴더에 저장
DetectorActivity.java에서 TF_OD_API_MODEL_FILE, TF_OD_API_LABELS_FILE를 학습한 모델에 맞게 변경, Camera2 API를 사용하여 장치의 후면카메라 사용
카메라의 화면을 보여주는 TextureView와 카메라의 기능을 하는 Preview를 통해 카메라 구현, CameraActivity.java에서 이미지 탐색, DetectorActivity.java에서 인터페이스 설정 및 이미지 처리 수행