Tumgik
katumi-umikaze · 4 years
Text
引っ越します
引っ越し先
https://katsumi3.hatenablog.com/
Blender 2.8になったり他にも日本語の素晴らしい講座サイトが沢山出来たのでメモとらなくてもいいかなと。あと自分の中の2次創作する情熱が薄れてしまってそんなに作らなくなってしまいました。
3dcgだと作るの遅いしTwitterとかリアルタイム実況についていけなくなってしんどかったです。
丸っと引っ越せないので中身はこのままにしときます。
0 notes
katumi-umikaze · 4 years
Text
eevee基本設定
とりあえず年賀状を作るために畳を作った。
blender2.8系の操作がさっぱりわからないので講座動画見ながら操作を覚えたんだけど、日本語の講座動画増えててびっくりした。youtuber的なアレなんだろうか???
eeveeでレンダリングしてみたけどcyclesと違いがよく分からない。
↓eevee
Tumblr media
↓cycles
Tumblr media
モンキーの周りにもやっぽいものが出てるのがeevee。
なんとなく雰囲気あるような気がする。
eevee設定は以下にチェックを入れておけばいい感じにレンダリングできるらしい
・アンビエントオクルージョン
・ブルーム
・スクリーンスペース反射
ブルームで光る部分にモヤが出る
Tumblr media
cyclesでモヤを出したい場合はコンポジットにグレアを追加するとよい。
eeveeでも使用可能。
Tumblr media
0 notes
katumi-umikaze · 5 years
Text
blender bpyでデーターにアクセスする方法
二年ぐらい何もしてなかったので色々忘れてるっぽい...というか忘れてる。
アクティブなオブジェクトからデータを取得するにはbpy.context.objectなにがしとする。
例:オブジェクトのx方向の寸法を取得
bpy.context.object.dimensions[0]
で値がとれる。
dimensions[0]という部分が分からなければ欲しいデータの上にマウスカーソルを持って来ておけば
Tumblr media
さらに右クリックで出てきた「データパスをコピー」を選択するとクリップボードにdimensionsという部分が出てくるのですごく楽
Tumblr media
0 notes
katumi-umikaze · 5 years
Text
Windows10で動画を回転させたい(無料で)
ライブ配信動画をダウンロードしたら90度回転させないと見れなかった。
検索すると無料に見せかけた有料動画編集ソフト紹介ばかり出てきてすんげー面倒なのでメモ書きしておく。
ファイルが.tsの場合
1.iWisoft free video converterで一度MP4に変換する
2.変換したMP4をwindows10標準のフォトかmovie maker(今は配布されてない)で回転させて保存する。 すこし古いPCなら運よくmovie makerがインストールさせてるかもしれないが無くてもフォトで出来る。
以下手順
mp4は「MPEG-4 Movie(*.MP4)」で変換する。 (紛らわしいが「MPEG-4(MC) movie(*.MP4)」以外を選ばないと黒い帯がついてmovie makerでは編集できなくなる)
Tumblr media
movie makerの場合
MP4ファイルを起動したmovie makerにドラッグ&ドロップして回転して「ムービーの保存」のところで「この...の推奨設定」にして保存。 面倒なことは特にない。
フォトの場合
スタートからフォトを起動しビデオプロジェクトをクリックする
(紛らわしいが画像や動画からはできない様子?なので必ずフォトを起動)
Tumblr media
新しいビデオプロジェクトをクリックする
Tumblr media
適当に名前付けて(いろいろ編集せず回転させるだけなのでそのままでも)OKをクリックする。
Tumblr media
追加をクリックして回転させたいMP4を選ぶ。
Tumblr media
読み込んだMP4にチェックが入ってるのを確認後「ストーリーボードに配置」をクリックする
Tumblr media
回転のマークをクリックする
Tumblr media
プレビューがちっちゃい画面になった場合は回転の隣の四角→黒いバーの削除を選択する(この機能はmovie makerにはないのでフォトのほう使った方が良いかも)
Tumblr media Tumblr media
プレビューの下の動画の長さを確認。動画変換途中で異常に再生時間が長くなってることがある。その場合はトリミングで調整する。
Tumblr media
左上の「ビデオの完了」をクリックする
Tumblr media
ビデオの画質を選んでエクスポートをクリックする。
Tumblr media
保存場所を決めて名前を付けてエクスポートをクリックする。
Tumblr media
しばし待てば回転したファイルが指定した場所にできる。
フォトのビデオプロジェクトが自動保存されてるので後で削除しておくと良い。
0 notes
katumi-umikaze · 6 years
Text
交点を求めたい
blenderをcad的に使いたくて交点、延長線とか色々やりたい。
Tumblr media
使い方をよく忘れるがtinyCADというadd-onをインストール後
編集モード→交点を求めたい辺を二つ選択→wキー→tinyCAD→好きなの選ぶ
Tumblr media
0 notes
katumi-umikaze · 6 years
Text
厚塗り風味を作るのが楽しい。
Tumblr media
blender2.79使用。
何とも言えない良い色が出た記念撮影。レンダリング後の加工一切なし。
スーツは微妙に色の交じり合ったいい色になったし、特にシャツの襟の色の影など自分好みの厚塗りテイストに出来た。かっこいい。
時を忘れてマテリアルをいじって調節していたが、blender2.8にはblenderレンダーが無いのがつらい。目のテカリはハロを使ったのだけどこれもなくなるのか・・。
blenderレンダーの再現に挑戦している人々もいるようだし、自力でシェーダーを作ろうとしている人もいるようだ。
海外勢(?)は早々にeeveeでアニメ調のノードを組んで配布している様子だった。さらっと動画は見るだけは見たのだけど、今のところBlender NPRさんが一度サイトを撤退した(事情はわからないが戻ってきていた)事や、blenderレンダーが無くなってしまう事にショックでちょっとやる気が出ない。
あと、今のところどうしても2.8でレンダリングしなければならない取り急ぎの事情もない。
0 notes
katumi-umikaze · 6 years
Text
マテリアルインデックスが適用されない場合
ノードエディタでオブジェクトインデックスを使ってマスクをかけているはずなのに、一向にマスクされない場合。
以下、通常の場合の手順確認。
レンダーレイヤータブのパスオブジェクトインデックスかマテリアルインデックス使いたい方にレ点をつける
Tumblr media
オブジェクトインデックスを使う場合
オブジェクトタブの関係のパスインデックスに好きな番号を入力。一度レンダリングする(レンダリングしないとノードに反映されないので要注意)
Tumblr media
マテリアルインデックスを使う場合
マテリアルタブでマスクしたいマテリアルを選び、オプションのパスインデックスに好きな番号を入力し一度レンダリングする。
Tumblr media
indexMAにIDマスク(先ほど使用したのと同じ番号をつける)をつなげる
Tumblr media
通常だとこれでマテリアルインデックスでマスクできるはずなんだけど、何らかの事情で(原因不明)でマスクできない場合がある。
その場合はマテリアルタブの透過にレ点を入れるとマスクできるようになる。
Tumblr media
1 note · View note
katumi-umikaze · 6 years
Text
自作モデルはいつ見てもカッコいい。
はい、かっこいいハイカッコいい。
Tumblr media
しゅんけさん配布のNodeLines(blenderのノード)を使うとイカす白黒画像ができます。
本来は線画を作る用のノードですが、いろいろノードを繋ぎ変えると面白いです。
ひたすら自作モデルをぐるぐる回しては、はいかっこいいはいかっこいいというだけの作業になります。
ノードエディタで以下のようにつなぐと大変にかっこええ画像ができます。
Tumblr media
値を変えても面白い。はい、かっこいいかっこいい。
Tumblr media
通常でもレンダリングやマテリアル設定にして自作モデルをぐるぐる回しては見て楽しんでるんですが、コンポジットだとそういうことができないので非常に残念。
1 note · View note
katumi-umikaze · 6 years
Text
blenderにopencvの代わりにscikit-image入れた
blenderにopenCVインストールしてみたもののimport cv2で落ちるという悲しい事件が起きたので代わりにscikit-image入れてみた。
インストール方法は基本的にはblenderで��める画像処理にある通りpipをインストールしてblenderのインストールしてある場所のpythonフォルダーにインストールという流れ。
scikit-image公式サイトからwindows用の
scikit_image-0.13.1-cp35-cp35m-win_amd64.whlをダウンロードし(ここではc:\tmpに置いた)そのまんまファイル名入れてpipなにがしを実行した。
Scripts\pip.exe install c:\tmp\scikit_image-0.13.1-cp35-cp35m-win_amd64.whl
blenderでimport skeimageすると要求されるのでそれもあらかじめインストールして置くこと(ただしmatplotlibは動かなかった)
Scripts\pip.exe install scipy Scripts\pip.exe install matplotlib
で、blenderがProgram Filesにインストールされてる場合は管理者権限でコマンドプロンプトに入っとかなきゃいけない。
前回の通りにscikit-imageをコマンドプロンプトでインストールした後の流れについて、書いておこう。
今回も細線化してみる
細線化前の画像
Tumblr media
レンダーレイヤーにソーベルとカラーランプを繋いで作った単純な線画
(カラーランプで二値化しておかないと真っ黒に変換されてしまう)
Tumblr media
画像をいったん保存する(例によってこのサイトの”などは全角で表示されてしまうので要修正)
画像の名前から画像データ取得
blimg = bpy.data.images['sikaku']
Tumblr media
いったん保存
bpy.context.scene.render.image_settings.file_format = 'PNG' bpy.context.scene.render.image_settings.color_mode = 'RGBA' blimg.save_render(’c:/tmp/sikaku.png’)
保存したファイルを開く
from skimage import io img = io.imread(’c:/tmp/sikaku.png’)
RGBからグレースケールにする
import skimage.color gimg = skimage.color.rgb2gray(img)
細線化
from skimage.morphology import skeletonize, skeletonize_3d skeleton = skeletonize(gimg)
注意:img.show()とかするとblender落ちる!!
画像の色の取り方が違うのでこのまま保存すると黒が紫色になってしまうので直す。 (詳しくはhttp://scikit-image.org/docs/dev/user_guide/data_types.html(英語))
from skimage import img_as_ubyte ub = img_as_ubyte(skeleton)
scikitで保存する場合 io.imsave("c:/tmp/saisen.png",ub)
PILで保存(matplotlibがimportできないため)
pilImg = Image.fromarray(numpy.uint8(ub)) pilImg.save("c:/tmp/saisen.png")
saisenimg = bpy.data.images.load('c:/tmp/pil_saisen.png') saisenimg.name = 'saisen'
↓1ピクセルの線画がblenderに表示される。
Tumblr media
まとめ
・matplotlibで途中経過を気軽に見れないのはつらい ・ほかにも面白そうな機能いっぱいあるお(^_-)-☆ ・画像をいったん保存してどうのこうのといじるなら別にblenderでやらんでもいいのでわ(^^;)
import bpy from skimage.morphology import skeletonize #matplotlibはインポートできなかった。 #import matplotlib.pyplot as plt from skimage.util import invert from skimage import io from PIL import Image import skimage.color import numpy from skimage import img_as_ubyte
blimg = bpy.data.images['sikaku'] bpy.context.scene.render.image_settings.file_format = 'PNG' bpy.context.scene.render.image_settings.color_mode = 'RGBA' blimg.save_render('c:/tmp/sikaku.png')
img = io.imread('C:/tmp/sikaku.png') #反転する時はinvertを使う #img=invert(img) gimg = skimage.color.rgb2gray(img) skeleton = skeletonize(gimg) ub = img_as_ubyte(skeleton)
#scikitで保存する場合 io.imsave("c:/tmp/saisen.png",ub)
#pilで保存する場合 pilImg = Image.fromarray(numpy.uint8(ub)) pilImg.save('c:/tmp/saisen.png') saisenimg = bpy.data.images.load('c:/tmp/pil_saisen.png') saisenimg.name = 'saisen'
0 notes
katumi-umikaze · 6 years
Text
Blenderにopencv入れたら落ちた
blenderへのopencvとpiloowのインストール(opencvは失敗したのでscikit-imageいれた)してみた記録
windows 10 blender2.79 blender内のpython3.53
pillow blenderで始める画像処理 にある通りだけど、blenderをProgram Filesにインストールしている場合はコマンドプロンプトを管理者権限で開いてインストールを行わないとエラー出る。
opencv この場合は
「Could not find a version that satisfies the requirement opencv (from versions: ) No matching distribution found for opencv」
コマンドを
Scripts\pip.exe install opencv_pythonに変えたら
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: 'c:\\program files\\blender foundation\\blender\\2.79\\python\\Lib\\site-packages\\numpy\\core\\multiarray.cp35-win_amd64.pyd' Consider using the `--user` option or check the permissions.
とエラー出たのでメッセージの通り--userを付け加えて
Scripts\pip.exe install opencv_python --user
とやったらインストール成功した
・・・がblender側でimport cv2したらblender落ちた。
(このときインストールされたのはnumpy-1.14.3 opencv-python-3.4.0.12の様子)
blender側で
import sys sys.path.append(”C:\Program Files\Blender Foundation\Blender\2.79\python\lib\site-packages\cv2“) import cv2
やってみても落ちた、悲しい。
代わりにscikit-imageをインストールしてみた。
公式サイトからwindows用の
scikit_image-0.13.1-cp35-cp35m-win_amd64.whlをダウンロードし(ここではc:\tmpに置いた)そのまんまファイル名入れてpipなにがしを実行した。
Scripts\pip.exe install c:\tmp\scikit_image-0.13.1-cp35-cp35m-win_amd64.whl
blenderでimport skeimageすると要求されるのでそれもあらかじめインストールして置くこと(ただしmatplotlibは動かなかった)
Scripts\pip.exe install scipy Scripts\pip.exe install matplotlib
長くなったのでscikit-imageの件はまた次に書く
0 notes
katumi-umikaze · 6 years
Text
未来への警告
っていう感じのエラー出た。
治したいけど、なんかとりあえず動いてるからいいや、で放置しまくりなのでメモしとく。
FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.  from ._conv import register_converters as _register_converters
0 notes
katumi-umikaze · 6 years
Text
chainerでエラーが出たときに助かったサイト
「お前の血は何色だ」っていう名前のブログなんだけど、とにかく「このエラー訳わからん、しむぅ~」って時に超助かった。ほんとエラーがでてるときはこのブログの名前みたいな気持ちになる(でもエラーが出るのは自分のせいなのであるので・・・orz)
エラーの文章全文が書いてあってその内容についても書いてあって超助かった(二度目)。
先人の苦労に感謝である・・・。
お前の血は何色だ!! 4
http://d.hatena.ne.jp/rti7743/20170105/1483602327
0 notes
katumi-umikaze · 6 years
Text
画像の余白づけ
from PIL import Image img = image.open(000.jpg) w,h =img.size yohaku_h = 10 yohaku_w = 50 yohaku = Image.new("RGB", (w+yohaku_w*2,h+yohaku_h*2),(255,255,255)) imc = img.crop() yohaku.paste(imc,(yohaku_w,yohaku_h)) yohaku.show()
0 notes
katumi-umikaze · 6 years
Text
google Colaboratory を使ってみた
前回の続き
chainer 4も使えるようで、Ubuntuって何?レベルでも基本のコマンドは「!」マークをコマンドプロンプトで使うコマンドの頭につければいいみたいで、windowsしかわかんねーよ状態の自分でも大丈夫だった。
先人の知恵でgoogleドライブから普通にファイル呼びだせるコマンドもあってなんとかエラーを乗り越えpix2pixを動かすことができた。
途中細かくサムネイルみたいなのとりすぎてgoogleドライブ保存上限15GBに到達してしまった。
でも途中まで保存されてたsnapshotモデルを使って画像を変換することができてほっとした。
学習済みモデル(600MB)を読み込んでCPUで変換すると20秒ぐらいかかった・・・20秒は遅いと思う。
どこかで何かしくじっているのでは?と経過時間を見てみた
dec = Decoder(out_ch=3)の直後で3秒 (net.pyのDecoderを呼び出しているところ)と
if os.path.exists(codri+'generate_tmp'):     shutil.rmtree(codri+'generate_tmp')
の部分で5秒かかっている。
なんかgoogleドライブ関係あるのか??? わからんけど、とりあえず自分PCでCPU変換をやってみたところ7秒で全部終わってしまった。(後で初回起動時は14秒かかった事が分かった)
Tumblr media
ifのところも一秒もかからずに終わってる。 (しかしすでに2秒近く時間が経過している(-_-;))
Tumblr media
あとはnpzを呼び出すところで4秒かかってる。
chainer.serializers.load_npz(args.model, trainer)
どちらにしても256×256の画像を一枚変換するだけで7秒というのも、ちと遅い・・・・。ただ、遅い部分がnpz(学習済みモデル)のロードとdecoderなら沢山のファイルをまとめて処理する場合なら一回づつ呼び出して終わりで問題ないような気がする。次に試してみたい。
あと小さい画像だと色々面倒すぎて大きい画像でやってみたい。
0 notes
katumi-umikaze · 6 years
Text
ブロードキャストエラー
頻発するブロードキャストエラーについて。
親切にも何が悪いのか内容を教えてくれるエラー
ValueError: could not broadcast input array from shape (256,3,256) into shape (3,256,256)
shape(256,3,256) からshape(3,256,256) に入力配列をブロードキャストできませんでしたよっていう事で
ブロードキャストは大きさの違う配列同士の計算をしてくれるんだけど、その時の配列の大きさが合いませんよっていう意味。(詳しくはわかってない)
とりあえず、ここでは大きさを合わせれば解決する時の場合のメモ。
まずshapeとは配列に入っているモノの数。
例えば(一次元配列)
import numpy as np a = np.array([1,2,3]) a.shape
とすると出力(配列aのshape)は(3,)になる。 次元数は
a.ndim
で、表されこのaの次元数は1となる()
Tumblr media
a = np.array([[1,2],[3,4,5],[6,7,8,9]]) a.shape
も出力は(3,)になる。次元数は1。
Tumblr media
二次元配列だと
a = np.array([[1,2],[3,4],[5,6]]) a.shape
だと(3, 2)になり
Tumblr media
奥行きのある箱に。
3次元配列になると
a = np.array([[[1,2,3,4],[5,6,7,8]],[[9,10,11,12],[13,14,15,16]],[[17,18,19,20],[21,22,23,24]]]) a.shape だと(3, 2, 4)になる。
Tumblr media
三階建てですね。
もう一度エラーを見ると
ValueError: could not broadcast input array from shape (256,3,256) into shape (3,256,256)
つまり256階建て3部屋265小部屋に3階建て256部屋256小部屋に入りませんよ、建物の形が違うよって感じ。
これを合わせてあげるにはさっきのshapeが(3, 2, 4)の配列を
a = np.array([[[1,2,3,4],[5,6,7,8]],[[9,10,11,12],[13,14,15,16]],[[17,18,19,20],[21,22,23,24]]]) a=a.transpose((2,0,1)) a.shape
出力は(4,3,2)になり
aは以下の形になる
array([[[ 1,  5],        [ 9, 13],        [17, 21]],
      [[ 2,  6],        [10, 14],        [18, 22]],
      [[ 3,  7],        [11, 15],        [19, 23]],
      [[ 4,  8],        [12, 16],        [20, 24]]])
4階建て、2部屋、3小部屋ですかね。
0 notes
katumi-umikaze · 6 years
Text
chainerのpix2pixを動かしてみた。
前回の続き。
とにかくまずは自分の環境で動くのかどうかを確認したい。結論としてgpuで動かなかった。cpuのみ。
windows 10 home python3.6(非anaconda) chainer 3.5(python 4.0.0でもcpuのみなら動いた)
\chainer-pix2pix-master\facade\baseに入力画像教師画像を4枚づつcmpの画像を入れる
Tumblr media
train_facade.pyの70行辺りに画像を何枚使うか指定するところ(data_range=(1,300))があるので以下に書き換える
   train_d = FacadeDataset(args.dataset, data_range=(1,3))    test_d = FacadeDataset(args.dataset, data_range=(3,5))
train_dにcmp_b0001と0002のペア、test_dに0003と0004のペアが入る。
50行辺りのin_chの値を3にする
Tumblr media
scipyをインストールしてtrain_facade.pyをGPUで実行。
python train_facade.py -g 0 -i ./facade/base --out result_facade --snapshot_interval 10000
はいエラーです、もうやだー!!アウトオブメモリーとか悲しい事言うなよぉ...orz
cupy.cuda.memory.OutOfMemoryError: out of memory to allocate 33554432 bytes (total 426982400 bytes)
gpuなし(cpuのみ)
動くがエラーあり・・・。
C:\Users\ユーザー名\AppData\Local\Programs\Python\Python36\lib\site-packages\chainer\functions\normalization\batch_normalization.py:65: UserWarning: A batch with no more than one sample has been given to F.batch_normalization. F.batch_normalization will always output a zero tensor for such batches. This could be caused by incorrect configuration in your code (such as running evaluation while chainer.config.train=True), but could also happen in the last batch of training if non-repeating iterator is used.
翻訳########################## UserWarning: batch_normalization には、複数のサンプルがないバッチが与えられています。batch_normalization は、このようなバッチに対して常にゼロテンソルを出力します。これは、コード内の不適切な構成 (チェーンの実行中の評価など) が原因で発生する可能性がありますが、繰り返し反復子が使用されていない場合は、トレーニングの最後のバッチでも発生する可能性があります。
###############################
わからん。
が動いてるのでせめてまともに動いてるか確認したい・・・。
画像が4セットと少なすぎて途中経過が出力されないまま終わってしまう。
cpuのみで--snapshot_interval を10で実行
エラー出るので
facade_visualizer.pyの20行辺りのin_chを3にする。
Tumblr media
それから
in_all[it,:] = x_in.data.get()[0,:]
でnumpyにgetなんてもの無いよ的なエラー出るのであきらめてgetを外す。
Tumblr media
というのも、検索したところ、gpuからどうのこうのとあって・・・そもそもGPU使ってないから必要ないんじゃないかと・・・
するとなんか動き出した。
--outで指定したフォルダが自動で作られてこの中のプレビューに画像がちょっとづつ増えていく・・・。いや、ほんとうれしい。
Tumblr media Tumblr media Tumblr media
ただ、4ペアの画像で1時間15分となると40ペアで12時間半、400ペアで125時間・・・4日か・・・んんんまぁ、まだ現実的な時間かなぁ(汗)
自前のグラボ(弱)使っても2倍までしかスピードあがらんでぇ・・・
次回(その後、google colaboratory 使ってみた)に続く
0 notes
katumi-umikaze · 6 years
Text
必要なデータセットは何か?
ものすごい思い込みのもと自力でデータセットを作ってみたらエラーが無くならんので元のhttps://github.com/pfnet-research/chainer-pix2pixのデータセット(facade_dataset.py)の中身で何やってるかお勉強メモ(2018年4月23日)
readmeに書いてある通りなんだけど、自分めも追加・・・
自前でデータセット作るには256×256のサイズnumpyarryで作ったfloat型の入力画像とint型の教師画像の中身をチャネル、高さ、横幅に並び替えてあるものがget_exampleで呼び出せればいいみたい。
自分で画像だけを用意してあとはそっくりそのまま元のスクリプト使うにはカラーで入力画像をjpg、教師画像をpngにして同じ名前と同じ縦横比にして/facade/baseっていうフォルダー作ってその中に380枚づつ入れとけばいいのではではと思い画像をcmpのbaseから4枚づつ持ってきてやってみた。(train_facade.pyの70行目を要修正)
scipyが無いよ的なエラーが出るので公式に書いてある通りのコマンドでインストール。
python -m pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose
train_facade.py実行したらCPU、GPUともにエラーが出た(詳細は次回)。
勘違いしてたが写真(jpg)のほうがimgで色で塗り分けてある方(png)がlabelだった。
Tumblr media
画像をまとめて加工したい場合はget_exampleでやってしまった方がいいらしい。
train_facade.pyの70行目で300枚づつのデータセットを呼び出す。 train_dが学習用でtest_dが評価用(80枚)だろうなぁ。
   train_d = FacadeDataset(args.dataset, data_range=(1,300))    test_d = FacadeDataset(args.dataset, data_range=(300,379))
しかし、gpuがへなちょこなのでchainerv4のcpuでばりばり動かせるというやつも試してはみたいんだが・・・・環境つくるのめんどい、失敗したらまた動かんようになるのかふあ-ん。
##################################
#facade_dataset.py import os
import numpy from PIL import Image import six
import numpy as np
from io import BytesIO import os import pickle import json import numpy as np
import skimage.io as io
from chainer.dataset import dataset_mixin# #以下のアドレスからBASEデーターセットをダウンロードする # download `BASE` dataset from http://cmp.felk.cvut.cz/~tylecr1/facade/
class FacadeDataset(dataset_mixin.DatasetMixin):    def __init__(self, dataDir='./facade/base', data_range=(1,300)):   #dataDirのフォルダーから300回画像セットを取り出す        print("load dataset start")        print("    from: %s"%dataDir)        print("    range: [%d, %d)"%(data_range[0], data_range[1]))        self.dataDir = dataDir        self.dataset = []        for i in range(data_range[0],data_range[1]):    #imgが入力画像(jpg)、labelが教師画像(png)    #ダウンロードしたデータセットの中身が    #もともと同じ名前でjpgとpngに分けてある            img = Image.open(dataDir+"/cmp_b%04d.jpg"%i)            label = Image.open(dataDir+"/cmp_b%04d.png"%i)            w,h = img.size            r = 286 / float(min(w,h))    #min(w、h)・・・wとhの小さいほうの値をとる    #wとhで小さいほうの辺が286で縦横比は変わらないように画像のサイズを変更する
           # resize images so that min(w, h) == 286    #バイリニア補間で入力画像をリサイズ            img = img.resize((int(r*w), int(r*h)), Image.BILINEAR)    #ニアレストネイバー(色数を増やしたくない時に使用)で    #教師画像をリサイズ            label = label.resize((int(r*w), int(r*h)), Image.NEAREST)
           #画像をnumpyに入れる    #pil用(高さ、横幅、チャンネル)から    #chainer用(チャネル、高さ、横幅)にデーターを入れ替える         #transpose(2,0,1)・・・データの縦と横を入れ替える    #astype("f")・・・フロート型(入力画像はフロート型でなければならない)    #/128.0/-1.0・・・値を0~1にしなければならないが256じゃなくてなんで128で割るのかわからない、マイナス1は反転???    img = np.asarray(img).astype("f").transpose(2,0,1)/128.0-1.0            label_ = np.asarray(label)-1  # [0, 12)    #numpy.zeros・・・0を要素とする配列を生成する    #astype("i")・・・教師画像はint型でなければならない            label = np.zeros((12, img.shape[1], img.shape[2])).astype("i")            for j in range(12):                label[j,:] = label_==j    #入力と教師画像を一緒にデーターセットに追加            self.dataset.append((img,label))        print("load dataset done")
   def __len__(self):   #学習データの数        return len(self.dataset)
   # return (label, img)    def get_example(self, i, crop_width=256):   #i番目の画像/ラベルのペアを読み取り、前処理された画像を返す。   #入力画像から256×256のサイズでランダムに切り取っている
       _,h,w = self.dataset[i][0].shape        x_l = np.random.randint(0,w-crop_width)        x_r = x_l+crop_width        y_l = np.random.randint(0,h-crop_width)        y_r = y_l+crop_width        return self.dataset[i][1][:,y_l:y_r,x_l:x_r], self.dataset[i][0][:,y_l:y_r,x_l:x_r]
#################################
0 notes