2021/05/31

定点カメラ motionを使って定点カメラ

motionをraspberry pi4に入れて定点カメラとして動かしたい
インストール
$ sudo apt install motion
設定
$ sudo nano /etc/motion/motion.conf 

設定はごにょごにょする。
自動起動については、
daemon on
とすれば、自動起動になる。

 

USB接続のカメラを使うとき
$ lsusb で接続を確認
$ ls /dev/video*
等でカメラのIDを確認して、設定してあげればよい。

 尚、複数台のカメラを動かす場合は、

thread /usr/local/etc/thread1.conf
thread /usr/local/etc/thread2.conf
のようにmotionが読込めるディレクトリを作成し、motion.conf に作成したスレッドファイルに絶対パスで指定する必要がある。
制御するWebカメラが1台の場合は、motion.conf に全てを記述し、threadファイルは必要なし。

usr/local/etc/thread1.conf
共通する設定は motion.conf に、カメラ固有に設定が必要と思われる項目を
thread1.conf、thread2.confに記載する。
motion.conf と thread.conf でパラメーターが重複しても優先されるのは threadファイルとなる。

 ポートは8081等で開放しておくこと。
複数台の場合は、当たり前だが各々開放が必要なので、定義のこと。

/etc/motion/thread1.conf
# カメラデバイスの指定(ここをvideo0等の割当先に指定する。)
videodevice /dev/video0
# Webブラウザから画角調整やキャプチャ動作を確認のためポート設定
stream_port 8081

 

 
 

 




2021/05/07

PHP7以前 クエリ結果のカラム文字列を取得できない場合(2GB文字列問題)

データベースのカラムからデータを取得し、phpで扱う作業を行った際、
文字列を取得してこなくて、酷く嵌ったので、オボエガキ。

PHP7とPHP5で平行稼働させている類似のプログラムがあり、
先にPHP7を修正し、追加のカラムの文字列を取得させると、意図する通りに動作した。

続いてPHP5を動かすが、 取得してこない。

 

色々調べたところ、PHP(7以前)の文字列型は2GB以上の文字列を処理できない
正確には、nverchar等でカラムサイズが2147483647(int4の最大値)
で定義されている場合、PHP内でうまく扱えず、空白として処理されてしまうようだ。

PHPのzvalue_value共用体で文字列長をint型で管理しているため、
文字列の長さが2147483647を超えるとマイナスになってしまうことが原因らしい

PHP5のまま稼働させる必要があったので、クエリにてレコードを取得する際に、

select CONVERT(VARCHAR(512), <カラム名>) as hoge from <table名> where ~;

 

のように、varcharのサイズを指定してカラムを取得すれば,以降PHP内でカラムの文字列を扱えた。

3時間くらい同僚と嵌ってしまい、困ったので、忘れないように残しておく。