🔖

ライブカメラの画像のスクレイピングに関して調べたこと

2021/10/25に公開約3,800字2件のコメント

ライブカメラの画像を保存したい

ネコちゃんの見守りカメラに「Qwatch」という見守りカメラを使おうとしました。

https://karaage.hatenadiary.jp/entry/2015/06/30/080000

このカメラ、画像や動画の保存機能がなかったため、ライブカメラの画像をスクレイピングして保存しようとして色々やってみました。

ただ、結局あんまり良い方法までたどり着けず、別のカメラを買うことにしました。

その際、色々調べたのでメモ代わりに情報残しておきます。あんまり期待するような内容ではないです。

ライブカメラの仕様を確認

ライブカメラの仕様としては、専用アプリの他、ブラウザで以下のようにライブカメラのIPと特定のポートを以下のように叩けばライブカメラの表示ができるものでした。

http://<ip address>:<port number>

以下は具体例(IPが192.168.10.10、ポートが1234の場合)

http://192.168.10.10:1234

ただ、このままでは余計なメニュー画面が多かったので、ソースをみてみました。以下のような表記があるので

	<div id="middle">
		<div id="container" >
			<div id="content_setup" style="position: relative; display: block ;z-index:1">
				<iframe id="content_iframe" name="activex" frameborder="0" border="0" cellspacing="0" src="camera.asp" ></iframe>
			</div><!-- #content-->
		</div><!-- #container-->

以下のアドレスを叩くと、邪魔なメニューが少し消えました。

http://192.168.10.10:1234/camera.asp

さらにソースを探ると、以下のようなCGIのプログラムまで辿れました。CGIとか懐かしいですね。今どきのWebアプリだと流石に絶滅危惧種でしょうか?

http://192.168.10.10:1234/snapshot.cgi

これを叩くと、以下のようなライブカメラだけが出てくるようになりました。

あとは、この画像を一定期間ごとに保存していくだけですね。

今回は、一定期間ごとにスクリーンショットする方法とPythonのスクリプトを使う方法の両方を試しました。両方ともうまくいきませんでしたが一応残しておきます。

一定期間ごとにスクリーンショットを撮る方法

Windowsなら色々あるだろうということで探したのですが、良いアプリがあんまり無かったです。

Bandicamというアプリが範囲も指定できて使いやすく一番良さそうだったのですが、無料版だと10分連続しか使えないという制約があり私の用途には適しませんでした。

Windowsなら、今流行のRPA関係のソフトで探したほうが良かったのかもしれません。

以下参考サイトです。

https://freesoft-100.com/beginner/save-screenshot-automatically.html

スクレイピング

Pythonでスクレイピングも試してみました。今回はWindowsのWSL2環境で試してみました。Linuxでも基本は同じだと思います。ちなみにこちらも最後までいけていません。

基本セットアップ

Windows、WSL2環境のセットアップは以下記事参照ください。

https://zenn.dev/karaage0703/articles/211d89cc0a29a1

Pythonの仮想環境は以下記事参照ください。

https://zenn.dev/karaage0703/articles/5af7ce4b8b1a8a

以降は、基本WSL2上で操作します。

Google Chromeインストール

Google Chromeをインストールします。

$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo apt update
$ sudo apt install -y google-chrome-stable

以下でインストール場所やバージョンを確認しておきます。

$ which google-chrome
$ google-chrome --version

Google Chromeの起動を確認します。WSL2上で実行すると、普通にGoogle Chromeのウィンドウが起動します。

$ google-chrome

Google Chromeドライバインストール

続いてGoogle Chromeのドライバをセットアップします。ドライバがGoogle Chromeのバージョンより低い必要があるのが注意ポイントです。なるべくバージョン近くて少しだけ低いバージョンをダウンロードしてインストールしましょう。以下からリンク探してダウンロードして移動しましょう。

https://chromedriver.storage.googleapis.com/index.html

私の環境では、以下の通り実行しました。

$ wget https://chromedriver.storage.googleapis.com/95.0.4638.17/chromedriver_linux64.zip
$ sudo apt install unzip -y
$ unzip chromedriver_linux64.zip
$ sudo mv chromedriver /usr/bin/chromedriver

Pythonスクリプト

seleniumをインストールします。

$ pip3 install selenium

とりあえずテスト的に以下サンプルスクリプトを実行しました。

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options) 

driver.get('http://<ip address>:<port number>/snapshot.cgi')
print(driver.title)

driver.save_screenshot('results.png')
driver.quit()

ただ、ここでエラー。Googleのサイトならうまくいったのになぜ?と思ったのですが、ユーザー名とパスワードを入力する必要があるからですね。

頑張ればそこもスクリプトで突破できそうでしたが、時間切れ…

まとめ

ライブカメラをスクレイピングしようとしたけど、意外にめんどくさくてうまくいかなかったという話でした。

世の中でRPAとかが流行る理由が少しだけ分かったような気がしました。ただ、やはりもっと本質的な解決がしたいですね。ということで、私はカメラ自体の買い替えすることにしました。

また買ったらリンクいたします。とりあえず今回はここまでで。

追記:ATOM Cam2を購入しました。これ良いです!レビュー記事は以下参照ください。

https://karaage.hatenadiary.jp/entry/2021/11/10/073000

https://amzn.to/3F2epDG

スクレイピング関係参考サイト

https://office54.net/python/app/python-screenshot-pillow

https://teratail.com/questions/194886

https://qiita.com/query1000/items/747b1b34a197a55e7fec

https://ararabo.com/2021-04-24/?p=12161

Discussion

ブログ記事の方を見るにBASIC認証のようなので、 http://username:password@hostname/ 形式で認証通せます。それでcurlとかで落とすだけで十分だと思います。
また、Windowsで一定時間起動ということであればタスクスケジューラを使うのが定番です。

こーのいけさん

コメントありがとうございます!そんな単純な方法でいけるのですね。
Windowsだと、タスクスケジューラというのがあるんですね。今度、機会があれば使ってみたいと思います!
本当に参考になりました!

ログインするとコメントできます