コンユウメモ @kon_yu

作ったガラクタとか、旅行とかの話

【今年もうっかり作っちまったぜクソアプリ!】軽量!リアルタイムで股間モザイク処理

ハッピークリスマス キョウコ ハッピークリスマス ジュリアン So this is Xmas

やあみんなクソアプリ Advent Calendar 2017 - Qiitaの25日目のトリの記事だよ!

概要

  • OpenCVを用いた画像認識で股間にリアルタイムでモザイクをかけるアート作品作成した
  • 本手法は以前Kinectを使って作成したものと違いRGBカメラのみで実現できるところに優位性がある
  • Kinectと同様に人体のボーンを取れるOpenPoseはハイパフォーマンスのマシンを必要とするが本手法はOpenCVの顔認識機能のみで実装されており低スペックなマシンでも実行できる
  • 小難しく書いているけど要は「チンチンにリアルタイムにモザイクをかけたよ」という話である
    • こんな感じでチンチンにモザイクがかかるよ!

実際のチンチンにモザイクがかかった画像

f:id:kon_yu:20171225012848p:plain

従来手法

2010年、マイクロソフトからKinectという画期的なデバイスが発売された。 KinectはRGBカメラと距離カメラから、複数の人間を認識して体の主要な部位の座標(ボーン)を取得することができる。 このデバイスの登場で、ラップトップでもボーンを取得するのが用意になり、Processingや各種言語で利用できた。

このKinectのボーンを取得できる機能を利用して、2014年に股間にリアルタイムでモザイクをかけるというメディアアート作品を発表した(あくまでアートである) realtime_crotch_mozaiq

前述の通りKinectは体の関節などの各部位の点を取得できる。 Kinectで股間領域を特定する場合、股間そのもの位置は取得できないためヘソの位置、両足の付け根付近の位置から股間領域を計算しモザイク処理をした。

Kinectを用いた股間領域特定手法の概念図

今回提案するOpenCVで顔認識を用いた手法

残念なことにKinect自体はディスコンになってしまった。画像のみでボーンを取得できるものライブラリが現れた。今年2017はRGBカメラとディープラーニングを用いて人間の体の座標を取得できる OpenPoseというものが発表された。 OpenPoseは高性能であるが、マシンパワーを必要とするし、環境構築に時間的、費用的なコストがかかる。

そこでもっと簡易に、OpenPoseを使うこと無く、股間を位置を推定しモザイクをかける方法を考案した。

システム構成

  • OpenCV3
  • Python3
  • MacBook Pro搭載のフロントカメラ

OpenCVRuby用のライブラリはOpenCVは2系までしか対応しておらず。Processingも2系しか対応していなかった。

こういうのは最近はPythonの方が環境構築が楽だ

提案手法詳細

従来からあるOpenCVの顔認識機能はかなり低コストに画面上の顔領域のピクセル位置を取得することができる。

また顔の領域の鉛直線下方にあるのはあらゆる人種においてもで自明である。しかし、ある程度の位置は絞れても、顔の大きさと胴体の長さは人種、年齢などによってブレが大きい。

ある程度の汎用性を持たせつつ、股間領域を推定する方法は無いだろうか?

先日東京大学暦本研究室のオープンハウスを見学した際に、ある大学院生の研究の実装方法がこの問題を解決するヒントとなった。

その実装方法とは人間が正面を向いているか下を向いているの判定を頭の領域の中から髪の毛の黒い領域の割合で決めているというものだった。黒い領域が多ければ下を向いていると判定する。

「これだ!」天啓が降りてきた。

少なくとも多くのアジア人の大人が持っている股間付近の黒いもの、そう陰毛である。

つまり顔の位置から鉛直方向にある程度下の領域から、黒っぽい色を探し出し、そこから下方の一定領域が股間領域であると推定できる。

画像からある色の領域を二値化するコマンドがあるので陰毛の座標探すのは容易である。 黒い領域を取り出した際に、下記画像のように白い領域の用に白(255)となる

黒のフリースを着た胸から上の画像

プログラムの概要

このような処理をループ処理することにより股間にモザイクをかける処理を実装している

  1. カメラから画像を取得する
  2. 画像から顔認識する
  3. 画像から黒い領域を取得する
  4. 顔の位置から下方向にある程度幅をもたせた探索領域を部分領域(Region of Interest)で取得する
  5. 探索領域にある黒い領域のピクセル位置から判断し陰毛領域を取得する
  6. 陰毛領域から一定サイズの四角い領域をモザイク処理する

OpenCVの顔認識機能を用いた股間領域特定手法の概念図

デモ動画

リアルに股間丸出しででも動画を取ったけれども、あまりにもリアルだったので、 黒いモバイルバッテリーで試したデモ動画をアップした(リアルバージョンは実際にオレに会ったら見せるよ)

ソースコード

github.com

今年も無駄に一生懸命作ってしまった。やっぱり技術は無駄遣いしてなんぼだよね。そうは思わないかい?

今回参考にした書籍たち

画像処理・機械学習プログラミング OpenCV 3対応

画像処理・機械学習プログラミング OpenCV 3対応

【羽田・成田空港からわずか5時間】フルスタックエンジニアのワイが深圳の魅力を語り尽くす

f:id:kon_yu:20171014172023j:plain

この記事の目的

【羽田・成田空港からわずか5時間】Android / iOS エンジニアのワイが深圳の魅力を語り尽くすで友人の平野くんが、旅慣れていない人が香港経由で深センに行く方法を書いてくれている。

平野くんの丁寧な記事は大変ありがたい、しかしもっといい加減に準備しても深センぐらいいけるっしょと言うことで ここはひとつ旅慣れている人向けの記事を書いてみようと思った次第である。

本文の見出しは全て先の平野くんの記事を真似して書いている。 平野くんは大学からの友達だし、先日も一緒にMaker Faire Shenzhenを見に一緒に深センに行ったんだから許してくれるだろう(許可は取ってない)

Maker Faire ShenzhenのテーマはMakers Go Proというのが深センらしい f:id:kon_yu:20171110163006j:plain

この記事で解説すること

  • ガッツと気合でなんとかなるということ
  • 困ったときは地元の人のお世話になろう
  • 逆に日本に来た旅行者に積極的に助けてあげよう

この記事で解説しないこと

  • 細かい旅行の仕方

深圳とは

  • 計画都市
  • ハードウェアスタートアップの楽園
  • 世界遺産はないので、スマフォを使った中華サービスやメイカーなどの文脈に興味がないとすぐ飽きるだろう
  • 基本すんげぇ都会で「洗練された中国みたいな街」がたくさんあり驚く
  • 深セン羅湖商業城は相変わらず偽ブランド品をしこたま売っているし店員がしつこくて安心する
  • 三和ゴッドな人々のいる辺りの治安は全然良い、横浜の寿町の方がオラついてる
  • 後はググれ(香港超えたらGoogleつながらないからホテルのWifiなどでつなぐ場合は百度かBeingを使うが良い)

相変わらずしつこい店員がいる羅湖商業城 f:id:kon_yu:20171210150750p:plain

中国の山谷でおなじみの三和ゴッド f:id:kon_yu:20171015121249j:plain

準備

パスポート

とりましょう。

10年有効なパスポートを使っていて、羅湖のイミグレで8年目のオレが通ると偉い人に再度確認された。 2回とも女性だった。女性の職員の方が真面目に職務をしてるのだろうか。

ビザ

香港、中国とも2週間ぐらいの滞在はビザを取得しないで問題なし。 イミグレでにこやかに挨拶して、通過の際に言うシェイシェイの練習をしましょう。

飛行機の予約

スカイスキャナーで適当に安い便を予約しましょう。 深セン空港に行くより香港行きのほうが便数も多くて安い

ホテルの予約

Booking.comやAgodaで取れる。Agodaの方が休め 2000円ぐらいからダブルベッドルーム。 YMCAとかもありドミトリーだと1000円ぐらいで泊まれる。 安宿街が密集しているエリアがあるわけではないのでドミトリーに泊まりたい場合はWebで予約するほうがいいかな。

とりあえず新しい街についたら安宿街の場所をそこら辺の人に聞いて直行するというような旅慣れてる人がやる作戦が使えないのだ。

外国人が泊まれないホテルがあったりするらしいが、とりあえず飛び込んでみて断られてみるのも旅の醍醐味。 そういえば2010年ぐらいにイミグレ出てすぐの羅湖あたりのホテルに飛び込みで泊まったことがあるので、イミグレ周辺は外国人宿泊可能なホテルが多いかもしれない。

三和ゴッドな人々のいる辺りにある安宿の看板、香港のチョンキンマンションより雑 f:id:kon_yu:20171015121944j:plain

f:id:kon_yu:20171015121426j:plain

SIM

Simは買ったほうがいい、全然中国本土は英語通じないの。なのでマップアプリと翻訳アプリは使えるようにしてきたい。 英語はホテルだとぎり通じる。レストランは通じない。羅湖のイミグレ出てすぐの高級なレストラン以外はイングリッシュメニューもない

香港空港でSimは買えるのでそこら辺を歩いている職員やインフォメーションカウンターの人にどこで買えるか聞いて トラベルSimを買おう

スマフォが広まったおかげで旅行が便利になったよねー。 数年間は海外旅行に行ったらWifi使えるカフェを探したりする必要があったが、 現在はトラベルSimでどこでも接続できるようになって便利だよね。

SIMフリーの携帯電話

これはいる。適当にAmazonとかじゃんぱらとかで買おう

海外キャッシングが可能なクレジットカード

キャッシングのほうが日本円から中国元にするより安いよね。イミグレ出てすぐの中国銀行のATMならだいたい下ろせる。 イミグレ出て普通の街に行くとVISA、Masterが使えなくなる。

[2020年アップデート] 中国の二大決済サービスの一つAlipayでTourist passという機能がついて、クレカで中国の電子決済の機能が使えるようになった。 2019年に深センに行った際はこの機能を使いまくった。

www.chinatours.com

アプリケーション

スマフォのキーボードで簡体語の手書き入力を追加しておこう。コレやっとかないと後述する地図で場所の入力ができないぞ

WeChatいれて、WeChat payを使えるようにしましょう。 ホテルのレセプションで数百元渡して自分のアカウントに送ってもらうおう。やり方とかはホテルの人に聞けば大丈夫。

とここまで書いたが、別に無くても余裕で現金で旅行ぐらいはできるから心配しなくていい。 中国国内は多分中国のカードしか使えなくて、VisaやMasterカードが使えないから、手持ちが足りなかったらカードで払う作戦が使えないのだ

地図アプリは僕らの相棒Google MapがGoogleが中国撤退したのでマップが古いらしい。 高德地図を入れましょう。百度地図もあるが高德地図の方が正確だと聞いたことがある。

Google翻訳アプリ、これは英語が通じない中国本土での翻訳コンニャク。

他にもWechatで会話している中国人と友だちになると会話のウインドウで本体の言語設定に翻訳してくれる機能がある。 WeChatの方の翻訳性能はいまいちなのでGoogle翻訳アプリを入れておくほうがいいかなぁ

Mobikeの登録

シェアリングMobikeは日本でアクティベーションすると中国でも使えるので入れると良い。 自転車で街を走ると、いちいちタクシーに乗ったり地下鉄に乗るより2,3駅なら自転車に乗った方が楽しい。

街の大きさがわかるし。オレはいつも海外旅行に行ったらチャリンコを借りる。 歩道橋の手前で乗り捨てて、渡ったらまた違う自転車に乗る感覚はおもしろい。GTAのようなゲームをリアルでしている感覚だ。

反対方向からくる自転車とすれ違う際には右に避けるのが良い。だいたい中国人は右に避ける。 おそらく車が右側通行なのそういう感覚になるのだろう。オレが逆にとっさに左に避けようとしてしまう傾向も日本が左側通行だからだろう。 こういう小さい発見は日本にいるだけでは気づかないので面白い。

あとライトがついてないので暗くなるとめっちゃ怖い。

程度のいいMobike(程度の悪いやつはブレーキの効きが悪かったり、ハンドルが曲がってるので注意なんだぜ) f:id:kon_yu:20171112093951j:plain

紙とペン

筆談や買い物をする際の値段交渉に使う。 図もサッて書けるし。アナログ最強説。

覚えておくと便利な中国語(いい加減な人向け)

シェイシェイとニーハオは基本として

食事の後のお会計を頼むマイダン

無いを表すメイヨー 中国人はすぐメイヨーっていうので食い下がってもメイヨーが連発されたらマジでないので諦めましょう)

WeChat payで支払いたいときは、WeChatを開いたスマフォを見せながらウェイシンというと通じる。

何かしてもらったら心からシェイシェイと言いましょう

日本を出発する

自動化ゲートを使うと楽しい。是非登録しておこう。

香港に着いたら

空港についてら、Mainlandって書いてる看板に従うと深セン行きのフェリーに乗れる。コレに乗ると香港に入国すること無く深センにいける。

この間香港空港からフェリーで深センに行ったらフェリーターミナルのATMが全部しまっていて手元に中国元が無かったら詰んでるところだった。 なので空港で中国元をゲットしておこう。

ATMで中国元を下ろせるっぽい。ただし中国元が下ろせるATMが空港内で見つからない可能性もあるので、空港内にたくさんあるレートの悪い両替所で現金でも両替できるよう日本円もいくらか用意しておこう。

香港に入国してたら深センに行く場合は、インフォメーションカウンターで聞いてみよう。基本的にイミグレとかは人の流れについて行き、ゲートではにこやかにやり過ごそう

深センについたら

イミグレ過ぎたら後は好きにしよう。

羅湖を辺りは2009年頃に行ったときは、大量のババアが怪しげなマッサージに誘うべくたむろしていたが、いまはそんなの全然いない

移動について

地下鉄網が発達しているので、地下鉄とシェアリング自転車で大体の移動は問題ない。

地下鉄では深セン通っていうSuicaみたいのが売ってて便利だけど、正直無くても別にいい WeChatなどでなんでも払えるより別に感動はない。みんな深セン通を使って移動してるから自動券売機が大体混んでない。

余談だけど(と言うか、この記事全部が余談みたいなもんなんだけど)深セン通もSuica同様にディポジットを含んでいる。 深セン通自体は100元で売っており、そのうち50元分交通費に使えて、残りはディポジットある。

なので先日深セン通を払い戻ししてみようとチャレンジをしてみたが、できなかった。たぶん窓口の係員が面倒臭がったためだと思われる。 この辺は相変わらず中国らしい。

ちなみに香港でも同じようなオクトパスカードと言うものが有り、こちらのカードの払い戻しは成功している。

最後に

オレが初めて中国に行ったのは2009-2010年の年越しで香港、中国南部を旅行したときでした。まだ胡錦濤の時代だった。 スマフォもないし、地球の歩き方を片手に旅行していたものよ

7年経て、習近平時代となった深センはその頃よりも相変わらず公的な機関はやる気ないけど街も人もクリーンになってて驚いた。

中国全体としてペイメントのシステムの浸透具合と便利さや、それをベースとする各種サービス(シェアリングサービスとか)は凄い。 ハードウェアスタートアップの楽園であることは下記に紹介する高須さんや藤岡さんの本の通りだ。

深センの情報についてWebで調べるとWeChat Payや深セン通がないと旅行できないような書きっぷりなのをたまに見かける。あったらとても便利だけど無くても普通に旅行できるということを書いておきたかった。

インターネットで調べても古かったり実際に言ったら違ってたなんてことはたくさんあるし、旅に出たら現地の人に頼って、その親切に素直に甘えるのが良いと思うんだ。

その代わり日本に来た外国人が困っていたら積極的に声をかけて親切を循環させようぜと思うわけなんだな(超いいこと言ってるよ)

今年になって中国の凄い、日本のほうが遅れてるという記事が大手のメディアに登場してそれがバズり、またそのアンチのような記事やツイートで盛り上がってると言うような状態だ。 どちらも記事も読んでもなんか違うなぁという感想を持っている。

漠然とどちらがより優れていると主語がデカイから、アンチも生まれやすいのかね。 反発する人も深センぐらい適当に行ってみれば、たしかにすげーとか、思ったより大した事ないとか肌で感じれて面白いよ。知らんけど

ロケットビーバイ

入院を支える技術(入院してるもんでおうちというか入院をハックした)

遅ればせながら、おうちハック Advent Calendar 2017の二日目でございます。

なんで遅れたかってぇと入院の準備でバタバタしてたもんでして、そんでもって現在入院中なわけ。 やっとこ熱も引いて頭も回るようになってきたのでこうして記事を書いてるって寸法さ。

ここは一つおうちハックの概念を広げて寝泊まりしている場所のハックをしてみようじゃあないか。 というわけでタイトル通り入院を支える技術のはじまりはじまり

入院しているときの問題

手癖の悪いやつってぇのは古今東西どこにでもいるもので、病人だらけの病院でも居るとか居ねぇとか

ところがどっこい病院側も馬鹿じゃねぇ、病室には鍵のかかるセーフテーボックスってぇのがこしらえてあるのよ。 財布やスマフォをしまって置けて一安心。

ここで問題が発生しちまうんだ。こちとらおうちハッカーmacぐれぇ病室に持ってくるってもんよ。 mac book pro 13inchはセーフテーボックスに入れねぇんだ

困ったときは(脳内の)長屋のご隠居に相談するしかねぇ

「ご隠居ー、ご隠居ー」

「全く誰だい騒々しいねぇ。おや熊さんじゃないか、どうしたいそんなに慌てて」

「これこれこういう塩梅ぇなもんで参っちまって」

「落ち着きなさい熊さん、そんなときはAppleScriptを使うんじゃ」

そうして熊さんは入院しているベッドの上でペコペコAppleScriptを書いて、Automatorを使って盗難防止のスクリプトを作りましたとさ

作ったもの

電源がACアダプタか、バッテリ駆動かを判別してバッテリ駆動だった場合は盗難されたとみなす。

盗難と判定したら音量を最大化した後「泥棒!」と喋る

注意 天板を閉じたときにはスリープしないようにInsomniaXなど使いましょう

デモ動画

デモ動画は音量をかなり絞って撮影している。だってここ病室だよ


入院を支える技術 mac盗難防止

実装詳細のソースコード

repeat
    #バッテリーかACアダプタで接続しているかコマンドラインで実行し、その1行目を取得する
    set result to (do shell script "pmset -g ps")
    
    # 1行目にBatteryが含まれていたらバッタテリー接続とみなして、セーフティー機能発動
    if (result contains "Battery Power") then
        # ボリュームを最大値(7)にする
        set volume 7
        say "泥棒!"
    end if
    #1秒スリープ
    delay 1
end repeat

pmset -g psというコマンドが肝で、コレを実行するとバッテリー情報が取得できる。実行結果は以下のような感じ

pmset -g ps

# ACアタプタ接続中の場合
Now drawing from 'AC Power'
 -InternalBattery-0 (id=hogehoge)   50%; charging; 1:30 remaining present: true

# バッテリー駆動の場合
Now drawing from 'Battery Power'
  -InternalBattery-0 (id=hogehoge)  64%; charging; 0:00 remaining present: true