渋谷:道玄坂の活動量を数値化してみた話

  • 11
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

エージェントのみなさん、こんにちは。RES A10のkatzchangです。A11まで、あとCFが250弱まできました。

さて、みなさまは日々のBuild/Combat活動の中で、地域や時間帯によって戦いの激しさが違うなーというのは実感していると思います。そんな激しさをいい感じに表現できるかなーと思って少し試した話をします。

手法

Intel Mapのキャプチャ画像を5分おきに取って、その画像的な差分が多ければ「激しい」扱いとすることにしてみました。差分の数値化は平均二乗誤差(MSE)という計算方法があるらしいのでとりあえずそれを採用。

Intel Mapのキャプチャは Ice を利用。この手の機械的アクセスは度が過ぎると垢banになるという噂もあるけど、どうなんだろう…。ちなみに、同じスケールで秋葉原をキャプチャしようとしたら、読み込みが全然遅くてダメでした。ポータル密集地はもっとスケールを小さくしないと厳しいらしいです。

キャプチャしたのは 2014-12-19、金曜日。天気は晴れ。05:00 - 15:30。例えば12時台はこんな画像が取れました:

Gyazo

差分計算は、ScalaからJavaCVを使ってみています。コードはだいたいこんな感じ。

package mse

import java.io._
import org.bytedeco.javacpp.helper.opencv_core.AbstractCvMat
import org.bytedeco.javacpp.opencv_core._
import org.bytedeco.javacpp.opencv_highgui._

object MSE {
  def main(args: Array[String]) {
    val ms =
      new File(args(0))
        .listFiles
        .filter(_.getName.endsWith(".png"))

    val stream = new FileOutputStream(args(0) + "/result.txt")
    val out = new PrintStream(stream)

    val mses = ms.zip(ms.tail).map {
      p =>
        for {
          i1 <- load(p._1)
          i2 <- load(p._2)
        } yield out.println(
          List(p._2.getName.substring(23,28), apply(i1, i2))
            .mkString("¥t"))
    }
  }

  def load(file: File, flags: Int = CV_LOAD_IMAGE_COLOR): Option[CvMat] =
    Option(cvLoadImageM(file.getAbsolutePath, flags))

  /**
   * thanks http://stackoverflow.com/a/19290458
   */
  def apply(mat1: CvMat, mat2: CvMat): Double = {
    val s1: CvMat = AbstractCvMat.create(mat1.rows(), mat1.cols(), mat1.depth(), mat1.nChannels())
    cvAbsDiff(mat1, mat2, s1)

    val s1Squared: CvMat = cvCreateMat(s1.rows(), s1.cols(), CV_32FC3)
    cvMul(s1, s1, s1Squared, 1)

    val scalar: CvScalar = cvSum(s1Squared)
    val sse: Double = scalar.getVal(0) + scalar.getVal(1) + scalar.getVal(2)
    val mse: Double = sse / (s1.channels() * s1.total()).toDouble
    mse
  }
}

結果と考察

こんな感じです:

スクリーンショット 2014-12-21 2.21.18.png

  • 早朝は穏やかで、動くのは08:00以降
  • 9時台-10時台が激しめなのは、出勤前だから?
  • 12時台が意外と静か
  • それ以降も比較的静か

12時台の活動量が控えめだったのが意外でした。

まとめと展望

ということで、活動量をとりあえず可視化してみました。

今回は昼過ぎまでしか取らなかったけど、夜にはどうなるか、また、休日には違う動きが起こるんじゃないかなーと思います。また、地域による活動量の違いとか、地域によって活動時間帯に違いがあるのかとか、色々面白そうです。あと天気とか季節とか。

Intel Mapの機械的アクセスについては、この程度であれば問題ないことを祈ります…。APIが公開されるとかされないとかって、結局どうなんでしょうかねぇ。

ということで、この記事は Ingress Advent Calender 2014, 12-10の記事でした。日付的にアレなのはTokyoに大量のXMが吹き出した件と関係があるか、今後の研究が待たれます(クソ遅れてすいません!!!!!!)。