exits

勉強記録

Wi-Fi ヒートマップの動画を作った(iOSDC NOC)

今年もiOSDCのネットワークスタッフに参加してきました。
主に事前準備と、準備日の構築、最終日の撤収をやりました。 開催期間のうち、平日は全く会場にいなかったんですが、あとから見せてもらったヒートマップを見てテンションが上ったので、動画化することにしました。

ついでにWi-Fi パスワードの "iwillblog" も回収するぞ💪

ヒートマップ画像はサーバ班のメンバーが用意してくれました。
画面スクショなので、画像内のヒートマップ部分のサイズが異なることがあり、このまま動画化すると目がつらいことに…
f:id:yue82:20190911015610g:plain

画像を切り抜く

矩形抽出して~なども考えたんですが、画像内の矩形・直線の多さ的にあまりうまくいく気がしなかったので、地道にいきました。

  1. ヘッダ部分をざっくり切り取る
  2. グレースケールにする
  3. 画像の縦横それぞれの真ん中辺りで、端からピクセルを順に見ていき、閾値よりも黒い部分に当たったらそこを端とする
  4. 3で求めた端の部分でクロップ
  5. クロップ後の画像サイズが小さすぎたり大きすぎたりしたら、閾値を変更して3からやりなおし
  6. 横幅720にリサイズ

これでどうにか横幅720、縦幅 515~530くらいの画像を切り抜けました。
before
f:id:yue82:20190911023120p:plain:w200

after
f:id:yue82:20190911023115p:plain:w200

クライアント数

クライアント数はヘッダの部分に書いてあり、クロップ処理で切り抜かれてしまうので画像内に再度書き込むことに。
ついでにクライアント数を書き出したいという話もあったので、OCRすることにしました。

OCRで読む

クライアント数の書いてある部分は位置がずれないので、その部分を切り抜いてOCRで読みました。
OCRはTesseractを使用。

$ sudo add-apt-repository ppa:alex-p/tesseract-ocr
$ sudo apt-get update
$ sudo apt install tesseract-ocr
$ sudo apt install libtesseract-dev
$ tesseract -v
tesseract 4.0.0
 leptonica-1.78.0
  libgif 5.1.4 : libjpeg 6b (libjpeg-turbo 1.5.2) : libpng 1.6.37 : libtiff 4.0.10 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3.0
 Found AVX2
 Found AVX
 Found SSE

さっそく試してみると、444という数字が何故か読めず、読み取り対象を数字に絞ったりできないか検索していましたが、4.0以降は無理とのこと。

そのまま調べていると tesseract_layout を設定している場合が多いなと気づいたので試してみると改善。

改善後の誤判定はこんな感じ。

failed (id: 77 , result: n )
failed (id: 83 , result: n )
failed (id: 166 , result: A417 )
failed (id: 1011 , result: S57 )
failed (id: 1016 , result: S57 )
failed (id: 1157 , result: 744, )
failed (id: 1158 , result: 744, )
failed (id: 1172 , result: 744, )
failed (id: 1221 , result: 744, )
failed (id: 1222 , result: 744, )
failed (id: 1647 , result: 474, )
failed (id: 1756 , result: n )
failed (id: 1759 , result: n )
failed (id: 2702 , result: 744, )
failed (id: 2719 , result: 744, )

n71SA,が入ってしまっているものはそれを除けばOKでした。
ミス数も少ないので手書きで直してしまいました。

画像に書きこむ


フォントは/usr/share/fontsにあったものを適当に使用。

動画作成

$ ffmpeg -r 30 -i %04d.png -vcodec libx264 -pix_fmt yuv420p -r 30 headmap_with_clients.mp4

完成🎉
f:id:yue82:20190911023844g:plain

ちょっとプルプルしていますが最初よりは許せる範囲でしょう。
お疲れさまでした!