개요

사물의 사이즈를 측정하는 앱 만들기

내용

규격화 된 물체(A4용지, 동전 등)의 사이즈를 이용하여 다른 물건의 사이즈 측정.

 

본래 구글 AR줄자 같은 앱을 만들려고 했지만 제 수준으로는 불가능한 일이었습니다...

결국 차선책으로 opencv를 사용하여 크기를 측정하는 python 코드를 안드로이드 앱과 연동하는 것을 선택했습니다.

(이는 팀 프로젝트이지만 모든 코드와 디자인을 제가 짰다고 보시면 됩니다.)

 

간략한 구조는 이렇습니다.

 

1. 파이썬 flask를 이용하여 만든 간단한 서버를 오픈한다.

2. 모바일 앱에서 조건에 맞는 사진을 서버로 전송한다.

3. opencv를 이용하여 사진에 있는 물건의 사이즈를 측정한다.

4. 측정된 사진을 서버에서 모바일 앱으로 전송한다.

 

opencv를 사용하여 물체의 크기를 측정 - 이곳의 오픈 소스를 사용했습니다.

https://www.pyimagesearch.com/2016/03/28/measuring-size-of-objects-in-an-image-with-opencv/

 

Measuring size of objects in an image with OpenCV - PyImageSearch

Today, I'll demonstrate how you can compute the size of objects in an image using OpenCV, Python, and computer vision + image processing techniques.

www.pyimagesearch.com

 

오픈소스를 19번 라인(ap = argparse.ArgumentParser())에서 118번 라인(cv2.waitKey(0))까지 함수로 만든 후

return하도록 변경했고, 추가로 flask를 사용하여 간단한 서버를 구현했습니다.

 

앱에서는 http통신을 위하여 RetrofitClient를 사용했으며 이것으로 서버에 접속했습니다.

 

자세한 코드는 다음 글에 소개하겠습니다.

 

성능

성능 자체는 좋았습니다. 사진의 각도에 따라 조금씩 다르지만 큰 오차를 보이지 않았습니다. 오차는 실제 크기에서 대략 ±3cm 수준입니다. 하지만 단점이 너무 명확하기 때문에 실제로 사용하기엔 힘들 것으로 보입니다.

 

단점

1. 먼저 규격화된 물건이 필요하다.

아래 before - after를 보면 창문 좌측에 검은색 A4용지가 붙어있음을 확인할 수 있습니다. 네, 바로 그것이 규격화된 물건입니다. 앞에 명시한 링크에서도 확인할 수 있듯 기본적으로 좌측 상단에 기준 물체가 있어야만 합니다. 또한 기준 물체의 사이즈를 알고 있어야 합니다.

 

이는 매우 치명적인 단점으로 앱이 가질 수 있는 편리함을 없앤다고 볼 수 있습니다.

 

2. flask를 사용한다는 것

flask를 사용했기 때문에 서버의 ip주소와 모바일에서 사용하는 네트워크의 ip주소가 일치해야만 합니다. 같은 네트워크(와이파이 등)에 접속한 상태가 아닌, 서로 다른 네트워크를 사용하고 있다면 모바일 앱은 서버에 접속할 수 없습니다.

 

이는 톰캣 등으로 서버를 새로 구현한다면 해결이 가능한 문제로 보입니다.

 

3. 이미지 인식 불안정

측정하려는 사진(이미지)가 어둡거나 선명하지 않다면 제대로 측정되지 않습니다. 실제 스마트폰에서 즉석으로 사진을 찍어 실험한 결과 사진이 조금 어둡거나 좌측 상단의 배경이 조금 다르다면 기준 물체를 잘못 인식하는 경우가 발생합니다.

어느 정도 완성된 모습

 

Splash
Allow
Main
Measure
before
after

 

+ Recent posts