チャイムノート

メルストのキャラでモザイクアートを作りたい![python]

 f:id:chime-n:20190707143420j:plain

 

唐突ですがモザイクアートを作ってみたくなりました.

ただ,写真とイラストが混ざったような系統が違う画像を使うことにしっくりこなかったので,統一感のある画像でやりたいと思いました.

よって,今一番人気のあるアプリ(当社調べ)であるメルストのキャラ画像を使ってモザイクアートを作っていきます.

 

先にこれを書いておくぞ!

=====================
当ページは、Happy Elements株式会社「メルクストーリア」の画像を利用しております。
該当画像の転載・配布等は禁止しております。
©Happy Elements K.K
=====================

 

 

方針

モザイクアートを作るにはいろんな色の画像が必要になります.

メルストというアプリにはキャラクターがたくさんいるので多くの色を表すことができそうだったのですが,画像を集めるのが面倒すぎました.

一枚一枚スクショして正方形に切り取る作業をやる元気も若さもありません.

そのため,メルストの5属性から一人ずつ選んで,5色のモザイクアートを作ることにしました!

以下,代表選手紹介です.

 

火属性代表:ラヴィオ

f:id:chime-n:20190707131302j:plain

イケメン団長.

髪が赤いためモザイクアートの素材としても優秀.

 

水属性代表:ゲルトルート 

f:id:chime-n:20190707131324j:plain

ごろにゃー王女様.

お菓子の国の王女様の中で唯一の星4だが立ち絵がある.フランシールにもある.

 

風属性代表:こひばり 

f:id:chime-n:20190707131334j:plain

ジャパニーズニンジャ.

緑髪は不人気なことが多いが例外もいる.

 

光属性代表:ミシェリア様

f:id:chime-n:20190707131530j:plain

美しき天使.

公式人気ランキング第2位の美しさは伊達ではない.

 

闇属性代表:ロロきゅん

f:id:chime-n:20190707131547j:plain

かわいい.だが男だ.

メルスト恒例性別詐欺の筆頭格.

 

とりあえず好きなキャラを選びました.

この五枚をそれぞれ    黄(白)  とします.

黄と白は同じ画像を使います.

元画像の各ピクセル値と近い色に相当する画像をつなぎ合わせてつくります.

 

コード

こんな感じになりました.

import cv2
import numpy as np


class MosaicArt:
def __init__(self, base, color_list, size=None):
self.base = cv2.imread(base)
if size != None:
self._resize_img(size)
self.color_img = self._read_img(color_list)

def _resize_img(self, size):
self.base = cv2.resize(self.base, size)

def _read_img(self, color_list):
color_img = []
for color in color_list:
color_img.append(cv2.imread(color))
return color_img

def define_color(self, H_type):
hsv = cv2.cvtColor(self.base, cv2.COLOR_BGR2HSV)
gray = cv2.cvtColor(self.base, cv2.COLOR_BGR2GRAY)
H = hsv[:, :, 0]
div_H = 180/H_type/2
for i in range(H_type):
if i == 0:
H_label = np.where((H <= div_H) | (H > div_H*(H_type*2-1)),
i,
H)
else:
H_label = np.where((H_label > div_H*(2*i-1)) &
(H_label <= div_H*(2*i+1)),
i,
H_label)
x = 50
black_index = gray < x
white_index = gray > 255-x
H_label[black_index] = H_type
H_label[white_index] = H_type+1
return H_label

def connect_image(self, H_label):
for y in range(len(self.base)):
for x in range(len(self.base[0])):
if x == 0:
x_img = self.color_img[H_label[y][x]]
else:
x_img = cv2.hconcat([x_img, self.color_img[H_label[y][x]]])
if y == 0:
y_img = x_img
else:
y_img = cv2.vconcat([y_img, x_img])
cv2.imwrite("result.jpg", y_img)


if __name__ == "__main__":

base_image = "base.jpg"
color_image = ["red.jpg",
"yellow.jpg",
"green.jpg",
"blue.jpg",
"black.jpg",
"white.jpg"]

MA = MosaicArt(base_image, color_image, size=(200, 200))
label = MA.define_color(4)
MA.connect_image(label)

 

コンストラクタでモザイクアートになる元画像と素材となる画像を読み込みます.

第三引数のsizeは元画像のリサイズに使います.上記だと200*200pixelになります.

元画像のサイズが大きいとめっちゃ時間かかります.

 

define_colorで各ピクセルの色を決めています.

今回は(H_type=4)を元画像の色相から決定した後,白とを元画像のグレースケールからテキトー(x=50)に決定しています.

opencvHSVの色相Hは0~180なので,こんな感じに分けています. 

f:id:chime-n:20190707130824j:plain

かなりずれていますが,もともと5色と少ないので等間隔にやりました.

黄色狭すぎんよ...

 

connect_imageで素材の画像をつなぎ合わせます.

yは縦,xは横です.

 

プログラミング弱者なのでもっと早くできる書き方あるかもしれません.

 

結果

モザイクアートにするのは当然こいつだ!

f:id:chime-n:20190707134435j:plain

かっくぃー!

 

さぁ,結果を刮目してみよ!

f:id:chime-n:20190707134917p:plain

バァーン!

結果は見せられませーん.

なぜかというとメルストのコンテンツ利用ガイドラインの禁止項目に 

・当社ゲームで使用されている画像データの過度なリサイズ,編集加工.

があるから!

 

つらみ...

 

今回は元画像を200*200,素材画像を50*50にまでリサイズしてモザイクアートを作りました.

つまり,完成した画像のサイズは10000*10000です.容量にして100.7MB!

流石にそのままブログに載せることもできないのでサイズを落とすとなると,素材画像が完全に潰れます.

これが過度なリザイズにひっかかっちゃうかもしれないので,折角やったのに載せれませんでした.

こういう感じのでっかい画像が作れました.

f:id:chime-n:20190707191118j:plain

 

この先は君の目で確かめてくれ!

 

総括

メルストのキャラ画像でモザイクアートを作りました.

結果をのせれないという残念なことになり,もはや誰向けの記事なのかわからないです.

ただ,python書く練習にはなりました.

 

ちなみにですが完成したモザイクアートは5色だけでは味気ない感じでした.

素材画像を増やして色を閾値ではなく決定するように書き換えれば,一般的なモザイクアートに近づくと思います.

いつか元気があるときにやってみたいです.

 

最後に

みんな!メルストやろう!

 

以上! 

ガクチカは複数用意!就活を終えた学生による面接対策マニュアル

 

f:id:chime-n:20190616215604j:plain
 

ガクチカ:学生時代に力を入れたこと

  

私が面接を繰り返す中で重要だと思ったのはガクチカ対策です. 

今回は面接を何度もしたことで得た,ガクチカに関する知見をまとめます.

面接は本当に”慣れ”なので,この記事が面接1回分くらいに相当してくれれば嬉しいです.

 

就活系の記事にはいつも書くようにしてますが,あくまで私個人の考えを書きます.

業界や職種等によって就活は大きく違いますし,私はしがないただの学生です.

ネットの情報を鵜呑みにせず,様々な情報の中から正しい情報の取捨選択をしてください.

 

(いつもと違っておしゃれタイトルにしてみました!)

 

 

ガクチカが重要な理由

まず,面接における頻出質問について書きます.

一口に面接と言っても,個人面接や集団面接,技術面接など色々なタイプの面接があります.

しかし,基本的によく頻出とされる質問はどんなタイプでもされることが多いです.

ちなみに,私の受けた企業(メーカー)での頻出質問TOP3の出題確率はおおよそですがこんな感じでした.

ガクチカ: 100%

・志望動機: 80%

・自己PR: 60%

 

意外にも志望動機(企業,職種,部署等含む)を聞いてこない企業がいくつかあります.

志望動機ってあんまり差がつかないと言いますか,人によって違いが生まれにくいと思います.

もちろん重要なことに変わりはないのですが,より比重の大きい質問は存在していると考えていいです.

 

対して,ガクチカ(学生時代力を入れたこと)は全ての面接で聞かれました.

そして,個人的にはこの質面への回答がとても重要であると感じました.

ガクチカは学生の具体的なエピソードを聞けるので人となりが分かりやすいです.

どんなことに興味を持つか,どんな性格なのか等の内面の部分を探れる質問で,人によって回答は全く異なります.

よって,学生が企業にあっているかを判断しやすいことから,ガクチカは最頻出の質問だと考えます.

また,エピソードを話すのでウケが良ければ一番盛り上がる質問であり,面接中に受かった感がでることもしばしばありました

 

今回はそんなガクチカを対策しましょう.

 

対策1:質問にあった回答をする

いきなりですが,

 ”ガクチカを聞かれたらこのエピソード話そう

 ”ESに書いたやつ答えよう

って考えていると終焉を迎えます.

なぜかと言うと,シンプルに学生時代に頑張ったことを聞かれないことが多いからです.

例えば,私がされたガクチカの質問はこんなものがあります.

 ”頑張って何かを変えた経験は?

 ”プレッシャーの中で頑張った経験は?

 ”多くの人を引っ張って頑張った経験は?

 

このようにガクチカはおまけの条件が付いてくることが多く,ガクチカへの回答を1つに決めていると条件を満たさなくなる場合がでてきます.

具体的にはプレッシャーの中頑張ったことを聞かれているのに

 ”サークルを立ち上げました!

 ”ボランティアしました!

などと言っても残念賞をいただくことになります.

また,面接とESでは聞き方が異なることもあります.

 

つまり,ガクチカでは相手の質問に対して,ベストなエピソードをぶつけられるかが重要となります

そのため,ガクチカに対して話すことを決めるのではなく,エピソードを大量に話せるようにすることが大切です. 

 

例えば,サークル活動にしても”立ち上げた”という経験と”幹事としてみんなをまとめた”という経験は別物として捉えるべきです.

何かを変えた経験を聞かれたら立ち上げた経験を話し,その後の深堀の中でタイミングよく”幹事もしたよ”とさらにアピールすると良さそうです.

 

用意したものを全て使う必要はありませんが,持ち弾が多いに越したことはありません.

(対策1だけ書くつもりだったので以降はテキトーです)

 

対策2:企業・職種にあった回答をする

これはもうそのままです.

研究職なら”ロボットを作りました”.

営業職なら”バイトでお客さんと仲良くなりました”.

ガクチカにおいても,自分がその企業で如何に活躍できるかといった自己PRの場であることを忘れずに挑みましょう.

 

対策3:ストーリーを意識する

面接官は今ままで何百回とガクチカを聞いてきているので,ありふれた話では盛りあがらないと思います.

ですが,誰もやっていないようなことをしている学生なんていないと思います.

ならば,ありふれた話を面白く話すしかありません.

笑いとかではなく,ストーリー性が重要です.

起承転結を心がけて面接官が質問したくなるような話にしましょう.

詳細を全て話す必要はありませんが,要所は押さえて,初めて聞いても流れがわかる話だと良いと思います.

 

総括

ガクチカ対策を書きました.

ひたすらエピソードを思い出し,深掘りしていく作業は苦痛でしかないと思います.

しかし,一回やってしまえばいろんな企業で使い回すことができます.

面接にそこまで違いなんてないので,頭の中でパターン化されて安心して面接に挑むことができます.

そのため,一回だけ頑張ってエピソードをまとめましょう.

ネットにはいろんな自己分析のやり方が載っていますが,結局はエピソードが全てでエピソードさえあればなんでも話せます.

 

ガクチカをうまく答えて第一志望に合格しよう!頑張ろう!

 

 

おまけ1:面接の一貫性の話

面接対策として,”最初と最後で食い違わないようにしましょう”ってよく聞くと思います.

ただ,普通にやっていれば食い違いは出ないと思います.

じゃあ,どんな時に起きるのか私なりに考えました.

その結果,一貫性が崩れる原因はただ1つです.

それは短所を言った時

実際には短所だけではなく,ガクチカや自己PR等の深掘りで”どんな改善ができたと思う?”のような自分の欠点に関する話をした場合です.

この流れにもっていかれたら注意が必要です.

実際,話しながら考えるって難しいことですが,具体的に話すことを心がけましょう.

責任感あります!”って言っていたのに”責任感もってやればよかったです”だとやばいです.

責任という単語は使わずに,”リーダーとして最初からスケジュール管理をし,人員を適材適所割り振ることで余裕を持った完成を〜〜〜”みたいに言えば良いと思います.

適材適所の使い方が合ってるかは知りません.

 

おまけ2:自己PR「いろんなことに挑戦した」

自己PRで”いろんなことに挑戦します!”というのは賛否両論あります.

賛はおいといて,否の意見は

 ”いろんなことに挑戦していたとしても1つ1つを見れば並

であることです.

言いたいことすっごいわかります.

でも,他の自己PRにしたとしても結局並になりません?

エピソードは限られたものしかないんだから,結論は違えど話のインパクトは変わらないような気がします.

よって,私の意見は賛です.

というか,私は自己PRこれで行きました.笑

 

ただ,いろんなことの中身は注意が必要です.

バイトやサークルを入れるぐらいなら違う自己PRの方が良いです.

ドローン飛ばしてますとか,Webアプリ公開してますとか,折り紙教室いってますとかぐらいで成り立つと思います.

 

【機械学習】オフラインでもAI自動着色で遊ぼう[style2paints]

f:id:chime-n:20190611180330j:plain

またもや線画着色をやろう!

今回はオフラインでstyle2paintsで遊びましょう.

同様なことができるPaintsChainerをこの前やったので比較とかもしたいです.

インストールから実行まで,読めば使えるように書いていきます.

今回の使用PCはMacです.

 

イカれた過去記事を紹介するぜ!

・他の線画着色

Pythonの入れ方(Windows

  

style2paintsとは?

style2paintsは機械学習を用いた線画着色技術です.

サンプルとしてこれが入っていました.

f:id:chime-n:20190611164545j:plain

どーゆー順で見るのか分かりませんが,おそらく左上の画像が入力でそれ以外が出力でしょう.

この画像だけ見ればPaintsChainerよりうまく塗れているように感じますね.

 

改良を重ね続けて 2019年 6月現在の最新バージョンはV4ですが,V5の情報も出てるらしいです.

前まではWeb上でV4を遊ぶことができたらしいのですが,現在はサービス停止中みたいです.

そのため,今回はローカルにWebサーバーを立ち上げてやっていきます.

V4はソースコードが公開されていないので遊ぶのはV3になります.

 

インストール

インストールするのはstyle2paints本体(ソースコード)と学習済みモデルです.

 

まず,ソースコードgithubからダウンロードします.

> GitHub - lllyasviel/style2paints: sketch + style = paints

右にある緑色の"clone or download"から"download ZIP"します.

あるいは,以下のコマンドでダウンロードできます.

>>> git clone https://github.com/lllyasviel/style2paints.git

 

続いて,学習済みモデルを作者さんのGoogleDriveからダウンロードします.

> style2paints - Google ドライブ

右上にある青文字の"すべてダウンロード"ですべてダウンロードします.

ダウンロードできたら"style2paints"の中の"V3"の中の"server"に全部移動します.

こんな感じになります.(__pycache__は最初はないです.)

f:id:chime-n:20190609201305p:plain

以上でインストール完了です.

 

実行

  ***追記***

   読めば使えるように書くといったにも関わらず,前提知識を必要とする書き方になってました.申し訳ない!

   次の項で,より丁寧に実行について書いているので分からなくなったらそちらを参考にしてください.

 

実行するためには以下のライブラリが必要になるみたいです.

tensorflow_gpu,keras,bottle,gevent,h5pypaste,opencv-python,scikit-image

 

ただ,私は自分のPCにどれが入っているか把握していなくて,調べるのもお面倒だったので実行してエラーが出たらその都度入れました.

調べてやりたい人は以下のコマンドで見れます.

>>> pip list

 

早速,実行します.

ターミナル上でstyle2paints/V3/serverの階層までcdを使って移動します.

実行するのはserver.pyです.

>>> python server.py

 

必要なライブラリが入っていないとエラーが起きるのでそれらを入れていきましょう.

実行一回目 ImportError: No module named 'bottle'

>>> pip install bottle

 

実行二回目 ImportError: No module named 'keras'

>>> pip install keras

 

実行三回目 AttributeError: module 'tensorflow.python.ops.nn' has no attribute 'leaky_relu'

これはtensorflowのバージョンの違いによって出るエラーです.

バージョン 1.5だといけるのでバージョンを指定してインストールしましょう.

>>> pip uninstall tensorflow

>>> pip install tensorflow==1.5

 

実行四回目 ImportError: No module named 'paste'

>>> pip install paste

 

実行五回目 serving on 0.0.0.0:80 view at http://127.0.0.1:80

ここまで表示されれば成功です.

 

ChromeSafariで以下のURLのどちらかを打ち込みましょう.

どっちでも一緒です.

> http://127.0.0.1:80
> http://0.0.0.0:80/

成功していればこれが表示されるはずです.

f:id:chime-n:20190609205207p:plain

 

これでオフラインでもstyle2paintsで遊べます.

遊び終わったら,コマンドプロンプト上で"Control"+"C"を同時押ししてサーバーを落としましょう.

 

追記:実行(より丁寧ver)

こちらではより丁寧に実行の仕方を説明します.

質問いただいた方がWindowsだったので,この項はWindowsでこの流れに沿ってやればできるように書きます.

 

まずは,この記事の上の方にPythonの入れ方(Windows)というリンクがあると思うので,それに従ってWinpythonとOpenCVをインストールします.

今回はWinpythonを使用するので,pythonはもう入れてあるという人もいれてください.

リンク先のWinpythonのところの最後の追記もしっかり読んで環境変数を変更するか決めてください.

よく分からなければ,環境変数はいじらないでおきましょう.

 

OpenCVまで入れてたら,style2paintsに必要なライブラリを入れます.

Winpythonは様々なライブラリを標準で使えるようになっているのでインストールが必要なのは"bottle"と"paste"の2つだけです.

WinpythonCommandPronptで以下のコマンドを打ちましょう

OpenCVとは違って先に何かをダウンロードするとかは不要です.

>>> pip install bottle

>>> pip install paste

こういう感じになります.

f:id:chime-n:20190619141925j:plain

ここまで出来れば,あとは実行するだけです.

 

WinpythonCommandPronpt上でstyle2paints/V3/serverの階層まで移動します.

”階層の移動って何?”という人はまず,Winpythonのフォルダと"style2paints-master"というフォルダをデスクトップに置いてから以下のコマンドを打ってください.

>>> cd ../../style2paints-master/V3/server

 

打つと左の部分が変わります. 

 

階層を移動できたら以下のコマンドでstyle2paintsを起動します.

>>> python server.py

画像はMacのもので少し環境が違いますが,Windowsでもこれに似た感じになると思います.

f:id:chime-n:20190619140648j:plain

"serving on 0.0.0.0:80 view at http://127.0.0.1:80"まででたら成功です.

 

ChromeSafariで以下のURLのどちらかを打ち込むか,このリンクをそのままクリックしてください.

どっちでも一緒です.

> http://127.0.0.1:80
> http://0.0.0.0:80/

 

これで遊べます! 

遊び終わったら指示通り,WinpythonCommandPronpt上で"Ctrl"と"C"を同時押ししてサーバーを落としましょう.

次に使うときはWinpythonCommandPronptを起動して,cdのところからやればできます.

 

===================

基本的に質問していただければ,できる限り答えます.

気軽に,twitterやコメントで質問してください.

気づくの遅れても何かしらのアクションは起こします.

===================

 

使い方

よし,遊ぼう!

左下の線画選択をクリックして,線画を選びます.

f:id:chime-n:20190609215105j:plain

選択するとこんな感じになります.

f:id:chime-n:20190609215335p:plain

前回同様,色付きのフリー素材を線画にしたやつを使います..

三枚画像が表示されるので,画像の間にあるどっちかの矢印をクリックすると色を塗ってくれます.

f:id:chime-n:20190609232812j:plain

しばらくすると着色した結果が表示されます.

今回の着色結果はこちらです.

f:id:chime-n:20190609232911p:plain

めちゃくちゃ良い...

色指定しなくてもここまでうまく塗ってくれるんですね.

個人的な意見ですけどPaintsChainerより好きですね.

ちなみにPaintsChainerだとこんな感じでした.

f:id:chime-n:20190503221952p:plain

 

次は色指定ありでやってみましょう.

カラーロケーターをクリックして,一番左の画像で色指定をしましょう.

適当にやったらこうなりました. 

f:id:chime-n:20190611162716p:plain

黄色の服にしようとしましたが,服は黒のままですね...

全体的な雰囲気は黄色っぽくなりました.

カラーロケーターをしてて思ったけど,もしかして物体が1つしかない画像の方がよいのかな?


また,他の画像を参照をしてみます.

画像を参照することによって,参照したカラーベースで着色してくれます.

f:id:chime-n:20190611164100j:plain

今回はスタイル比最大にして線画にする前の元画像を参照してみました.

フリー素材ですがそのまま貼るのは憚られるので,参照画像にした元画像は二枚目の淵から想像してください.

f:id:chime-n:20190611163332p:plain

流石に元画像そっくりにはなりませんでしたが,元画像が青っぽかったので青色になりました.

かなり綺麗に塗れています.

 

他の画像でもやった

近日公開予定.

今日は眠いのでお昼寝をします.

 

総括

今回はオフラインでstyle2paintsをやってみました.

PaintsChainerの時も感動しましたが.今回はよりびっくりしました.

PaintsChainerよりも明確な塗る領域分けをされている気がします.

また,style2paintsの方が色の塗り方も好きです.

今はWeb上ではできないのでローカルでやるしかありませんが,気になった人は是非やってほしいです.

 

最後に,

作者の名前書かせるフリー素材はしんどい!

 

以上!