osamhack2022 / APP_FreshPlus_TakeCareMyRefrigerator

냉장고의 개인별 신선식품을 자동으로 관리해주는 AI 및 IoT 기반 앱 서비스입니다.
MIT License
5 stars 6 forks source link

AI camera design #28

Open Tim-Lee0001 opened 2 years ago

Tim-Lee0001 commented 2 years ago

AI 카메라를 설계하는 것과 관련하여 이슈를 오픈했습니다.

현재는 기본적으로 아두이노에서 문열림 감지 -> 블루투스로 정보 전송받은 휴대폰 공기계(카메라)가 사진촬영 -> 해당 모델을 로컬(카메라)에서 AI처리후 -> 결과만 FireBase로 업로드 하는 형식으로 진행하려고 합니다.

관련되어 의견 제시해주시면 좋겠습니다!

Tim-Lee0001 commented 2 years ago

예상되는 아두이노 회로도 첨부드립니다 image

Tim-Lee0001 commented 2 years ago

총 서비스에서 AI 카메라의 역할입니다. 참고 부탁드립니다.

image

hmc0105 commented 2 years ago

Object Detection Data 처리 구조

Object Detection 결과를 Firebase의 값이랑 어떻게 비교할 것인지도 고민을 해봐야 해서 로직을 정리해 두겠습니다. https://stackoverflow.com/questions/6091567/optimization-from-partial-solution-minimize-sum-of-distances-between-pairs 주어진 문제는 Bipartite graphs maximum-weight matchings Hungarian Algorithm... 에 대해서 공부를 해야할 것 같습니다.

  1. 사각형 정보와 물체의 종류가 무엇인지 전달받게 된다.
  2. List<LinkedList<Point>>로 종류별로 물건 List를 구성한다
  3. Firebase의 정보도 가져와 동일하게 구성한다.
  4. Hungarian Algorithm을 이용한다. >> 그냥 최소거리로
  5. 없어진 것에 대해서는 상태 변화를, 새로 생긴 것에 대해서는 미등록을 올린다.
hmc0105 commented 2 years ago

Hungarian Algorithm 못쓸 거 같고... 그냥 아이템 숫자 비교만 하도록 하겠습니다~

hmc0105 commented 2 years ago

ai.dart를 코드를 만들어 두었습니다. 안에 있는 method는 다음과 같습니다.

Future<HashMap<String,int>> detectionNumList(String path) async path에 image 파일의 위치를 보내주면, Return으로 아이템 이름을 key로, 갯수를 int로 돌려주는 Map이 돌려집니다.

Future<HashMap<String,int>> firebaseNumList(String unitID, String fridgeID) async firebase에 unitID와 fridgeID를 이용해 접근해, return으로 Map을 돌려줍니다.

List<int> calMargin(List<int> nameList, HashMap<String,int> detectList, HashMap<String,int> fireList) nameList의 순서에 맞게 detect 된 아이템 갯수 - DB에 있는 아이템 갯수를 계산해서 List로 돌려줍니다.

Future<void> updateState(String unitID, String fridgeID, List<String> nameList,List<int> margin)async firebase 아이템들의 상태를 업데이트합니다.