G3Lの4G-LTE通信性能を評価する過程で、通信よりも画像撮影の所要時間が長すぎるという課題が生じました。これを、プログラミングで解決したいと思います。前回、既存のアプリを組み合わせて、USBカメラで撮影した画像をサーバにアップするところまで成功はしたものの、撮影処理やファイル保存処理時間が長いため、通信速度の評価には適さない、という結果に終わりました。そこで、今回は既存のアプリを使うのではなく、自分でプログラミングして撮影からサーバへのアップを一気に実行してしまおう、というわけです。結果から言うと、以下の様になりました。1280×1024の静止画を連続撮影し、JPEGファイルにしてサーバにアップする。1枚当たり平均約1秒。1枚当たり平均約2.5秒。前回、アプリの組み合わせで試した結果は、1枚当たり約6秒だったので、とりあえず半分にはなりましたね。(更なる改善により、この半分くらいにできるかもしれません。)これなら、工場や農地の監視、観察対象の記録、ちょっとしたTV電話などには使えそうです。いうファイル名でアップロードしました。そのままにしておきますが、後々消してしまうかもしれません。別のファイルに置き換えてしまうかもしれませんので、ここに101枚目と102枚目だけ置いておきます。問題解決への道それでは、この結果までの道のりを辿ってみましょう。(ソースはこちら:ソース倉庫)前回の結果から、以下の予想が立ったため、それらを回避すれば余分な処理時間を省略できるのではないか、と考えました。1.カメラを用いた撮影において、撮影を開始してから画像を取得するまでの時間が予想よりも長すぎる。撮影を開始するための事前処理やピントを合わせるためのフォーカスに時間がかかっているだけではないか?2.画像を取得してから、ファイルをサーバに転送開始するまでに少し間がある。画像をファイルとして保存してから、そのファイルをサーバに転送しているので、ファイルをディスクに書き出し終わるまでの時間が障害になっているのでは?3.あるいは、サーバへのログインに時間がかかっているのではないか?まず、3のログイン時間についてです。具体的には、回線からインターネットへの接続やサーバへの接続、セキュリティ認証等に要する時間です。光回線で1秒くらい、4G回線で2秒くらい待たされ、その時々により、数秒~10秒近く待たされる時もあります。そこで、接続とファイルのアップロードを行った後、切断せずに接続を保持し、次のアップロードをスムーズに実行すれば、改善できそうです。サーバ側の手間がかかりそうです。これは次回の課題にしましょう。次に、2のディスクへの書き出し時間についてです。後述のプログラミングとデバッグを進める内に明らかになったことですが、全体の所要時間に比べるとたいして大きな時間ではないことが分かりました。これは、無理に改善する必要は無い様です。いうわけで、3つ目の撮影開始に関する時間の短縮をメインターゲットに据えましょう。課題:カメラ撮影処理時間の短縮WEB等でライブラリ等を調べてみるとすぐ見つかります。API)」というライブラリ(API)で制御できます。https://linuxtv.org/downloads/v4l-dvb-apis/index.html英文ですし、これだけで理解するのは難しいので、先人の解説やプログラムを参考にし、情報が足りないと思ったときにサイトを参照する、という方法が良いでしょう。いうファイルが作成されます。(すでに0が使用されている等の都合により/dev/video1などになる場合もあります)アプリ等のプログラムは、このファイルを通して、カメラに対する命令を発したり、カメラからの画像を受け取ったりします。このあたりの情報は、WEBや経験から得たものですが、これから学ぶ方はWEBだけでも概ねつかめますし、雑誌や本などを読むのも良いでしょう。以下のプログラムの流れに関する情報は、前述のサイトやWEBから得た知識です。その為、作成するプログラムの流れは以下のような感じです。1.デバイスのファイル(/dev/video0)を開く。2.デバイスやライブラリなどを初期化する。3.カメラからの画像を受け取るための、受け皿(メモリ領域)を用意する。