月別アーカイブ: 2016年1月

ふつう2020年問題と2025年問題と言えば・・・

Google日本語版に「2020年問題」と「2025年問題」というキーワードを入力して検索してみた。

もちろん自分のGoogleアカウントでログインせずに、プレーンな状態で。

というのも、「2020年問題とか2025問題といえば、NTT西日本・東日本の公衆交換電話網が次世代網に切り替わることだというのは皆さんご存じでしょう」と話していた人たちがいたからだ。

結果は下図のとおり。

まず2020年問題から。
google_screenshot_2020nen_20160127a

ふつう2020年問題と言えば、少子高齢化にともなう大学、医療の問題。ITで言えばIT技術者がいなくなるのでは?といったような問題。東京オリンピック後の景気低迷を心配する記事もあるようだ。

つぎに2025年問題。
google_screenshot_2025nen_20160127a

やはり少子高齢化にともなう医療や介護に関する問題。キーワードとして「IT」を追加してようやくオージス総研のウェブサイトの下記ページが出てきた。

「「2025年問題」に備えていますか?」 (2013/08 オージス総研Webマガジン)

ただしこのオージス総研の記事は、自社のEDIサービス「SecureEC」のプロモーション記事。世間一般の関心について書いたものではない。

「ふつう2020年問題や2025年問題といえばNGN」と何の疑問もなく話す人たちは、どんな世界に生きているのだろう。

PHPでextensionなしの顔認識(処理速度はかなり遅め)

こちらの「Face detection in images using PHP」というページでPHPによるDLLなしの顔認識の方法が分かった

テキストデータを使ったPHP関数での顔認識なので処理速度は非常に遅いけれど、無いよりはまし、ということで、とりあえずダウンロード済みの大量のSNH48メンバーの中国ツイッター(新浪微博)のツイート画像の中から、人間の顔が大きめに写っているものを自動的に選別できるようになった。

しかしこの顔認識PHP関数、顔の認識は一つだけしかできない。

さらに、顔の位置をJSON形式ファイルで返すこともできるが、文字列が単引用符でくくられている。

PHPのjson_decode関数がデコードできるのは、文字列が二重引用符でくくられている「正しい」JSON形式ファイルだけなので、この顔認識PHP関数が返すJSON形式ファイルの単引用符を、わざわざ二重引用符に変換する必要があるという、ちょっと残念な仕様。

それでも手で一生懸命選別するよりは楽。

正月休みのヒマにまかせてGoogle Chrome拡張機能とPHPで下らないバッチ処理の開発

正月連休のヒマな時間に、非常にくだらないことに時間をかけたけれど、これもすべて、今後余計な時間をかけずにすむようにするため。

中国上海のAKB48姉妹グループ、SNH48の中国ツイッター(新浪微博)にある全SNH48メンバーの全ツイートから、画像ファイルだけをローカルディスクにダウンロードするプログラム作成。

何が面倒かというと、新浪微博はまともなプログラムで画像ファイルをダウンロードしようとするとWeb APIを利用してOAuthでユーザ認証する必要があるのだが、そもそもAPIの利用申請の審査を通してくれない。

なので今まではやむを得ずVisual Studio 2015の無償のCommunity Editionで、Web Browserコントロールを埋め込んだMDIアプリを作って、埋め込みWebブラウザで手動で認証を済ませるという方法をとっていた。

その上で、新浪微博の画像アルバムページが内部的にWebブラウザに返しているJSONファイルの、アカウントごとのURLの生成規則を解析済みだったので、SNH48各メンバーの新浪微博のユーザIDからJSONファイルのURLをまず生成する。

そしてクライアント側でJSONファイルを開くデフォルト・アプリケーションをInternet Explorerに変更し、JSONファイルをVB.NETのWeb Browserコントロールで開くようにした上で、JSONファイルをVB.NETで解析し、個々の画像ファイルのURLをJSONファイル内のデータから生成する。

ここまでやってようやく、認証なしで新浪微博のWebサーバから画像ファイルを直接ダウンロードできるようになる。

ここまでの処理を単一のWindows用MDIアプリケーションで開発していたので、比較的効率よく無人ダウンロードできていた。

ところが年末に何かのアプリケーションをインストールしたこと、あるいはWindows 10の何かの更新モジュールが原因で、このVB.NETアプリケーションに埋め込まれたWeb Browserコンポーネントが、Adobe Flash Playerをロードしたとたんにクラッシュするようになった。

新浪微博のトップページにFlashがあるのはどうしようもないので、画像ダウンロードの自動化が不可能になり、困ってしまった。

とにかくOAuth認証を回避できる方法はないかといろいろ考えた結果、Google Chromeの拡張機能で実現することにした。こんどは使用する言語がVB.NETからJavaScriptとjQueryになる。

こちらはJSONファイルのダウンロードから解析まで、意外にあまり手間をかけずに拡張機能として完成させることができた。最初からこの方法にしておけばよかった。

しかしGoogle Chrome拡張機能はセキュリティ上の制限で、ローカルディスクにファイルを書き込むことができない。本当は画像ファイルをダウンロードする処理まで拡張機能で自動化したかったが、不可能なので仕方ない。

なのでGoogle Chromeのデバッグコンソールに、拡張機能からログをCSV形式でログを書き出すことにした。

全メンバー分の全画像への直接リンクURLと、ローカルディスクに保存するときのファイル名を、コンソールログにCSV形式で書き出し、拡張機能のバッチ処理(拡張機能をバッチ処理で使うなんてほとんどないと思うけれど)が完了した後、コンソールログをローカルディスクに保存する。

ここからは今度はPHPを使って、このコンソールログを1行ずつ解析しつつ、じっさいに画像をダウンロードして、ローカルディスクに所定のファイル名で書き込むバッチ処理を書く。

以上で、途中、Google Chromeのコンソールログを保存するところだけ手動になるが、その他は全自動。しかもすべてGUIなしの処理なので、VB.NETアプリケーションよりもはるかに高速。

過去数か月分の画層ファイルのダウンロードで比較すると、少なくとも20倍以上は高速化した。

おかげでダウンロード後の画像ファイルから、本当にそのメンバーが写っている写真をより分けて、ブログにアップロードする最後の純粋な手作業部分が、まったく追いつかなくなってしまった。

PHPで手軽に使える顔認識APIがあるといいのだが。そうすれば少なくとも人間の顔が写っていない画像はあらかじめ排除できるので。

こういう下らないことをネタにして、はじめていろんな言語の勉強になったりするので、下らない趣味を持つことも悪くない。