kghr IT備忘録
HOME » Category : PC HOME » BackNumber
エントリー目次
混雑レーダーの画像を定期的にキャプチャーしてみた
2020.04/11 (Sat)

地図サービスYahoo! MAPの「混雑レーダー」が復活したと聞いて、定期的に混雑具合のスクリーンショットを取得してみた備忘録。
「混雑レーダー」はアプリ版だと2時間前から26時間前までの各時間帯の混雑状況が確認できるらしいが、Web版はスライダーバーがなく、2時間前状態が見えるようだ。
追記:「AM1:00~AM6:00の間ご利用いただけません。」とのこと。
スクリーンショットの方法
Chromeの起動オプションにはスクリーンショット機能(––screenshot)がある。起動時に指定すれば、PNG形式でスクリーンショットを保存してくれる。また、ヘッドレスモード(––headless)というものを指定すれば、ブラウザが開かずに裏で動作してくれる。(––disable–gpuという起動オプションは––screenshotとセットで指定しておくものらしい。)
“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe”
––headless ––disable–gpu ––screenshot http://kghr.blog.fc2.com/
これをバッチプログラムに組み込んで動かせば簡単にできるかな、と思って作り始めたものの、久しぶりにバッチプログラムを書いて痛い目にあった。ちょっとスペースが入っているだけで動かないし、変数と文字列の扱いが結構面倒なのだ。
結局Pythonから作ることにしたが、バッチプログラムも修正したのであわせて掲載しておく。
混雑レーダーのURL入手
混雑レーダーのURLを取得するのに試行錯誤していたら、何かの拍子にフルパスが表示されるようになった。何度か試してみたら、短縮されたURLを開くとフルパスになるようだ。というか、プログラム的には短縮URLのままでもかまわないか。
①ブラウザでYahoo!Map ( https://map.yahoo.co.jp/maps )を開く
②混雑レーダーを表示しキャプチャしたい位置に調整する
右上の「地図」をクリックし、「混雑レーダー」をチェックすると表示される。
東京駅を中心とした地図を表示している。

③「この地図のURL」をコピーしする
右上の「URL」という箱をクリックすると表示される。ここでは「 https://yahoo.jp/2Oy2EF 」というURLが入手できた。

Python版
PythonがInstallされている前提で話を進めます。
追記: UbuntuはSeleniumとChromeDriverを "sudo apt install python3-selenium"でインストールする。
Seleniumのインストール
Selenium は Web ブラウザの操作を自動化するためのフレームワークだそう。初めて使う。
pip install selenium でインストールすることができる。
ChromeDriver のインストール
Pythonからブラウザを操作するのに、ChromeDriverをインストールする。。
ChromeDriver を Python でのみ利用するなら、pip install chromedriver-binary でインストールすることができる。
環境変数等でパスを通す必要はなく、プログラム中で import chromedriver_binary のようにインポートすれば使える。
Python版のソースコード
ファイル名を getmap.py などにして作成した。
## Yahoo!Mapの混雑レーダーをキャプチャする
## by kghr 2020
import os
import math
import time
import datetime
import chromedriver_binary
from selenium import webdriver
## URL指定
URL = "https://yahoo.jp/2Oy2EF"
## 保管フォルダ指定
PATHKEY = 'e:\\mapdata\\kz_'
## ファイル名指定 "kz_YYYYMMDD_HHMM.png"
now = datetime.datetime.now()
filename = PATHKEY + '{0:%Y%m%d_%H%M}.png'.format(now)
## headless モードでChrome起動
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1920,1080')
driver = webdriver.Chrome(options=options)
## 指定URLに画面遷移
driver.get(URL)
## 5秒待機
time.sleep(5)
## 画面キャプチャを保存
driver.save_screenshot(filename)
## ブラウザを閉じる
driver.quit()
Windowsバッチ版
ファイル名を getmap.bat などにして作成した。
こちらのバッチ版はChromeがインストールしてあればよく、PythonとかChromeDriverとか不要。
Chromeのインストール場所は通常インストールした場所を指定して作ってある。そして、ファイルの出力先はルートディレクトリ(c:\とか)など制約がある場所はNGなので、ちょっとデータ用に作成したディレクトリにしたほうがいいみたい。
@echo off
REM Yahoo!Mapの混雑レーダーをキャプチャする
REM by kghr 2020
set URL="https://yahoo.jp/2Oy2EF"
set PATHKEY=e:\mapdata\kz_
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set time2=%time: =0%
set hh=%time2:~0,2%
set mn=%time2:~3,2%
set filename=%PATHKEY%%yyyy%%mm%%dd%_%hh%%mn%.png
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
--headless --disable-gpu --window-size=1920,1080 --screenshot=%filename% %URL%
定期的に実行
Windowsなら タスクスケジューラ にセットすればいいし、Linuxならcronにセットすればいいと思う。
きまった時間に実行すれば定期的に混雑マップを画像を入手できる。きっちり定時だと更新が完了していないかもしれないので、定時から10分遅れの1時間おきに実行することにした。
Windows向けに補足
Linuxを使うような人は問題ないと思うので、Windowsな人に補足。
タスクスケジューラで実行するコマンドは、Python版ならPythonの実行プログラムそのものを指定する。バッチ版の場合はそのままバッチファイル名を指定すればいいみたい。
例: Python版のとき
プログラム/スクリプト [ C:\Users\xxxxxx\AppData\Local\Microsoft\WindowsApps\python.exe ]
引数 [C:\temp\getmap.py]
例:バッチ版のとき
プログラム/スクリプト [ C:\temp\getmap.bat ]
引数 [ ] ←ブランク
あとがき
いくつか画像が集まったら、パラパラアニメに変換してみてみると、平日と休日の違いとか目に見えて面白そう。
ピンポイントで「渋谷」とか「新宿」にフォーカスしたデータもいいかも。
定期的にWebサイトの魚拓を残すなどにも使えると思う。
今日はここまで。
スポンサーサイト
Thinkpad X61のバッテリー交換
2018.11/10 (Sat)

久しぶりにThinkpad x61を立ち上げたら、バッテリーが消耗していた。ACアダプタを接続しても充電されず、じわじわとメーターが減っていくので、バッテリー交換をすることにした。
バッテリーのリフレッシュ
バッテリーを買う前にリフレッシュを試そうと思った。昔はよく「省電力マネージャー」でバッテリーのリフレッシュをしていたのだが、これが見つからない。調べてみたらレノボのサポートサイトに「Windows 10 用の省電力マネージャーはありません。」と書かれていた。
Windows10に省電力マネージャーをインストールする方法を探してバッテリーのリフレッシュをしようと思ったものの、満充電ができない状況においては使えないという事に気が付いた。ここは素直にバッテリーを購入したほうがいい。

バッテリーの購入
楽天にポイントが溜まっていたので、今回は楽天で探す。Thinkpad x61用のバッテリーは、Amazonでもだいたい2,500円前後だったのと、ポイントキャンペーンで割安感があったのと、「電気用品安全法 PSEマーク付」と明記してあったので、こちらを購入した。
バッテリーが届いた
見た目も質感も悪くない。光沢具合も似ているのでほぼ見分けが付かない。早速装着してみたところ、特にガタつきもなくしっくり収まった。なかなかイイ感じだと思う。


バッテリーの中身
「powercfg /batteryreport」 というコマンドでバッテリーの状況を見てみる。結果がHTMLファイルで出力されるので見やすく美しい。今回のバッテリーについて調べたら、「SANYO」と書いてありセルは三洋ブランドなのかと思われる。設計上の容量として「32,560mWh」の文字があるが、純正は「37,440 mWh」だった。以前より1割ちょっと少なくなったがお手頃だったのでまあいいだろう。

あとがき
AC電源をつないでいればバッテリーがなくても使えるが、ちょっと移動させて作業したり停電対策としてバッテリーがあるに越したことはない。今回購入したバッテリーは3カ月保証が付いているが概ね大丈夫そうだと思った。
今日はここまで。
マウスを持ちやすくするアタッチメントを造形してみた
2018.05/19 (Sat)

出典:SANWA社 MA-BLMA9BK
オフィスで使っているマウスが使いにくく、ついに腱鞘炎になってしまった。自宅で使っているマウスはもう売ってないし、市販の製品もいいのがないからどうにかしなければ。今回は、マウスを使いやすくするために木粉ねんどでアタッチメントを造形したことを備忘録とする。
マウスの使いにくさの原因
オフィスで使用しているマウスはSANWA社のMA-BLMA9BKで、「洗練されたエルゴノミクスデザインとサイドラバーグリップで、マウスに手を添えた瞬間に手にフィットし、操作を開始できます。」という宣伝文句がついている。なのにどうして使いにくいのか。
一方自宅で使用しているマウスはRP-UM311Wという秋葉原の路上で適当に買ったお安いもので、小さくて軽い。以前書いたように、マイクロスイッチを交換して使用している。

2つのマウスを並べて比べてみたら、マウスの持ち方に向き不向きがあることがわかった。自宅のお安いマウスは小さくて軽く、指先でつまんで持っても負担にならない。
一方SANWA社のMA-BLMA9BKは、「手を添えた瞬間に手にフィットし」という宣伝文句にあるように、マウスを包み込むように手を添えて使うことを想定しているのだ。指先で持ち上げるとバランスも悪く、これを無理に使い続けたために指や手首に負担がかかり腱鞘炎になったものと推測される。
マウスの持ち方
いまさらだがマウスの持ち方を検索してみた。大きく3パターンあるそうで、手のひらにマウスをつけず指だけでマウスを支える持ち方を「Fingertip grip(つまみ持ち)」と呼ぶらしい。この持ち方は 機敏な操作や細かな操作がしやすいのだが、軽くてバランスの良いマウスでないとうまく持てない。
①Palm Grip(かぶせ持ち): 指と手のひらで全体的にマウスを覆う持ち方。これが一般的とか。
②Fingertip Grip(つまみ持ち): 指先だけで触れる持ち方。細かくて素早い動きが出来る。
③Claw Grip(つかみ持ち): 手のひらを付けつつ、人差し指と中指の爪を立てるように持つ。
SANWA社のMA-BLMA9BKが想定している持ち方は「Palm Grip(かぶせ持ち)」のようで、一番一般的な持ち方なのだとか。ではそのPalm Grip(かぶせ持ち)なる持ち方で使ってみようかとしても、指先がはみ出てしまうではないか。

もう一度製品紹介のサイトを確認してみると、女性の手でちょうどよいサイズ感に見える。とても成人男性が「Palm Grip(かぶせ持ち)」で使うのには向いているように見えない。

かと言って、第三の「Claw Grip(つかみ持ち)」という指先だけ曲げて持つというスタイルは、余計な力がかかりとても無理がある。
要するに、SANWA社のMA-BLMA9BKは自分に合っていないということなのだ。
マウスを持ちやすくするには
マウスが持ちにくいのは、①自分の持ち方が製品に合わず、かといって②製品向きの持ち方ではサイズが合わない ということが原因だった。自分に合ったマウスを探すことが正解なのは分かっているが、なかなかそういったマウスに巡り合わないものだ。
そこで、マウスの指先をクリックボタンに合わせた状態で、手のひらとマウスの間にできる隙間をねんどで埋めてみようと思った。
↓黄色い部分をねんどで埋める

ねんどは以前100円ショップ買っておいた「木粉ねんど」がいい。木粉ねんどは廃材や間伐材、鉛筆の削りカスを原料とした木粉を使用したもので造形もしやすくとても軽い。1年くらい前に買ったもので少し乾いた感じもあったが、説明書のとおり少し水を加えて練り直すと十分使えそうになった。

作ってみた
木粉ねんどを適量手のひらにとりそのままマウスを持つ。隙間を埋めるようにねんどを造形していけばできあがり。試作品を2パターン作ったのは、1個目の見た目が微妙だったため。

試作品①


ねんどをたっぷり使って隙間を埋めてみた。親指の付け根にもねんどを盛って、手のひらが接触する面積を大きくするようにした。
フィット感はとても良いと思うのだが、見た目に違和感を覚えるだろう。オフィスで使うことを前提とすると奇異な目で見られること間違いなし。
試作品②


手のひらの中心を支えるくらいに抑えた。これでもマウスが手のひらに張り付いているような感覚があり、十分不安定さは解消されると思う。
使用感
木粉ねんどの乾燥には1日から数日かかるそうだが、8時間くらいで使ってみた。この時点の重さは、試作品①が18グラム、試作品②が7グラム。これならまったく負担にならない。
軽く両面テープでマウスに貼り付けて使ってみたが、マウスを単体で持つより軽く感じるのも気のせいではないだろう。指先と手のひらでマウスを持ち上げるので指の負担が軽減する感じだ。
試作品①は持っているだけならとしてもしっくりくるのだが、手首を軸として動かすのが難しい。いっそ手首にリフトレストを置いて手首を曲げない操作をしたらいいと思うのだが、それを前提にねんどの形状を変えなければらならいのと、見た目がもっと大きくなりそうなので止めておこう。
試作品②はマウスを上下に動かしやすい。手のひらで包むような感触も残しつつ手首が固定されないのでそれほど違和感がない。
この2つの試作品を使ってみて、もっと小さくてもいけるのではないかと思った。そこで試作品その③を作ってみたのだが、あまり小さいと包み込んでる感がなくなることが分かった。
あとがき
しばらく使ってみないとなんとも言えないが、試作品②は使えなくはないだろう。猫や亀のようなキャラクター型にしてマウスの補助グッズとして売り出せば、商売としてもそこそこイケルのではないだろうか。
と思いつつ、やはり手に合うマウスをちゃんと探し続けたほうが身のためだと思う。
↓ELECOMの約30グラムという軽量マウスはちょっと気になる。
今日はここまで。
Windows Subsystem for Linux(WSL)を使ってみた
2018.03/25 (Sun)

そういえばずいぶん前にWindowsでLinuxが動くというような記事を読んだことを思い出した。Windows10の64bit環境が必須だったためその時は試せなかったが、最近Linux環境を使うようになってきたので、ちょっと入れてみたという備忘録。
Windows Subsystem for Linux(WSL)とは
WSLは仮想マシンではなく名称のとおりサブシステムだそうだ。Windows OSとLinux アプリの間にあり、Linux アプリの要求をWindows OS用に変換してLinuxのアプリをそのまま実行できるようにしている。
今でもWindows上のVMwareやHyper-VでLinuxを動かすことはできるらしいが、それとの違いは Linux OS(カーネル)を動かすかLinux アプリを動かすかにあるようだ。実際、WSL上のubuntuではshutdownやrebootのようなLinux OSに対するコマンドが使えない。
冒頭に「WindowsでLinuxが動くというような記事を読んだ」と書いたが、どうやら「WindowsでLinuxのアプリが動くという記事」であったのだろう。
WSLとUbuntuのインストール
Windows Subsystem for Linux(WSL)を有効にしてから、Windowsストア経由でLinuxパッケージを導入するだけ。今回はUbuntuをインストールしたが、VM入れてLinux OSを入れてという手間に比べてずいぶんハードルが低い。
手順は参考サイトそのままで特につまずくところはなかった。
参考: Windows 10でLinuxプログラムを利用可能にするWSL(Windows Subsystem for Linux)をインストールする
aptを高速化する
必須ではないが、ちょっと設定しておくとうれしいかも。
WSLのUbuntu 16.04は、apt-getで参照するリポジトリが海外をさしてあるため遅いとのこと。特に最初のセットアップではファイルをたくさん更新するので、国内のリポジトリを参照するように変更しておくと速くなるそう。
いくつかサイトを参考に /etc/apt/sources.list を以下のコマンドで変更した。変更する前のファイルは sources.list.bak にある。
$ sudo sed -i.bak -e "s%http://[^ ]\+%http://ftp.iij.ad.jp/pub/linux/ubuntu/archive/%g" /etc/apt/sources.list
参考: apt-getの利用リポジトリを日本サーバーに変更する
パッケージのアップデート
Linuxではおなじみ、最初にパッケージを最新の状態にしておきたい。
$ sudo apt-get update ; sudo apt-get upgrade
なるほど、結構な数のアップデート(アップグレード)があったようだ。
120 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 74.4 MB of archives.
After this operation, 11.3 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
あとがき
あっさり動いたので問題なかった。本来はこの環境を使って何をするかという目的があるものだが、今回はとりあえず動くことがわかっただけでOKとする。しかし、今どきはAmazon Web Serviceなども簡単に使えるし、昔に比べて古いPCや安価なPCが身近にあるので、1台くらいLinuxを入れておいてもいいのかなと。
機械学習やAIなどでLinux環境が重宝されていることもあり、WindowsがLinuxをサポートすることが必要という背景もあるみたい。
今日はここまで。
GPU非搭載のPCだけどOpenPoseを試したい(その2)
2018.01/15 (Mon)

GPU非搭載のPCではOpenPoseが試せないので、AWSを利用する。
前回はAWSを使い始めるところまでできたので、いよいよGPU用のインスタンスを立ち上げてOpenPoseを使うところまでを備忘録とする。
参考) AWSでOpenPoseを試す
GPUコンピューティングのインスタンス立ち上げ
OpenPoseはGPUを使うので、GPUが利用できるインスタンスを立ち上げる。
GPUコンピューティングのインスタンスは50GB使う。練習用に作った無料利用枠のインスタンス「t2.micro」が使う8GBを削除すれば、Amazon EBSの無料利用枠は30GBを差し引いた20GBぶんは月額250円($0.10*20GB)くらいになる。

ステップ 1: Amazon マシンイメージ (AMI)
OpenPoseが前提とするような環境がいろいろ入っている「Deep Learning Base AMI (Ubuntu) 」を使う。

ステップ 2: インスタンスタイプの選択
OpenPoseはGPUを使うので、GPUが利用できるインスタンスを選択する。一番お安いインスタンスタイプは「p2.xlarge (11.75 ECU, 4 vCPU, 2.7 GHz, E5-2686v4, 61 GiB メモリ, EBS のみ)」で、東京リージョンでは2018/1/14時点で1時間あたり$1.542だが、オハイオ州のリージョンだと$0.9なのでお安い方を使うのも手。

参考) Amazon EC2 料金
ステップ 3: インスタンスの詳細の設定
購入のオプションで「スポットインスタンスのリクエスト」にチェックすると、空いているインスタンスを安く使うことができる。ただし、設定した最高価格を超えたりインスタンスを終了すると消滅してしまうので、継続的に使用するなら選択しない。
オンデマンドのp2.xlargeは通常1時間あたり$1.542かかるが、使わないときはインスタントを停止しておけばそれほど高くなることはないだろう。

ステップ 4: ストレージの追加
特に追加しない。
ステップ 5: スポットリクエストのタグ付け
特にタグは付けなかった。
ステップ 6: セキュリティグループの設定
セキュリティグループと呼ばれるファイアウォールを設定し、自分のPC(IPアドレス)からのみ接続できるように「マイIP」を設定した。ただ、自宅は固定IPアドレスでないから、この時点で割り当てられているIPアドレスがいつまで使えるか分からない。IPアドレスが頻繁に変わるなら「任意の場所」を選択するのもアリだろうがセキュリティ上望ましくない。ここは後でプロバイダのIPアドレスレンジを調べて「カスタム」を設定しようと思う。

ステップ 7: インスタンスリクエストの確認
スポットインスタンスを選択している場合は「ステップ 7: スポットインスタンス作成の確認」が表示される。右下の作成ボタンを押す。

最後にキーペアについての確認をしたら次に進む。

インスタンスが起動していればOK。

インスタンスに接続する
接続の仕方は前半で書いたが、AWSのガイドでにあったputtyではなく、TeraTermを使ってログインした。(Ubuntu AMI の場合、ユーザー名は ubuntu または root. )
パッケージアップデートが可能と表示されたので、とりあえずアップデートしておく。インスタンスが完全に立ち上がってから実行しないとエラーが表示されるみたいだ。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

OpenPoseの導入
本家のガイドを参考に導入する。導入の方法は、①CMake ②Script Compilation ③Manual Compilation がある。3つとも試してみたが、①CMakeの方法がいいみたいだ。②はエラーが出て③でやるように表示され、③はファイルの編集などが必要になる。
参考) OpenPose - Installation and FAQ
1. gitcloneでソースをダウンロード
まず最初にOpenPoseのリポジトリを入手する。
git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose
2. CMake Command Line Configuration
GUIは使わず、コマンドラインでCMakeを行う。
cd openpose
mkdir build
cd build
CMakeは「SCENARIO 1 -- Caffe not installed and OpenCV installed using apt-get」のパターンでOK。
$ cmake ..
参考) CMake Command Line Configuration
3. OpenPose Building
最後にmakeしてBuild完了。数分かかるステップなので慌てずに待つ。
make -j`nproc`
参考) OpenPose Building
OpenPoseの実行
いよいよOpenPoseを試す。ターミナル越しなのでそのまま画像の表示はできない。ファイルとして保存するためのパラメータがあるので、サンプルファイルで動作確認をしてみる。
./build/examples/openpose/openpose.bin --video examples/media/video.avi --write_video video_pose.avi --no_display

ファイル転送
エラーがでなければ成功したことだろう。さて、変換されたファイルをPCで見るにはダウンロードしなければならない。
Teratermにはファイル転送の機能があるので、意外に簡単にファイル転送ができる。参考サイトがとても分かりやすいので参照されたし。
※ダウンロードした動画ファイルはWindows標準の再生アプリ(映画&テレビ?)では再生できなかった。VLCメディアプレーヤーで問題なく再生できた。
参考) TeraTermで効率良くファイル転送
あとがき
費用を抑えたかったので、オンデマンドのインスタンスは削除してスポットインスタンスを利用してみた。通常1時間あたり$1.542かかるがスポットインスタンスなら$0.48くらいなので約1/3の費用で済む。スポットインスタンスは都度環境を構築しなければならないが、ずっと使うものでもないので問題ない。
OpenPoseには顔や手の認識機能があったり、ip_cameraで動画を取り込むオプションなどもあったりする。まだ試してみたいことがあるので、しばらく楽しめそうだ。
参考) OpenPose Demo - Overview
今日はここまで。
