YOLO 실시간 객체 감지를 지원하는 Flutter 구현입니다.
인공지능 모델을 이용하여 온디바이스 추론 프로젝트를 진행한 경험이 있습니다.
당시 Flutter 로 개발하기위해 여러가지 플러그인들을 테스트 했지만 실시간 추론을 지원하는 플러그인을 찾을 수 없었습니다.
해당 기능을 구현하기 위해서는 카메라 플러그인과 인공지능 추론 플러그인을 따로 설치 후 카메라 데이터를 가져와 다시 추론 플러그인을 거치는 방식을 사용하였습니다.
두 플러그인을 따로 사용하다보니 1회 추론시간이 1500 ~ 1600 ms 정도 걸리게 되었고, 실시간으로 사용하기에는 다소 무리가 있다고 판단해 결국 기존 AOS 네이티브로 개발된 코드를 리팩토링 하여 진행했었습니다.
프로젝트 종료 후 해당 문제를 해결하여 비슷한 문제를 겪고 있는 개발자들을 위해 플러그인 배포를 진행하였습니다.
기존 방식을 그림으로 표현하면 아래와 같습니다.
위의 프로세스에서 주목해야할 점은 2,3,6,7 화살표 입니다.
Flutter 에서 플러그인을 개발할 때는 Method Channel 을 이용해서 네이티브와 통신하게 되는 데, 통신 횟수가 많아질수록, 통신 데이터가 많아질수록 지연시간이 발생합니다.
사진의 3번 화살표를 통해 기기 해상도에 맞는 이미지 데이터가 Flutter 로 전송되고 6번 화살표를 통해 다시 한번 네이티브로 전송됩니다.
데이터 크기가 큰 이미지 데이터가 1회 추론에 대해 플랫폼 사이를 2번 움직이는 통신 오버헤드가 발생하여 평균 추론시간은 1500~1600 ms 정도가 걸리게 됩니다.
기존 방식을 개선하면 아래 사진과 같습니다.
위의 프로세스에서 카메라 데이터는 네이티브 내에서 직접 연산, 추론되며 네이티브 뷰를 따로 만들어 띄우는 방식으로 개발 했기 때문에 Flutter 로 직접 전송되지 않으므로 오버헤드가 크게 발생하지 않습니다.
결과적으로 추론시간은 1500-1600 ms 에서 200-300 ms 로 크게 개선할 수 있었습니다.
2024.05.03 기준 상위 28% 수의 개발자들(popularity 72%)이 사용하고 있으며 YOLOv5 를 지원합니다. https://pub.dev/packages/yolo_realtime_plugin