본문 바로가기
캡스톤디자인

[23-1 세종대학교 캡스톤디자인] 시설 작물 병해 검출 및 분류 플랫폼 구축 : 5-7주차

by JongSeok 2023. 4. 19.

지난 주차

 

[23-1 세종대학교 캡스톤디자인] 시설 작물 병해 검출 및 분류 플랫폼 구축 : 3-4주차

지난 주차 [23-1 세종대학교 캡스톤디자인] 시설 작물 병해 검출 및 분류 플랫폼 구축 : 1-2주차 3월 1-2주차보다 포스팅이 늦었지만 앞으로 주차에 맞춰 작성해 보겠습니다. 이번 학기에 세종대학

develop-oj.tistory.com


5주차 - Use Case 작성

□ 시스템 개요

본 시스템 작물에 대한 지식이 깊지 않거나 정보를 얻기 힘든 직장인, 부부, 귀농인을 위한 인공지능 모델을 활용한 시설 작물 병해 진단 플랫폼이다. 전문가가 개입되지 않기 때문에 시간, 비용면에서 정확성, 신속성, 효율성 면에서 크게 개선될 것으로 기대한다. 전체 시스템에서 인공지능을 활용한 작물의 병해 진단, 농업인 커뮤니티, API 활용 병해 연관 정보 제공 등의 서비스를 이용할 수 있으며, 일부 기능의 경우 접근 권한과 회원 조건을 만족해야만 이용 가능한 기능이 존재한다. 해당 서비스는 안드로이드 앱(Play Store)을 통해 이용 가능하다.

 

□ Actor 목록

Actor 구분 설명
초보 농업인 시스템사용자 주말농장이나 집 옥상에서 작은 스마트팜을 운영 중인 소규모 농업인, 귀농 후 농사에 어려움이 많은 젊은 청년
DB DB 진단 결과를 저장하는 DataBase
WAS WAS 진단할 데이터를 AI 서버로 전달, 진단 결과를 클라이언트에 전달
인공지능 서버 및 모델 인공지능 서버 및 모델 WAS로부터 받은 이미지 데이터를 분류기에 넣어 분류한 뒤 진단 결과를 WAS에게 전달

Actor 다이어그램

 

6, 7주차 - 주요 기능 개발

□ 농업인 커뮤니티 UI 구성

화면 1

- 게시판 항목을 질문 / 노하우 분류

- 게시글 미리보기는 가능하나 게시글 상세정보는 회원가입 및 로그인 필요

- Server의 API 명세서가 작성되는 대로 API 연결 예정

 

□ 병해 검색 기능 구현

화면 2

- '병해 정보 검색' 연관 UI 구성

- 국가농작물병해충관리시스템(NCPMS) '병 검색', '병 상세정보' API 연결

- NCPMS 작물별 도감정보 데이터 크롤링

- 작물명 / 병해명에 따른 병해 상세정보 및 병해 이미지 제공

- 추후 병해와 관련된 농약정보 제공 예정 (https://psis.rda.go.kr/)

이슈

▶안드로이드에서 웹사이트 동적 데이터 크롤링 문제

안드로이드에서는 주로 Jsoup 라이브러리를 이용해 HTML 문서를 파싱합니다. 하지만 웹페이지가 동적으로 생성되는 경우 Jsoup으로 문서 크롤링이 불가능하다는 것을 확인했고 Selenium(셀레니움)을 흔히 사용한다고 합니다. 따라서 안드로이드는 셀레니움을 지원하지 않기 때문에 크롤링이 불가능했습니다.

→ 화면 2의 첫 번째 화면의 작물명은 동적으로 생성되지 않아 작물명만 크롤링하고, 작물의 대표 이미지는 수동으로 직접 추가했습니다.

 

▶Open API의 Response가 JSON이 아닌 XML로 반환

국가농작물병해충관리시스템의 Open API의 요청 결과로 XML 형식의 Response가 반환되는데 Kotlin의 data class로 변환하기 위해 XML 파일을 JSON 형식으로 변환할 필요가 있었습니다. 

→ XML 파일을 JSON 형식으로 파싱해주는 TikXmlConverterFactory 라이브러리를 활용했습니다. TikXml 객체를 RetrofitInstance에서 생성해 Retrofit.Builder() 과정에서 .addConverterFactory에 추가해 주는 것으로 간단하게 사용할 수 있습니다.

 

GitHub - Tickaroo/tikxml: Modern XML Parser for Android

Modern XML Parser for Android. Contribute to Tickaroo/tikxml development by creating an account on GitHub.

github.com

▶서버와 API 통신 방법 중 Mulipart 통신 사용

Retrofit 통신 중 기존처럼 @Body, @Path만을 이용하지 않고 서버로 이미지를 전달하는 과정에서 이미지를 File형으로 전달하기 위해 Retrofit @Mulipart을 사용했습니다.

 

Retrofit에서 Multipart 서버 통신 with Kotlin

Retrofit으로 서버와 이미지 통신하려면 어떻게 해야 할까?

velog.io

 

728x90
반응형