본문 바로가기
archive.tar

[Tensorflow] Python socket, Java Spring 을 사용한 이미지 추론 서버

by 냉동만두 2017. 7. 25.

개요 (2017.08.24 수정)


이미지 추론 스크립트를 가지고 뭘 해볼까 하다가, 이미지 처리 서버를 만들기 시작 했다.

파이썬 서버와 자바 클라이언트로 만들 생각이다. 클라이언트를 자바로 만들면 서블릿이나 안드로이드에 심기 편할 것 같다. (Spring 이식)

이미지 추론 모델은 imagenet 2012 challenge 2015-12-05 버전이다.

1000개의 사물을 구분할 수 있다.

Tensorflow Serving을 사용해 보려고 했지만 gRPC를 모르겠다.



장치와 운영체제에서 독립적인 클라이언트 환경을 위해 웹으로 방향을 잡았다.

웹 페이지에서 사진을 전송하면 경고창으로 추론 결과를 받게 된다.

데이터 학습 모델만 바꾸면 다른 사물을 추론 할 수 있다.


# Python Tornado 이미지 추론 서버

http://gusrb.tistory.com/55


시스템 구상도 (2017.08.24 수정)


사용자가 웹페이지에서 꽃 업로드(PC) & 촬영(Mobile)하면 WAS에서 Python 서버로 전송 되고 결과를 반환 한다.

Java Class로 만들어 놓아서 Spring으로 쉽게 이식이 가능했다.

이러한 구성으로 하면 기존의  Java웹 서비스나 애플리케이션에 이식을 쉽게 할 수 있다.

WAS와 Python Server가 독립적이기 때문에 서로 에러에 대해 영향을 주지 않는다.




진행 상황 (2017.09.01) : 시스템 시나리오 성공


자바 클라이언트에서 이미지 전송 전 파일의 크기를 보낸 후 파이썬 서버에서 받은 크기만큼 스트림 버퍼를 설정 한다.

그 다음 클라이언트에서 이미지를 보내면 서버에서 이미지를 받아 추론 후 레이블을 클라이언트로 리턴한다

클라이언트는 마지막으로 리턴 받은 레이블을 출력.

------------------------------

위 까지 성공 후 아주 간단하게 웹 페이지를 만들고 기존의 Java 이미지 전송 부분을 웹의 기능 일부로 이식했다.

결과는 내 생각대로 잘 동작 한다.

스마트폰에서 '파일 선택' 버튼을 클릭하면 바로 카메라 앱이 실행 되고, 촬영 후 전송 할 수 있다

----------------------------------

마지막 결과가 쓰여진 경고창 클릭 후 결과값으로 구글 검색 하는 페이지로 이동 한다


<사용자 웹 페이지.....>



<스마트폰으로 선풍기 촬영>


<결과 출력>


소스코드


https://github.com/pipy201/study/tree/master/python_java_image_server


고치고 싶은 사항, 한계점


* 디스크에 이미지 저장 안하고 바로 전달하기

클라이언트가 한번 추론 할 때 마다 이미지 파일을 읽고 쓴다. 디스크 I/O를 최대한 줄이고 싶다.


# 여기서 개선 버전 ~ Python Tornado 이미지 추론 서버

http://gusrb.tistory.com/55


* python socket 말고 flask django 를 써보고 싶다


* 약 30명의 클라이언트 요청에서 오류를 뿜었다.

was, python socket server는 살아 있으나 추론 부분에서 오류가 났다.

python 에서 이미지 파일을 전송 받고 디스크에 쓸때 파일 이름이 겹쳐서 아닌가 싶다...