u-ryo's blog

various information for coding...

Category: Keras

Python Basic Web Server for Applying Keras Model

| Comments

VGG16をfine tuningしたmodelを簡単にapply(predict)するsystemが NotePC程度で動くことを証明したく、 PythonのBaseHTTPServerで1日でちゃちゃっと作りました。

といっても「PythonのBaseHTTPServer」なんて触るの初めてです。 bradmontgomery/dummy-web-server.pyを参考にしました。 なるほど、classを定義して、BaseHTTPRequestHandlerを引数にして、 do_GETdo_POSTを書くわけですね。 routingは自分でやれと。面倒なのでmethodで分けました。 このsystem自体をone fileで済ませたかったので、 GETindex.htmlを返したいと思い、 そのためにはhere documentを書きたいな、 と思ったので、 Pythonのヒアドキュメントを参考に、 あぁ、普通に'''(single quote 3つ)でいいのね、とわかりました。 single quoteでも中で変数展開されるんですね。へー。 PythonでJSONを受けて処理をするを参考に、 POST時のparameter(=request body)の受け取り方を。 HTTP Request HeaderのContent-Lengthintとして記憶し、 self.rfile.read()でそのbyte分読んで、 decode()でstringにすると。 parameterizedされるわけではなく、bodyがまるっと読まれるので、 parameterで分けるのは自分でやれということですね。

あと、base64として来た文字列をdecodeしてImage化するには、 先頭のimage/jpeg;base64,を除去し(replace())て純粋にBase64文字列だけにし、 base64.b64decode(content)したものをio.BytesIO()し、 それをImage.open()すると。

predict()したものは2次元配列になっているので、 0番目のargmax()したものが答えの添字、なのですね。

ともあれ、このpython predict server script 1つと keras model fileの2 filesだけでサクッと動くものを、 githubに置きました。