スライドを自動で撮影するプログラムSlideAutoShot

投稿者: | 10月 11, 2023

目次

きっかけ

大学でとある授業で、スライド(パワーポイント)の配付がないのにも関わらず、授業後にスライドの内容から小テストが出る(しかもメモできないような細かいところから)という、あれな授業があったので自動でスライドを撮影したくなりました。ChatGPTという神が存在したので手軽に作成できました。

概要

・スマホのカメラを使用する
・スライドが切り替わったら自動で画像を保存する
・取った画像をWebページで共有する
・画像のPDF化を行う

使い方

大体はGitHubのREADMEを見れば書いてあります。レポジトリは
SlideAutoShot
アップデートしたときの使い方の説明もGitHubのほうが早く反映されます。

事前準備

1. まず初めに、プログラムをダウンロードします。Gitを使える方はGit Cloneで、分からない人は、<Code>のDownload ZIPでダウンロードしてください。

2. インストールしていない場合はPython3をインストールしてください。

3. ライブラリのインストールをしてください。Windowsならコマンドプロンプトで
pip install eportlab pillow opencv-python flask
とかでできます。MACの場合はpipをpip3に変更してください。

4. スマートフォンにカメラアプリを入れてください。Androidの場合はIP Webcam、iPhoneの場合はDroidCamをインストールしてください。どちらもネットワーク内から指定されたポート番号にアクセスすると映像が見れます。IP Webcamの場合はhttp://スマホのIP:8080、DroidCamの場合はhttp://スマホのIP:4747です。

5. Webブラウザからスマホのカメラに接続し、下の画像くらいになるように調節してください。DroidCamの場合は課金しないとズームができないと思います。揺れないように床にスマホを設置したりしてください。

カメラのセッティング

スライドの自動撮影

撮る基準ですが、difftime秒ごとに画像を取得し、一枚前の画像と色がcolor_similarity_rate㌫以上変わったピクセルが全体のpixel_rate㌫存在した場合です。上の画像の場合は、10、10くらいがちょうど良いです。環境に合わせて変えてみてください。difftime、color_similarity_rate、pixel_rateは未指定では、1、10、10となっています。
撮影するためのコマンドですが、

python SlideAutoShot.py IPカメラのURL difftime color_similarity_rate pixel_rate

です。撮影中はsキーを押すことで手動で撮影できます。qを押すことで終了できます。

Webページで共有

取った写真をWebページで即座にネットワーク内で共有することができます。以下のコマンドで開始できます。

python myserver.py

pythonをpython3にしてください(このあと出てくるコマンドも同様)。
http://PCのIPアドレス:8080でアクセスできます。こんな感じです。サムネイル写真をクリックすると大きく表示されます。

ディレクトリ内のShot_x.png(xは少数を含む)なファイル名をxが小さい順に表示します。もし、撮れなかった場合は友人から写真を送ってもらってpngに変化し、名前を変更すれば表示されるようになります。

PDF化

取った写真を1つのPDFにすることができます。事前準備として重複してしまったり、人が通るなどで誤って撮られてしまった写真を消して、足りない写真を追加するなどしてください。その後、

python createpdf.py 任意の名前.pdf

でPDF化を行えます。ページの順番ですが、Webページの様に、Shot_x.png(xは少数を含む)なファイル名をxが小さい順です。取った写真は「任意の名前」のフォルダに移動させられます。

改善点

共有用Webページの改善

せっかくなので、画面の上の方に撮影中のLive映像とか流したいですね。あと、このプログラムの名前や、このブログを下に表示するとか…

PDFの画像サイズの均一化→2023/10/10に追加

撮り逃がして友人からもらった写真が含まれる状態でPDF化を行うと、その写真だけ画素数が違って、大きくなったり小さくなったりします。PDFが見にくくなるので自動でアップスケーリング、ダウンスケーリングするようにしたいですね。

画面収録への対応

OBS等を使って画面のキャプチャを入力として使えるようにしたいですね。Zoomなどで使えそうです。今のところ、それが必要なシーンがないのですが、そのうちありそうなので、必要になったら作成します。

アルゴリズムの変更

使用しているスライドの変更検出アルゴリズムが、2つの変数が必要で、どのシチュエーションでどれくらいなのかわかりにくいので、PNSR値を用いて、閾値の計測とかもできるようにしたほうが良いです。一応、PNSRを使用するブランチも作成しているので、気が向いたら統合しようと思います。

GUIの作成

CUIしか用意してなく、初心者には使うのが難しそうなので操作を簡単にするためにGUIを作成してもいいかなーと思っています。ただ、個人的にはそこまで必要性を感じてないのでリクエストがあったらって感じですね。

おわりに

ChatGPTにほとんど考えてもらって、自分は作ってもらった関数を合体しているだけですが、割とちゃんとしたものができて楽しいです。他にもPythonのプログラムを作成しようと検討中です。あとこれってソフトウェアって言っても良いんですかね?なんかそこまで仰々しいものではないのでプログラムって呼んでますけど…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)