スキップしてメイン コンテンツに移動

投稿

2020の投稿を表示しています

Thunderbirdで標準搭載されたPGPによる暗号化を利用する

電子メールクライアントのMozilla Thunderbird 78でやっとOpenPGPの機能が標準搭載された。


とはいっても、78.0.1ではまだ不完全で、78.1.0でほぼ完成したようだが、デフォルトではOpenPGPは使えない。今後リリース予定の78.2からデフォルトで動作するようになるらしい。

78.1.0で使うためには、「オプション」の「一般」の一番下の「設定エディター...」を開き、 mail.openpgp.enable を true にする必要がある。 ただし、設定をいじると動作保証対象外になるので、自己責任で対応すること。 今回の動作検証ではWindows 10上で実行させた64ビット版Thunderbird 78.1.0を使っている。


設定を済ませたら、「エンドツーエンド暗号化」のOpenPGPの「Add Key...」で秘密鍵をインポートもしくは作成する。 GnuPGなどですでに鍵を作っているのであれば、それをエクスポートして読み込ませるだけだ。


公開鍵をインポートする場合、「OpenPGP Key Manager」の「Import Public Key From File」で対応可能だ。

早速、メールを作成し、「セキュリティ」から「暗号化が必要」と「このメッセージにデジタル署名」を選択して送信する。


メッセージは自分自身に送っているのであまり意味はないが、それぞれの機能がきちんと動作していることを確認することはできる。


この通り、暗号化とデジタル署名ができていることを確認できた。


PGPは昔からあるが、自分の周りでは使われているのをほとんど見たことがない。 Thunderbirdに標準搭載されたのを機に、広まってくれないだろうか。

古典的で未来的な人にやさしい顔映像匿名化

現代では簡単に写真や動画を撮ることができる。それは、個人情報の流出と直結する。 特に動画に映った人物について、匿名化することはなかなかに大変だ。 目線やモザイク、塗りつぶしなどで顔を隠すケースをよく見かけるが、個人的にはちょっと微妙。犯罪臭がするし、淫靡な印象を与えてしまう。 ほかにもアイコンやシンボルで顔を隠したりすることができるツールなどもあるが、ちょっと自分好みではないし、何よりオリジナリティに欠ける。

そこで、古典的でもあり、未来的でもある、そして新しい、そんな顔映像匿名化を考えてみた。

匿名化するにあたって、まずは顔、特に目と鼻を検出できなくてはならない。 幸いなことに、Keypoint R-CNNモデルを使えばそれが可能になる。 利用するだけならば、PyTorchのチュートリアルレベルの知識を持っていれば十分。

そして、コードはできるだけシンプルで分かりやすく、その場ですぐに書けてしまえることが重要だ。 これは大事なことで、たとえ面白そうな技術でも、それを体験できるまでに時間がかかれば多くの人は興味を失ってしまう。 体験して理解さえすれば、達成感と面白さを実感できるし、次を目指す動機づけになる。

閑話休題。さて、今回作るのは、動画の顔画像の匿名化だ。そして、古典的で未来的、何のことだと思われるかもしれないが、使っている技術は新しく、できたものは懐かしいということ。 具体的には、顔画像に細工をして「へのへのもへじ」にしてしまうのだ。とはいっても、目と鼻を置き換えるだけなので「のもの」を使う。 江戸時代中期にはよく知られていたという「へのへのもへじ」は、まさに古典的で懐かしいと言えるだろう。

作成したコードは foota / nomono-anonymizer にある。使い方は次の通り。

$ python nomono-anonymizer.py [入力動画ファイル名] [出力動画ファイル名]

動画はフレームごとに画像データとして処理され、それを事前学習したKeypoint R-CNNのモデルに推論をさせる。 モデルは画像データに対し人物領域を検出し、それに対して目、鼻、耳、肩、肘など、17のキーポイントを推定する。 今回は、右目・左目・鼻の3つのキーポイントを利用し、取得した座標に対して、画像データ上に「のもの」の文字を書き込むだけだ。 あとは…

人工知能が見ている世界

今の世の中、そこら中に人工知能(AI)と呼ばれるシステムがあふれている。特にディープラーニングによるニューラルネットワークモデルを使ったシステムは高度な処理が可能であると広く考えられているようだ。では、それを使ったAIはどのようにこの世界を見ているのだろうか。

ディープラーニングで得られる特徴を含んだ値(特徴マップ)がAIの視覚と呼べるだろう。AIについて扱った教材では、ディープラーニングにより学習されたニューラルネットワークモデルの特徴マップを例示していることがあるが、特定の画像に対する特定の特徴の一部を載せているだけなので、AIがどのように世界を見ているのか、それだけで判断するのは難しい。

そこで、任意の動画に対してニューラルネットワークモデルを使って特徴マップを映像化することにした。今回、対象とするネットワークアーキテクチャは、AlexNetVGG19だ。それぞれ2012年と2014に公表されており、どちらのアーキテクチャもImageNetの分類できわめて高い性能を誇っている。

特徴マップの映像化を行うにあたって、まずは動画処理のためにffmpeg-pythonを利用することにした。これは、名前からもわかるようにPythonのFFmpegラッパーで、動画を扱うのにはかなり便利なライブラリとなっている。次に、AlexNetとVGG19を利用するためにPyTorchとそのパッケージであるtorchvisionを利用した。torchvisionにはAlexNetとVGG19の学習済みネットワークモデルも用意されている。使い方は簡単で、例えばAlexNetなら、以下のコードでネットワークモデルをすぐに使うことができる。

model = torchvision.models.alexnet(pretrained=True)

今回は学習をせず用意されているモデルを使うだけなので、推論モードにして勾配計算をしないように model.eval() と torch.set_grad_enabled(False) を記述しておく。

処理の流れは次の通り。入力データとして適当な動画ファイルを用意する。動画ファイルが読み込まれると、ffmpegによりフレーム画像を一枚ずつ読み出し、それをnumpyで配列に変換。変換されたデータをPyTorchのモデルに渡す。前…

12年前の非接触型ICカードリーダPaSoRiで遊ぶ

最近ずっとリモートワークだったので、これを機に書斎の整理整頓を行った。段ボールに無造作に放り込まれたPC関連機器や電子ガジェットを漁っていると、2004年10月に発売されたソニーの非接触型ICカードリーダPaSoRi RC-S320が出てきた。2008年3月に購入したので実に12年以上前のモノだ。



このまま捨て置くのは勿体ないし、ちょっと興味をそそられたので、以前のブログ記事に上げたコードがちゃんと使えるか、最近新調したWindows 10搭載PCで確認してみた。

当然、ドライバが入っていないのでそのままでは動かない。早速最新のドライバを入れようと思ったが、実はRC-S320はとっくに販売終了していて、新しいPaSoRiとはドライバが違う。まあ、そりゃそうか。調べたところ古いドライバ(NFCポートソフトウェア Version 5.4.8.6)を落としてくれば動くことが分かった。動作確認環境はWindows 8.1までみたいだけど、まあ、大丈夫でしょ。

ドライバを入れたところ、デバイスマネージャーでちゃんと認識された。よし、これで準備OKだ。動かしてみよう! …いやまてよ? 今時Python2は許されない。ということでPython3のコードにちょこちょこっと修正して、これで良し。PaSoRiの上にモバイルSuica機能を搭載したAndroid端末を置いて、さっそく実行 python read_felica.py (カタカタカタッターン!)

OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。

あ、これよく見るやつだ。実行パス名にスペースとか入ってちゃんと認識しないやつだ。と思ったけど調べてみるとパス名は問題ないみたい。あとは、そうそう、64ビット環境で32ビットのライブラリ使ったとか。それだ! 実行環境はPython3の64ビット版なので読み込むDLLも64ビットじゃないと。でも、利用させてもらった felicalib は32ビット版しかないみたい。0.4.3から64ビット版にも対応するみたいだけど、最新版の0.4.2が2008年6月リリースでそれ以降出ていないということはもう出ない可能性が高い。ちなみにソニーのドライバは当時64ビット版が存在しなかったみたいだけど、今は入っているようだ。

それならとり…