ObscuraCamで顔写真に自動的にモザイクをかける(Android)

この記事で紹介されていたObscuraCamを試してみたところいい感じです.

画像の中の顔を認識してモザイクをかけてくれます.認識率は思ったよりも良さそうです.認識に漏れても簡単に手動でモザイクをかけることも出来ます.手動の場合,モザイクの他に黒塗りやマスク(ヒゲメガネ,スマイリー,マスクマン)も選べます.

New photo added to gallery
Screenshot_2018-07-13-21-22-14

イラストにも試してみましたがやはりあまり認識しません.でもおじさんは認識して以下の今井哲也(@imaitetsuya)さんのイラストだとそれぞれ蔵六と内藤だけモザイクに.

イベントとかで写真を撮ってすぐ投稿というときに良さそうです.

環境

  • LGL22
  • Android 4.4.2
  • ObscuraCam v4.0.1-alpha-1

Mailmanのban_listを画像にする

最近Mailmanにbotからであろう登録が沢山やってくるようになりました.登録メールアドレスは大抵メジャーなフリーメールアドレスで生きているようなのですが,quotaや転送量のエラーとなって帰ってきます.これらのエラーメールでメールボックスがあふれて辛いです.

Mailmanにcaptchaか何かを設置できるプラグインとか無いかなと探してみたのですが,公式ではないようです.sourceを修正してGoogleのReCaptchaを実装している人は居ますが,バージョンアップのたびにパッチするのは面倒です.最近もセキュリティホールが見つかっていますし放置するわけにも生きません.

該当メールを見ると幸いメールアドレスは使い回しでバリエーションは多くありません.とりあえずMailmanのban_listにこれらのメールアドレスを登録してmailqに溜まっている該当メールはdropしました.1週間くらいしたらリモートからのエラーメールも無くなって静かになると良いなと思っています.
ban_listに登録しましたが,もしかしたらbotではなく普通に登録しようとしてメールボックスがあふれている人も居るかもしれません.それが解るようにban_listを申し込みページに表示することにしました.そのまま表示するのは良くない気がするので画像にしてノイズを散らして波型変形をかけてみました.
Mailmanのconfig_listコマンドで設定を出力してban_listをファイルに書き出し,Imagemagickのconvertコマンドでノイズと波型変形のフィルタをかけて画像を生成しました.
こんな感じの画像になります.これを申し込みページに説明と一緒に載せます.(ノイズのせいで容量が大きく……)

image

cronに登録しました.

$ sudo -u list crontab -l|grep ban_list
39 * * * *      /usr/lib/mailman/bin/config_list -c -o /dev/stdout users|grep ^ban_list |sed -e 's/^.*\[\|\]\|'\''\|'\ '//g'|sed -e 's/\@/ at /g'|tr -s ',' '\n' | sort -n > /var/lib/mailman/lists/users/ban_list && convert -size 1024x600 -background '#FFFFFF' -density 36 -gravity Center -fill black -font SetoFont label:"users ban_list `stat -c \%y /var/lib/mailman/lists/users/ban_list|cut -f1 -d.`\n\n`cat /var/lib/mailman/lists/users/ban_list`" -attenuate 5 -noise 7 +noise Gaussian -wave 15x`expr \( 100 + $((RANDOM \% 100)) \)` /var/lib/mailman/archives/public/users/ban_list.jpg

……長いですね.それに画像サイズ固定なのでlistが増えると文字サイズが小さくなってしまいます.てことでscriptに.

#!/bin/sh
 
LISTNAME='users'
FONT='SetoFont'
BANLIST='/var/lib/mailman/lists/users/ban_list'
IMAGE='/var/lib/mailman/archives/public/users/ban_list.jpg'
 
# ban_listを抽出してファイルに書き出し
/usr/lib/mailman/bin/config_list -c -o /dev/stdout ${LISTNAME} | grep ^ban_list | sed -e 's/^.*\[\|\]\|'\''\|''//g' | sed -e 's/\@/ at /g' | tr -s ',' '\n' | sort -n > ${BANLIST}
 
# ban_listの行数によって画像高さを計算
BANWC=`wc -l ${BANLIST} | cut -d -f1`
HIGHT=`expr \( ${BANWC} \* 60 + 120 \)`
 
# 画像に書き出す文字列を作成
LABEL="users ban_list `stat -c \%${BANLIST} | cut -f1 -d.`\n\n`cat ${BANLIST}`"
 
# 波型変形の波の深さを計算
WAVEX=`expr \( 10 + $((RANDOM % 10)) \)`
WAVEY=`expr \( 100 + $((RANDOM % 100)) \)`
 
# 画像作成
convert -size 1024x${HIGHT} -background '#FFFFFF' -density 36 -gravity Center -fill black -font ${FONT} label:"${LABEL}" -attenuate 5 -noise 7 +noise Gaussian -wave ${WAVWX}x${WAVEY} ${IMAGE}
 

てことでとりあえずの対処療法ですが…….

環境

$ lsb_release -d
Description:    Debian GNU/Linux 9.4 (stretch)
$ uname -m
x86_64
$ dpkg-query -W mailman
mailman 1:2.1.23-1+deb9u2
$ dpkg-query -W imagemagick
imagemagick     8:6.9.7.4+dfsg-11+deb9u4

マルチUSB書き込みツールのPopsicle

USBメモリなどにOSイメージなどを書き込む時GUIだとEtcherやUNetBootinなどのツールを使ったりしますが,同時に複数の媒体への書き込みに対応していません.同時に書き込みたい場合私はteeコマンドとddコマンドを利用したりしていましたが,PodsicleというツールがGUI/CUIで同時書き込みに対応しているようなので試してみました.Rust製MITライセンスです.

導入

$ git clone https://github.com/pop-os/popsicle
$ cd popsicle
$ make
$ sudo make install

make installだとGUT/CUIの療法が導入されます.make install-gtkだとGTK(GUI)のみ,make install-cliだとCLIのみです.

GUI利用

popsicle-gtkを起動すると書き込みイメージの選択画面になります.ここでイメージを指定すると読み込みチェックが走りしばらく待たされます.(CUIではチェックしないことも出来る)
20180708_08:07:50-31395

次に書き込み先のデバイス選択です.書き込みたいデバイスをチェックします.この画面になってからUSBメモリの抜き差しをしても反映されるので便利です.ちなみに内蔵SD cardの/dev/mmcblk0`はここにはでてきませんでした(CUIでは利用できます).
#SD-USB変換でUSB経由だとSD card書き込み可能です.

20180708_09:07:39-21924

書き込み中画面です.複数デバイスの場合はそれぞれプログレスが表示されます.

20180708_09:07:54-30224

書き込み完了.

20180708_09:07:17-32223

CUI利用

CUIはpopsicleコマンドです.

$ popsicle -h
popsicle_cli 0.1.5
USB Flasher
 
USAGE:
    popsicle [FLAGS] <IMAGE> [DISKS]...
 
FLAGS:
    -a, --all        Flash all detected USB drives
    -c, --check      Check written image matches read image
    -h, --help       Prints help information
    -u, --unmount    Unmount mounted devices
    -V, --version    Prints version information
    -y, --yes        Continue without confirmation
 
ARGS:
    <IMAGE>       Input image file
    <DISKS>...    Output disk devices

イメージファイルと書き込み先のデバイスを指定して実行すると書き込めます.GUIでは/dev/mmcblk0は出てきませんでしたが,CUIでは書き込めました.

$ sudo popsicle ~/Downloads/2018-06-27-raspbian-stretch.img /dev/sdc /dev/sdd /dev/mmcblk0

ちなみにddで書き込む時は圧縮イメージファイルを展開しながら書き込むことが多い(zcat image.gz|pv|sudo dd of=/dev/sdz bs=4M)のですが,そういったことは出来なさそうです.

$ zcat ~/Downloads/2018-06-27-raspbian-stretch.zip | popsicle -u - /dev/mmcblk0 
popsicle: error with image at '-': image could not be opened: No such file or directory (os error 2)
$ zcat ~/Downloads/2018-06-27-raspbian-stretch.zip | popsicle -u /dev/stdin /dev/mmcblk0 
popsicle: error with image at '/dev/stdin': image was not a file
$ mkfifo zip.img
$ zcat ~/Downloads/2018-06-27-raspbian-stretch.zip > ./zip.img  &
$ sudo popsicle ./zip.img /dev/mmcblk0
popsicle: error with image at './zip.img': image was not a file

関連

端末上で遊べる障害物避けゲームのascii runner

端末上で遊ぶ障害物をスペースバーでジャンプして避けるゲーム.自キャラの4本足の生き物の動きがコミカルです.でも案外難しい.
macOS/Linux のamd64 だったらバイナリやパッケージがあるのでそれを使うのが良いです.
buildする場合はこんな感じで(結構時間掛かった)

$ sudo apt install haskell-stack $ git clone https://github.com/smallhadroncollider/ascii-runner $ cd ascii-runner $ stack build $ stack install $ runner 

端末での操作をSVG形式で記録する termtosvg

ttyrec/playみたいに端末操作を録画出来るアプリケーション.再生はウェブブラウザなどでできます.

導入はpipで

$ pip3 install termtosvg
$ termtosvg -h
usage: termtosvg [output_file] [--font FONT] [--theme THEME] [--help] [--verbose]
Record a terminal session and render an SVG animation on the fly
positional arguments:
output_file    optional filename of the SVG animation; if missing, a random
filename will be automatically generated
optional arguments:
-h, --help     show this help message and exit
--font FONT    font to specify in the CSS portion of the SVG animation
(DejaVu Sans Mono, Monaco...). If the font is not installed
on the viewer's machine, the browser will display a default
                 monospaced font instead.
  --theme THEME  color theme used to render the terminal session (circus,
                 classic-dark, classic-light, dracula, isotope, marrakesh,
                 material, monokai, solarized-dark, solarized-light, zenburn)
  -v, --verbose  increase log messages verbosity
See also 'termtosvg record --help' and 'termtosvg render --help'

導入後実行するとそのまま端末に戻ってexitするまでの操作を記録してくれる.exitするとSVGを書き出してそのファイル名を教えてくれる.

mk@T430s:~ (551)$ termtosvg
Recording started, enter "exit" command or Control-D to end
mk@T430s:~ (554)$ cowsay -f duck "hello termtosvg!"
__________________
< hello termtosvg! >
------------------
\
\
\ >()_
(__)__ _
mk@T430s:~ (555)$ cowsay -f duck "hello termtosvg!"|lolcat
__________________
< hello termtosvg! >
------------------
\
\
\ >()_
(__)__ _
mk@T430s:~ (556)$ exit
Recording ended, SVG animation is /tmp/termtosvg_vpd7hh0z.svg

出来上がったファイルはSVGなので中を見てコピペとか出来なくはない.

$ xmllint --format /tmp/termtosvg_vpd7hh0z.svg|head
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="full" height="408" version="1.1" width="640">
<defs>
<style type="text/css"><![CDATA[* {font-family: "DejaVu Sans Mono", monospace; font-style: normal; font-size: 14px}
text {dominant-baseline: text-before-edge}
.bold {font-weight: bold}
.background {fill: #002b36}]]></style>
<g id="1">
<text fill="#93a1a1" lengthAdjust="spacingAndGlyphs" textLength="144" x="0">mk@T430s:~ (554)$ </text>
<text fill="#002b36" lengthAdjust="spacingAndGlyphs" textLength="8" x="144"> </text>

以下にexampleがある

サーバにアップロードして共有だとasciinemaが便利だけどこれはこれでファイル一個なので便利そうです.
Python製でライセンスはBSD 3-Clause Licenseです.

Bittorrentでダウンロードしたファイルのハッシュ値が一致しなくて困る

Raspbianの新しいバージョンがリリースされていた(2018-06-27)ので,Bittorentファイルを入手してTransmission-gtkでダウンロードしました.

2018-06-27:
* New first-boot configuration wizard added
* Recommended Software installer added
* Bluej, Greenfoot, NodeRED, Claws Mail, VNC Viewer removed from image - can now be installed from Recommended Applications
* Qpdfview PDF viewer installed instead of Xpdf
* Version 65.0 of Chromium browser included, with latest Flash player
* Volume up / down keys now change by 5% increments and affect currently-selected output device rather than internal device only
* Network plugin now remembers previously-entered WiFi network passwords when prompting for reconnection
* Serial port and serial console can now be switched separately in Raspberry Pi Configuration
* Lxkeymap keyboard language setting application removed - replaced with dialog within Raspberry Pi Configuration
* Wifi country and keyboard language setting dialogs in Raspberry Pi Configuration now callable from other applications
* New version of Piboto font included to render with correct weight under some rogue applications
* Reconnection to Bluetooth audio devices on reboot improved
* Disable click-to-rename behaviour in file manager if single-click selection enabled
* Appearance Settings dialog makes config changes to some Qt files to match selected theme
* MIME file type associations improved
* Multiple desktop management options removed from mouse middle-click menu
* Menu shortcuts to Raspberry Pi website amended
* Python 2 IDLE menu link removed
* Sample Magpi PDF installed in /home/pi/MagPi
* Various minor tweaks, bug fixes and appearance changes
* Bluetooth updates
- Firmware with Bluetooth 4.2 features
- SCO profile suppot added via bthelper.service
* Linux kernel 4.14.50+
* Raspberry Pi firmware 748fb17992426bb29d99224b93cb962fefbdc833  

一晩経って確認するとダウンロードが終わっていたので念の為ハッシュ値を確認すると合いません.

$ ls -l ./2018-06-27-raspbian-stretch-lite.zip
-rw-r--r-- 1 mk mk 366870528 6月 30 03:02 ./2018-06-27-raspbian-stretch-lite.zip
$ sha256sum 2018-06-27-raspbian-stretch-lite.zip
ce2d2babed81d5b2d6b919dc8dc92bc915a7d89f09f3aaad1d9ae01f2471eb25 2018-06-27-raspbian-stretch-lite.zip
$ echo 3271b244734286d99aeba8fa043b6634cad488d211583814a2018fc14fdca313
3271b244734286d99aeba8fa043b6634cad488d211583814a2018fc14fdca313

Transmission-gtk の該当Torrentで右クリックし,「ローカルデータを検証」を行うとダウンロードファイルが99%になりました.この状態でしばらく放置すると再度100%になり,今度はハッシュ値が合致しました.なぜこういう動きになったのかは謎です…….

shutter_18-06-30_06:29:30_001

環境

$ dpkg-query -W transmission-gtk
transmission-gtk        2.94-1+b1
$ dpkg-query -W transmission-common
transmission-common     2.94-1
$ lsb_release -d
Description:    Debian GNU/Linux unstable (sid)
$ uname -m
x86_64

GoogleのVR180ビデオ変換アプリのVR180 Creator Tool(macOS/Linux対応)

Google製のVR180のビデオ変換やYoutubeでどう見えるかのプレビューなどが可能なVR180 Creator Toolが公開されています.

ビデオエディタではなく編集やトリミングは出来ないようです.
珍しいのはWindowsに対応しておらず,macOS (10.9+)/Linux (64-bit)対応.※64-bitとあるけどx86-64(amd64)のみ.
Linux版は全部入りで展開して実行するだけでOKでした.
※手元にビデオデータがないので動作確認は出来ていない.

20180624_04:06:15-11012
20180624_04:06:09-4261

アプリ概要
VR180 Creator overview – VR180 Help

利用できる機器
Google VR

利用できるカメラ
VR180

Lenovoのやつとか欲しいですね.

180度カメラを操作するスマートフォンアプリもあるようです.

JOSMで360度カメラ写真が利用できるようになるMapillaryプラグインを試してみる

をちょっと試してみました.
試した環境はDebian sid amd64,で,Pluginの場所は~/.local/share/JOSM/plugins/でした.(~/.josm/pluginsを作るとそちらの設定が優先で全部そっちに取られて初期状態になる)
ダウンロードしたプラグインをここに置いてJOSMを起動して有効にするとオリジナル版?をダウンロードして上書きしてしまうようなので,オリジナル版を有効にした後上書きしました.

  • JOSMを起動して,Mapillaryプラグインを導入
    20180626_05:06:07-21756
    20180626_05:06:46-20695
    20180626_05:06:54-28585
  • JOSMを終了して三浦さん版Mapillaryプラグインで上書き
$ wget -O ~/.local/share/JOSM/plugins/Mapillary.jar 'https://bintray.com/osmfj/JOSM/download_file?file_path=Mapillary.jar'
$ sha256sum /home/mk/.local/share/JOSM/plugins/Mapillary.jar
e6961ceb8381ea3eddec7c457edfe5a2bcea593f43ce9a9b75a9214396be5ac8  /home/mk/.local/share/JOSM/plugins/Mapillary.jar
  • JOSMを起動してshift+,してMapillaryレイヤーを有効にして適当な場所で360度カメラ画像を探す.今回は横浜のシルクセンター前辺り.
    • (エラーが出たら無視して強行)
  • 見やすくするためにMapillary窓の📍をクリックして別ウィンドウにする
  • 初期は歪んだ画像だが,クリックすると補正される
  • クリックした場所がセンターになる
  • 360度回転できる画像と端で止まる画像がある?

out.resized

いい感じですね.360度カメラや180度カメラ,せめてアクションカムが欲しいところです…….



#そういえば先日Googleから180度カメラのビデオ変換アプリケーションが出ました.macOS/Linux対応.(WIndows非対応!) -> VR180 Apps

試した環境

$ java -jar ~/bin/josm-latest.jar --version
JOSM/1.5 (13974 ja) Linux Debian GNU/Linux unstable (sid)
$ java -version
openjdk version "10.0.1" 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Debian-4)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Debian-4, mixed mode)
$ dpkg-query -W openjdk-10-jre
openjdk-10-jre:amd64    10.0.1+10-4
$ lsb_release -d
Description:    Debian GNU/Linux unstable (sid)
$ uname -m
x86_64

Windows用Notepad++をsnapパッケージでLinuxに導入

WindowsアプリケーションのNotepad++がWineとセットでsnapパッケージにされているらしいです.但し非公式.
winepackはFactpak化だったのでそれのsnap版みたいな感じですね.(こっちは単一のアプリケーションだけだけど)

snapなので試すのは簡単です.

$ sudo snap remove notepad-plus-plus

試しに動かすと日本語は豆腐になってしまいます.多分フォントを入れれば解決する?

20180624_05:06:09-22454

~/snap/notepad-plus-plus/common/.wineにwineの設定があるのでその下のdrive_c/windows/Fontsを覗いたらhostのsystemのfont全てにシンボリックリンク貼ってあったのでフォントは入ってそうです.
Notepad++の設定で適当なフォントを指定したら豆腐直りました.
設定は,「setting」->「preference」「日本語」を指定,「設定」->「スタイル設定」で適当な日本語対応フォントを指定.ここで「Global style : Default style」のフォントを指定でとりあえずデフォルトの画面での豆腐は直りましたが,沢山スタイルあるのでこれ設定するの面倒そうです.(常用するならシステムのフォントも変えたほうが見やすくなりそうですね)

20180624_06:06:52-32246

20180624_06:06:55-8334

そしてちょっと使ってやっぱりXのバッファが使えないのが辛いので消しました><

$ sudo snap remove notepad-plus-plus

Windowsでこのアプリケーションを利用している人にはお手軽に導入できて良さそうです.

Flickrにコマンドラインから画像をアップロードするFlickr-Uploadを試す

何時もはflickcurlを利用しているのですが,複数のアカウントに対応していないようなので別のツールを探してFlickr-Uploadを見つけました.

const char* config_filename = ".flickcurl.conf";

Install

$ sudo apt install libflickr-upload-perl

認証

  • URLを開くと認証画面になるので許可する
  • リダイレクトでダミーURLに飛ばされるのでそのURLをURL:のところに貼り付ける
$ flickr_upload --oauth
Please open this URL in your browser and follow the instructions:
https://api.flickr.com/services/oauth/authorize?oauth_token=72157697799378834-ad02ea9a475eac80&perms=write
When you authorize this app, you'll be directed to a dummy URL
that contains a confirmation code. Paste that URL here.
URL: https://127.0.0.1/?oauth_token=999999999999999999-deadbeefdeadbeef&oauth_verifier=123456bdeadbeef
Saving OAuth credentials to /home/mk/.flickroauth.st
Uploading /home/mk/.flickrrc...Can't read photo '/home/mk/.flickrrc' at /usr/share/perl5/Flickr/Upload.pm line 128, <STDIN> line 1.
  • ~/.flickroauth.st に認証ファイルが作られる
$ ls -l /home/mk/.flickroauth.st
-rw-r--r-- 1 mk mk 673  6月 24 08:47 /home/mk/.flickroauth.st

アップロード

$ flickr_upload --public 1 ~/Pictures/20180624_06:06:55-8334.jpg
Uploading /home/mk/Pictures/20180624_06:06:55-8334.jpg...
Waiting for upload results (ctrl-C if you don't care)...
/home/mk/Pictures/20180624_06:06:55-8334.jpg is at https://www.flickr.com/tools/uploader_edit.gne?ids=12345678902

10分毎に自動アップロード

2,12,22,32,42,52 * * * *    D=`date +\%m\%d\%H\%M.\%S` ; find ~/Pictures -newer ${HOME}/Pictures/.flickr_time \( -iname "*.jpg" -o -iname "*.png" \) -type f -print0 | xargs -0 -r -n1 flickr_upload --public 0 --tag 'autoupload' && touch -t ${D} ${HOME}/Pictures/.flickr_time

*/10+2とかできればいいのに

環境

$ dpkg-query -W libflickr-upload-perl
libflickr-upload-perl   1.60-1
$ lsb_release -d
Description:    Debian GNU/Linux unstable (sid)
$ uname -m
x86_64