pixivPayをインストールしてみました

うちのサークルは商品点数が多いので、少しでもレジの負荷を緩和できないかなと思っていたところ、pixivPayのレジ機能が使えるかも…ということでインストールしてみました。

pixivPayで出来ること

pixivPayは販売(店側)と購入(客側)の両方を兼ねているアプリとなります。

 トップ画面

利用するにはpixivアカウントと携帯電話番号(番号を登録するとSMSで番号が通知されてくるタイプの認証が初回にあります)が必要です。

QRコードを読み込んで決済する場合は「支払う」を選択する事でQRコード読み取り画面になります。

今回はレジとして利用するので下部メニューからマイページを選択します。

 マイページ

マイページを開くと取引一覧を管理する画面が表示されます。

レジなので商品の管理を選択します。

 商品管理画面

(上図では既に商品一覧が表示されています)新しく商品を登録する場合は、下部メニューの商品を登録から、編集する場合は商品をタップします。

  登録と編集画面

商品は「写真」「商品名」「値段」「成人向けか」の4項目を設定出来るのですが、全てが設定されていないと登録出来ません。

その場で写真を撮影するのでなければ、事前に問題のない画像(例えば単なる白画像)を用意しておくのが良いです。

 マイページ

登録が終わったらマイページに戻って、今度は販売を開始するをタップします。

 レジ画面1  レジ画面2

先ほど登録した商品画像が表示されます。

タップすると左上に数字が表示されて、現在の合計金額が下部に表示されます。誤って選択してしまったりした場合は、画面を下にスワイプしてから戻すとリセット出来ます。

個別にキャンセルする場合は、後述のお会計するをタップした画面で行います。

商品が全て決まったら、お会計するボタンをタップします。

 お会計画面

決済方法は現金とQRコードが選択出来ます。

商品リスト横にある×ボタンを押すと、リストから削除出来ます。

現金ボタンをタップとその時点で「確定」となってしまいますので、商品やお釣り等諸々を渡した後で押すのが良いです。

ただ、レジシステムとして考えると「お預かり」という段階がない為、おつり計算は自分でやるしかありません。

電子決済にする事で「お預かり」や「釣り銭計算」という手間を省くのが目的なので、そう言うものかもしれません。

ただ、現金 -> お預かり(受け取った金額の記入画面と釣銭表示画面) -> 確定といったフェイズがあると嬉しいなと思いました。

 マイページ

マイページから販売したものを選ぶと販売した商品の履歴を管理する事が出来ます。

  

テストで購入した情報や誤操作で登録されてしまったものはここから削除が可能です。

表示できるのは

  • 取引単位の時系列履歴
  • 商品別の販売数
  • CSV出力

その他1

 ひとまず設定画面からユーザー設定を開いて

 pixivプロフィールを公開するをオフ

購入してくれた人にpixivのプロフィール情報を公開するかを設定出来るのですが、私はひとまずオフにしておきました。(現金決済の時はそもそも関係ないですけど)

その他2

 アシスタント機能

この機能を使用すると他の端末同士で同じ商品リストが共有出来ます。試してませんが複数人でレジをやる際には個別設定の手間が省けそうです。

なお、自分のアカウントで複数台を使い分ける場合は、特に何もしなくても情報が共有されている状態です。

気になった事とか

全体的に可もなく不可もなく、といったところ。

釣銭の計算が出来なかったり、在庫管理がない為、「限定5個」とか「現品のみ」といった形態を取りづらいというのがあります。

一時的に非表示にしたり「完売」といったラベルが付けられると嬉しいかも。

Tweetのリアルタイム取得

Twitter APIのstatuses/filterを使用して、リアルタイム取得を擬似的に行えます。

動作確認はPython 3.6で行いました。

config.jsonにはTwitterの認証キーを設定します。

 

三年ぶりにPotrace GUIを更新

GitHubで公開している Potrace GUI を久しぶりに更新しました。

Potrace GUIを簡単に説明すると、コマンドラインから使用する二値画像のベクトル化ライブラリである、 potrace をPyQT5でGUI化したものです。

プログラム自体はオリジナルのpotraceをそのまま使用していますので、動作には別途 potrace が必要です。

Windows版(amd64)のみ、potraceのバイナリを同梱しています。

 さりげなくUIも修正していたり。

 ツールバーのボタンで変換前と変換後を切り替えられます。

もう少し判りやすい図を。

主に不具合の修正をしているのですが、幾つか機能追加をしています。

  • 実行時にpotraceを確認し、見つからない場合はダイアログ表示を行うようになりました。
  • BMP以外の画像形式(jpegやPNG、TGA)に対応しました。
  • 別途インストールが必要だったpotraceを同梱しています。(x86_64 Windows版のみ)
  • 現在の変換設定を使用しての、複数ファイル変換が可能になりました。
  • 変換元と変換後の画像を切り替えが可能になりました。
  • リアルタイムプレビューの更新頻度を下げる事で、UIの応答性を向上させました。

Windows版(amd64)は、以下からダウンロード可能です。

https://github.com/MizunagiKB/potrace_gui/releases/tag/v0.2.0

キャラクターの類似傾向

久しぶりのニューラルネットワークネタ。

某ゲーム向けにアップロードされている、キャラクターの性格付けが設定されたカテゴリとどの程度関係しているかを調べてみました。

ニューラルネットワークの作成はSONY NeuralNetworkConsoleを使用しました。

学習データは1カテゴリあたり350件づつ、評価用には100件づつ使用しています。

学習は10000エポック行いました。

 分類表

10件以上になっている場所を赤色にしています。

10件以上なので正解率10%というわりと甘い閾値ですが、綺麗に分類されれば、左上から右下に向けて赤い線になるはずです。

でもそううまく行くこともなく…

 誤判定をならべてみたもの

誤判定したカテゴリを並べてみました。

なんとなく類似傾向があるようなないような…

なお今回の学習には髪型や髪の色は含めませんでした。

某ゲームでキャラエディット

18歳未満の方は遊べないゲーム、コイカツ!を使用して3Dキャラクターを作ってみました。

以下のキャラクターはオフィシャルのアップローダーにも投稿してあるのですが、検索するのが大変なのでダウンロードデータの配布ページを別途用意しました。

以降の更新は以下のページで行います。

コイカツ!・キャラクターデータ

 優莉 祐里香 / 純真無垢で陸上部

 美影 瀬里華 / 大和撫子で茶道部

 祈里 アイラ / 野性的でチアリーディング部

 茜 美咲 / ミステリアスで帰宅部

 MODEL XH01F / 無口で帰宅部

自由にパーツを組み合わせてキャラクターを作れるのですが、エディットしている本人の絵柄の傾向が出てしまうのか、結局は手癖で描いたときに生み出さそうな容姿になってしまいました。

同じソフトを使っているのに、自分の作ったキャラクターが今風にならないというのは面白いのですが、なんだか自分の想像力の限界みたいな物を思い知ったり。

 

髪よりも手前に目を描画する設定が出来るのはちょっと嬉しかったり。

.

おまけ

http://www.illusion.jp

StructureSynthによるビル生成(2)

ヒント(道や建設して欲しくないところ)を指定してあげると、そこに考慮してビルを建ててくれるようにしてみました。

 こんな感じで与えます。

輝度でビル密度を与えようかな…と思っていますが、現在は黒い場所しか考慮していません。

 ビルが建設されます。

 ビルのディティールは低い…

.

試しに生成してみたスクリプト(そのままStructure Synthに貼り付けられます)

build_20180610.es

StructureSynthによるビル生成(1)

StructureSynthによる生成。

Sunflowでのレンダリング

こちらはShadeでレンダリングしたものをCLIP STUIO Paintで加工。

.

こんなスクリプトで生成しました。

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。

同人マンガ原稿用紙を生成するウェブアプリ

微妙な便利さを求めて作成してみました。

 ウェブアプリである必要はあんまりなかったりして。

http://www.mizunagi-works.com/gadgets/mangasheet/mangasheet.html

.

600dpi, 300dpi, 150dpi, 96dpiの解像度でA4サイズのマンガ原稿用紙を生成します。

CLIP Studioなんかを使用している場合は、全く不要なアプリケーションだと思うのですが、自分が使用しているソフト(ArtRage)はマンガ作成向けでは無いため、微妙に便利な感じ…かも。

フォルダ内の重複画像を取り除きたい(2)

NNC Utilsで指定可能なハッシュ方法の説明を追記しておきます。

Hash方法

Average hash

画像を縮小した後に全画素の平均値を取得します。縮小画像の画素が求めた平均値よりも明るい(1)か暗い(0)かを元にハッシュ値を生成します。

画像の全体的な輝度や若干の色調補正が加わっていても、同じ画像と見なすことが出来ますが、縮小した結果が似たような画像だと適切な区別ができなくなります。

Perceptual hash

画像を縮小した後にDCT(離散コサイン変換)をかけます。求めた結果から低周波成分を取り出し、中央値を取得します。高周波成分を取り除くという事は、画像からノイズ(小さな差異)を取り除くという事になります。

求めた低周波成分領域から中央値よりも大きい(1)か小さい(0)かを元にハッシュ値を求めます。

一旦周波数に変換すると、直接の画素的な位置情報が失われてしまいますが、全体的に似ている(同じ様な周波数を含んでいるか)かどうかを区別する際に使用します。

Perceptual hash (simple)

Perceptual hashと同じですが、DCTの計算を一回、中央値を使わずに平均値を使用しています。

Difference hash

画像を縮小した後に、左右の画素同士を比較して、どちらが明るいかを求めます。

Average hashは画素全体の輝度から平均を求めるため、細かな差異が埋もれてしまう場合がありますが、こちらを使用するとうまく拾い出せる場合があります。

画像の一部分部分だけが異なっているものを区別したい場合に有効ですが、比率が異なる画像を違うものとみなしてしまう場合や、ノイズを有効な画素と見なしてしまう場合があります。

ある画像と同じ画像をJPEGで圧縮して劣化させた画像を同じものと見なしたい場合には良い結果が得られません。

Difference hash (vertical)

Difference hashと同じですが、画像比較を上下で行います。

Wavelet hash

画像を縮小した後に輝度情報を0.0〜1.0の範囲に変換し、wavelet変換(haar)を行います。変換結果から低周波成分の結果を取得し、中央値を求めます。

求めた低周波成分領域から中央値よりも大きい(1)か小さい(0)かを元にハッシュ値を求めます。

Perceptual hashと似たような処理ですが、waveletはDCTに比べてより適切な分解を行うことが出来るため、Perceptualよりも適切な区別が期待できます。

imagehashが使用できるアルゴリズムで最も重い処理となります。

.

フォルダ内の重複画像を取り除きたい(1)

「あるフォルダ内に保存されている画像が重複しているかを確認する」といった用途の場合、sha1等のハッシュを計算する事で重複を除外する事が出来ます。

この方法はどの様なファイルに対しても上手く動作してくれるのですが、ファイルのバイナリが完全に一致していなければ同一ファイルと認識されません。

特に画像ファイルの場合ですと、

  • 画像自体は完全に同じだがEXIF等のタグ情報が異なる。
  • 画像としては同じように見えるが、解像度が異なる。

といった画像は「同じ(似ている)」だと認識して欲しい時があります。

imagehash

そんな要求に対応するためにimagehashというものがあります。

Pythonではimagehashというモジュールがあり、Pillowと組み合わせることで容易にimagehashを計算する事が出来ます。

実際にハッシュを取得してみる

 いろんなフーちゃん

わりとうまくいっているみたい。

NNC Utils

まだ完成していない部分もありますが、ひとまずGitHubで公開しました。

ついでにGUIもつけてみたりして。

 PyQt5(画像はMac版)を使用しています。

.

Windows用バイナリ

NNC Utils

OneDriveからGitHubに移動させました。

簡単な使用方法

インストール方法

圧縮されたファイルをデスクトップ以外の場所に展開してください。

実行方法

実行は以下の三通りの方法があります。

なお、どちらの方法を使用してもファイルの自動削除等は行いませんので、結果が保存されたファイルを頼りに処理を行ってください。

(使用方法1)

コマンドプロントからchk_image_dup.exeを引数付きで実行します。

結果はchk_image_dup.exeが置かれている場所にimage_dc_result.tsvという名称で保存されます。

(使用方法2)

同梱されているimage_dc.batのショートカットを好きな場所(例えばデスクトップ)に作成します。

作成したショートカットに検索したいファイルをドロップすると、そのフォルダ以下に対して重複確認を行ってくれます。

結果はchk_image_dup.exeが置かれている場所にimage_dc_result.tsvという名称で保存されます。

(使用方法3)

nnc_utils.exeを実行するとGUIモードで立ち上がります。

結果は、ウィンドウ内のテキストボックスとnn_utils.exeが置かれている場所にimage_dc_result.tsvという名称で保存されます。

image_dc_result.tsvについて

重複ファイルが見つかるとimage_dc_result.tsvに重複したファイル名が保存されます。

ファイルはタブ区切りのテキストファイルで、それぞれのカラムは以下の内容となっています。

  • イメージハッシュ値(値が同じ物は同じ(或いは似ている)内容の画像ファイル)
  • ファイル名称
  • 画像の幅
  • 画像の高さ
  • 画像形式
  • ファイルフォーマット

対応している画像形式はPillowがサポートしているものとなります。(こちらで動作確認をしているわけではありません)

アンインストール方法

設定ファイル等は生成しませんので、展開したファイルを全て削除してください。

.

shellをfishにしてみました

長年使用していた(デフォルトだけど)bashからfishへと環境を切り替えてみました。

OSX環境でfishを呼び出すと、conda activateが出来なくなりましたが、 ~/.config/fish/config.fish に

と、一行追加すると使用できるようになります。

ニューラルネットワークで要素抽出

Autoencoder

ニューラルネットワークは画像を認識させる際に、元情報よりも低次元で表現するようにネットワークを構成することが出来ます。

そのような低次元で表現された空間には、学習に使用した情報の要素が詰まっているとも言えます。

要素が詰まっているのですから、その情報を抜き出して再び画像にすれば、ニューラルネットワークが思っている物の片鱗を見ることが出来る…かもしれません。

技法的にはオートエンコーダと呼ばれるものなのですが、画像認識に使用しているヴィヴィオ達の画像を使用して計算させてみました。

Autoencoderを通したヴィヴィオ達

結果は以下のような感じです。

   

多分、リリカルなのはVividをよく知っている人であれば、誰か答えられるのではないかと思います。

今回は100次元で表現してみましたが、多分もっと少ない要素で表現出来そうで、ヴィヴィオ達は見た目だけでもかなり分類しやすそうに感じます。(…ってプロの方がそうなる様にデザインされているわけですから、そりゃそうなりますね。)

次元数を下げるほどぼやけた画像になっていき、極端に下げると「黄色っぽい」「みどりっぽい」だけの画像になります。

学習結果の応用

この学習は、

  • 「ヴィヴィオの絵」 + 「ヴィヴィオ」
  • 「アインハルトの絵」 + 「アインハルト」
  • 「リオの絵」 + 「リオ」
  • 「コロナの絵」 + 「コロナ」

という入力で学習させましたので、以下の様な入力を受け付けます。

  • 「ヴィヴィオの絵」 + 「アインハルト」
  • 「写真」 + 「ヴィヴィオ」

これを使えば、入力された画像をヴィヴィオっぽくしたり、アインハルトっぽくしたりする事が出来そうです。

試しに自分の絵を使って実行してみたものがこちら。

  •  =  + ヴィヴィオ
  •  =  + アインハルト
  •  =  + リオ
  •  =  + コロナ

…心の目で見ればなっているような、なっていないような。

今回やったことを図にすると、以下の様になります。

 学習させます。

 学習結果とヒントを使い、絵を加工。

Azure上でnnablaを動かしてみました

現在使用しているAzure環境にnnablaをインストールして、ウェブアプリを作成してみました。

nnablaはSONY Neural Network Consoleでも使用されているもので、比較的簡単にニューラルネットワークを利用出来るのですけど、学習した結果をどう使うかがなかったので、サンプルを兼ねて作ってみました。

VE Detect

https://www.mizunagi-works.com/gadgets/ve_detect/index.html

 しょっぱなから誤判定するデータを与えていたりして

言い訳っぽいのですけど、これは学習データが少ないのと「アインハルトかヴィヴィオのどちらか」を判定させるように学習させた結果となります。

例えばおにぎりの画像を与えたときでも必ずどちらかという判定します。(どちらでもないという回答を出すようには学習させていません)

Azureへの導入

ニューラルネットワークというと、強力なGPUを使用する負荷の高いアプリケーションに感じられるかもしれません。

確かに計算量は多いのですが、処理が重たいのは学習をする時で、学習済み結果を利用するのはそんなに重くありません。

(今回作成したニューラルネットワークの構成が単純というのもあります)

自分が使用しているAzure上のVMはA1 Basicでかなり非力(下から2番目)なのですが、学習結果を利用するにあたってはそこまで負荷はありませんでした。

SONY NNCによるネットワークの作成と学習

こんなネットワークにしてみました。

10,000回ほど学習させました。

プログラムの作成

学習が完了すると、学習結果が保存されたフォルダにparameters.h5というファイルが生成されています。

学習済みモデルを利用するにはこのh5ファイルと、NNCからエクスポートしたPythonスクリプトが必要となります。

スクリプトはちょっと長めですのでGitHubに置いておきました。

bottleを使用していますので、ローカルでこっそり楽しむことが可能です。

.

去年やった絵柄判定ネタ再び

最近、Neural Network Consoleで遊んでいるのですが、去年イラストを学習させて、誰が描いたのかを判定してみるというのをやってみたところ、わりと悲しい結果となってしまったものに改めて挑戦してみました。

(データについては以前に許可を頂いているデータをそのまま使用しました)

今回のモデル

今回はGUIでモデルを作成していますので、ネットワーク構成とかはりつけてみました。

左図のようなモデルにしてみました。

1,000回学習させたものがこちら。

あんまり芳しい感じではないです。

イラスト100枚を学習させています。

結果

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

https://www.mizunagi-works.com/gadgets/nanoillust/20180201/index.html

確率で並び替えが出来るようになっています。

「engo001さんが描いたビールジョッキを持ったはやて」をsan_ponさんが描いたと判定してくれるようになったので、前回よりはそれっぽい判断になってくれ…たかもしれない。

.

Neural Network Libraryで遊んでみる

SONYのNeural Network Libraryを使ってみてのメモとか。

NNLで画像を読み込みたい場合

モデルに画像を読み込ませるには、nnabla.utils.data_source_loaderモジュールで読み込ませる事が出来ます。

Pillowで読み込んだ画像をNNLで扱える構造にしたい場合

numpyモジュールを使います。

 

ISO-2022-JP-MSからCP932への変換

使用する機械はあまりなさそうでうけど、ISO-2022-JP-MS(JIS)からCP932(SHIFT-JIS)へ変換するコードを、以下のサイトに掲載されているプログラムを移植してみました。

http://www.geocities.jp/hoku_hoshi/TIPPRG/tipprg03.html

プログラム本体

テストデータ

テスト方法

上記の様なテストデータをUTF-8で作成して、iconvやnkfを使用してjis形式のファイルに変換します。

iconvの場合

nkfの場合

.

Neural Network Consoleでキャラ判定

SONYが公開しているNeural Network Console を使用して、キャラクター判定をさせてみました。

NNCはWindows用なのですが、学習させたモデルの利用はMac(Anaconda + Python 3.6)でも動作しました。

ヴィヴィオとアインハルトのみですので適当に答えても50%の確率なので、あまり面白みはないけど…

Neural Network Console

https://dl.sony.com/ja/

SONYが公開しているニューラルネットワークを作成するためのGUI環境です。

今回は以下のようなネットワークを作成してみました。

 ネットワーク構成

 学習状況(2000Epoch)

画像データはBingの画像検索を使用してヴィヴィオとアインハルトの画像を収集しました。

画像については以下のルールで生成しています。

  • 変身前か変身後は関係なくキャラクター毎に30枚程度を用意
  • 描かれているキャラクターは一人だけ(背景はあってもなくてもよい)
  • 画像サイズは64×64に縮小(パディングは0(黒)で行う)

画像はかなり少ないのですが2000Epoch程学習をさせて、評価を行います。

評価方法

NNC上でも評価出来るのですが、生成したモデルをPythonやC++から使用することが出来ます。

今回は以下のようなコードを生成しました。

学習結果はフォルダにHDF5形式で格納されていますので、そのまま使用することが出来ます。

ソースコードもNNCが生成したものをそのまま使用可能となっています。

評価に使用するデータ

画像は自分が描いた2枚の画像を使用してみました。

 ヴィヴィオ( vivio = 1 )

 アインハルト( einhald = 0 )

実行結果

 0.978

 0.042

0に近いほどアインハルト、1に近いほどヴィヴィオという判定が出るように学習させましたので、どうやら正しく判定してくれたようです。

自分以外の絵でも試してみましたが、正答率は80%ぐらいでした。

.

文書の類似度判定(3)

データベースに文書を保存するまでが出来たので、やっと本題の類似度判定を。

データベースから文書を取り出して学習と判定を行う

やっていることは、データベースから二文字以上の名詞を取り出して学習用データを生成して、与えたキーワード、文書に似ている(近いベクトルのもの)を取得しています。

実行すると以下のような結果が表示されます。

学習させた文書は、Pixiv百科事典からキャラクター名の項目をテキスト化したものを与えています。

ヴィヴィオに関連するものとして、

  • アインハルト
  • リンネ・ベルリネッタ

といったキーワードが出力されています。

与えた文書量が少なく、文書自体も短いためなんとなくうまくいっているようないないような。