Blenderで初めてのアドオンを作るまで ~その2~
おはようございます。次男は寝る際は、その後はおむつにして寝かしてます。一度は成功したものの、その後、朝起きると、おむつにしっかりおしっこを出してます。長男の際も、しばらくはかかったので、気長に構えてます。@kjunichiです。
背景
第3回:3月26日(日)Blender勉強会(UE4よちよち勉強会_スピンオフ)@HDE(渋谷) : ATNDというBlenderの勉強会に参加。
当日作ったコードをプラグイン化して、レンダリング画像をPOSTしてTensorflowで画像分類するサンプルを Webサービス化したURLに投げ、結果を表示するという一連の処理を実現しようとしている。
Blenderに入っているPythonで画像をPOSTする
前回の記事でレンダリングした画像をJPEG形式で取得することが出来るようになった
また、「Tensorflowのclassify_image.pyをWebアプリ化した」の記事で画像をPOSTすれば、Tensorflow(classify_image.py)の処理結果を返すWebサービスの実装も完了している。
という事で、今回は、Blenderからレンダリングした画像をこのWebサービスにPOSTしてみる。
import bpy import urllib.request import os imagepath=os.path.abspath("/tmp/kjunichi.jpg") bpy.data.scenes["Scene"].render.filepath = imagepath bpy.data.scenes["Scene"].render.image_settings.file_format='JPEG' bpy.ops.render.render( write_still=True ) with open(imagepath,"rb") as f: image=f.read() target_url = "http://localhost:8000" request = urllib.request.Request(target_url, data=image, method="POST") with urllib.request.urlopen(request) as response: response_body = response.read() #.decode("utf-8") print(response_body)
動作画面
今後の課題
関連記事
- Blenderで初めてのアドオンを作るまで ~その1~
- BlenderでPython使って最速降下曲線を描いてみる
- OSXのBlenderでctypesを試した
- BlenderでエクスポートしたJSONがThree.jsで変な色になる問題が解決
- 第3回:3月26日(日)Blender勉強会(UE4よちよち勉強会_スピンオフ)@HDE(渋谷)に行ってきた
- 過去4月にブログ記事が無かった日を挙げる
2年後の記事
シェルスクリプトのかわりにPythonでマルチプラットフォームで動かそうとして学んだこと
おはようございます。長男は最近どんどん手がかからずお兄さんになってきてくれてますが、爪を噛む癖が治りません。長男の爪を切った記憶がないです。この癖が心配な@kjunichiです。
背景
シェルスクリプトだとWindows環境で動かせないからPythonベースでgit cloneして 特定のハッシュのコミットを取出し、ファイルにあらかじめ用意してあるパッチを当てるという 一連の処理をやってみた。
以下の内容は、Python3をターゲットにしている。
Python3以降での外部コマンドの実行
まぁ、たいていのスクリプト言語では外部コマンドの実行をサポートしているはずと、調べて、 Python3系では
import subprocess subprocess.call(["git","clone","https://github.com/tensorflow/models.git"])
といった感じで出来ることが分かりました。過去にはosモジュールを使った方法だったようですが、このsubprocessモジュールを使うのはこちらの
のコメント欄で知りました。
躓いたところ
cpコマンドがWindowsにはない
Windows上ではgit cloneして、VS Codeでファイルを編集することが大半で、 たまに家族の写真をコピーしたりといった操作は、エクスプローラーで行っていた為、 cpコマンドが無いことをすっかり忘れていた。
対応内容
shutilモジュールのcopyfileを使うと実現できる。
import shutil src_path = os.path.abspath("models/tutorials/image/imagenet/classify_image.py") dest_path = os.path.abspath("./classify_image_web.py") shutil.copyfile(src_path, dest_path)
Pythonでの実装のため、os.path.abspathにより、Windowsのパスも/で記述でき、 おかげで、Windows用のパスの表記を別に記述することなく、スマートに実現できました。
WindowsのpatchコマンドはCR+LFを期待している
WindowsでPatchコマンドがエラーになる
前提として、chocolateyでpatchコマンドをインストールしている。
これはPythonには関係ないが、非Windows系のプラットフォームで作製して、 動作確認して、Windowsにいざ持ってきてハマりそうなところだと思うので 挙げた。
Windows版のpatchコマンドは改行コードをCR+LFを要求している。 しかし、非Windowsな環境で作製したpatchファイルは当然のLFのみの 改行となっている。
この為、非Windows環境で作ったpatchファイルをそのままWindows環境に持ってくると エラーとなり、patchが適用できない。
バイナリーオプションをpatchコマンドに適用することでこれを回避できた。
subprocess.call(["patch", "--binary","-u", "classify_image_web.py", "patch"])
関連記事
chocolateyでインストールしたあとの話
おはようございます。次男が夜も普通のパンツで寝れるように、おむつにおしっこを漏らさないように訓練中の@kjunichiです。
chocolateyで入れたモノたちを更新する
choco upgrade all -y
一発ではダメでした。
一部、オプションをつけて入れたパッケージは再度オプションを指定してアップグレードする 必要がある模様。
choco upgrade openssh -params "/SSHServerFeature /SSHServerPort:20022"
さらに
Inkscapeはいったんアンインストールして入れる必要があった。
choco uninstall inkscape choco install inkscape -y
何を入れたか忘れた場合
以下のコマンドで、Chocolateyで何を入れていたかを調べることができる。
choco list -lo
関連記事
- 久しぶりに自作PCをリニューアルした
- ChocolateyでImageMagickをヘッダ、Libファイルとレガシーコマンドも一緒に入れるには
- InkscapeをmacOSでビルドして動かせなかったが学べたこと