[Raspberry Pi]web cameraを使ってみる

ztc00 超小型ビデオカメラをUSBに接続します。

# lsusb
Bus 001 Device 004: ID 1bcf:0005 Sunplus Innovation Technology Inc. Optical Mouse
Bus 001 Device 027: ID 05e1:0b01 Syntek Semiconductor Co., Ltd
Bus 001 Device 005: ID 413c:2107 Dell Computer Corp.
Bus 001 Device 006: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

# sudo apt-get -y install fswebcam subversion libjpeg8-dev imagemagick
# svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer
# cd mjpg-streamer; make

# sudo fswebcam sample.jpg
— Opening /dev/video0…
stat: No such file or directory

dav

あれ、認識してない、何でだろう??
ただ、ラズパイでビデオ、カメラ接続が容易にできることがわかった。
シェルで条件に合致したときにfswebcam sample.jpgを打ち込めばいいわけだ。
ほぼイメージができてきた。

Raspberry Piと小型カメラと山崎12年

Raspberry Pi3 Model B+と小型カメラを使って画像認識のアプリケーションを作りたい。

Raspberry Pi

ラズパイって思ってたより小さい。
山崎12年50mlと同じ位のサイズ。

取り敢えず以下の手順で開発していくイメージだけど行けるやろうか??
C言語トレーニング -> Raspberry Pi試作 -> Python学習 -> OpenCV学習 -> Django学習 -> 画像認識アプリケーション開発 -> Demo作成

まず、断捨離から始める。

光の性質

光は電波やマイクロ波と同じく、電磁波の一種(それぞれ波長の長さが異なる)
電磁波とは、電界と磁界から構成されいている波の事
隣同士の同位相の地点間の距離を波長λ[m]という
一秒間に進む距離の中に幾つの波長があるかを周波数f[Hz]として表す
速度をvとすると v = fλ[m/s]

### 粒子としての光(光子)
光子1個のエネルギーE[J]はその振動数V[Hz]によって決まる
E = hv = hc / λ[J]
※hはプランク定数(6.63 * 10^-34[Js])
※cは光の速度(3.0 * 10^8[m/s])
青い光子の方が波長が短く大きいエネルギーを持っている

### 光の性質
入射光の一部は反射(R)、残りは物質を透過(T)するか吸収(A)される
A + R + T = 1

光は物質中の速度v[m/s]は真空中よりも遅くなる
n = c/v … 屈折率n

光ファイバーはガラスと空気の境界面での全反射を利用して損失なく遠くまで光を伝えている

### 光源の種類
発光スペクトルとは光の色に対応した波長
白色光(赤LED, 白LED、豆電球、蛍光灯、液晶モニタ、水銀ランプ、ネオンランプ、レーザ)
※白色光でも波長は異なっている
電磁波を測定する事で対象の温度を測定

物質内に光を照射すると、光のエネルギーにより電子が起きる この電子が元の状態に戻るときに余計なエネルギーとして光を放出することがあり、それを蛍光という
蛍光灯内部では、放電を起こすことにより発生する紫外線を蛍光体に当てて可視光線を発生させている(水銀原子と熱電子を衝突させて紫外線を出す)

### 単位
放射束[W] 光束[lm] …光源からの光の強さ
放射照度[W/m^2] 照度[lux] …物体に入ってくる光の強さ
放射強度[W/sr] 光度[cd] …光源からある方向に出てくる光の強さ
放射輝度[W/sr/m^2] 輝度[cd/m^2] …光源からある方向に出てくる光の強さ

電磁界とは
「電磁界」とは、電流が流れている電線などのまわりに発⽣する「電界」と「磁界」の総称
「電磁波」とは、電界と磁界が交互に発⽣しながら空間を伝わっていく波

静電磁界は医療機器や鉄道などから
超低周波電磁界は電⼒設備や家電製品などから
中間周波電磁界は IH 調理器や電⼦タグ、電⼦商品監視装置などから
⾼周波電磁界は携帯電話など の無線機器や携帯電話基地局、TV・ラジオ放送局などから発⽣

光子は物質に衝突すると、反射、透過、吸収されるってあるけど、電磁波同士で衝突したら干渉したりしないのかね?
電磁界から電磁波が出るのはわかるけど、生活空間は電磁波だらけってこと? その辺りがいまいちイメージしにくい。
しかし、5Gとか通信のコア技術が電磁波なんで、重要なトピックには間違い無いんだが。。

ビデオカメラの技術

### 光学系
撮像レンズ、光学LPF、ダイクロイックプリズム、CFAなど多岐に弥

撮像レンズ
– 昔は異なる焦点距離を3-4本揃えターゲットに合わせて変えていた
– ズームレンズが開発
– 非球面レンズの導入により、レンズ枚数が減少

ダイクロイックプリズム
– レンズから入射した光線をRGB3色光学像に分解して結像させる光学部品

CFA
– R、G、B、それぞれのカラーフィルターをアレイ状に配置したもの

光学 LPF
– 被写体の高周波成分を落とす

マイクロレンズ
– フォトダイオードの上部にマイクロレンズを設けて光の利用率を向上する

### 撮像デバイス(CCD)
– ビデオカメラもCMOSイメージセンサを使用している

### 撮像管
– 電子ビームを偏向集束させるためにコイルアセンブリが必要
– フェースプレートは光学ガラスでできていて、内面にITOが真空蒸着で作られ、その上に光導電膜が形成される
– 撮像管内部は真空が保たれ、ヒーターで温めれた電子ビームが光導電膜を走査すると、光学像によって、光電効果で蓄積された信号電荷がITOの部分から取り出されていく

### CMOSイメージセンサ
– フォトダイオード(PD)とトランジスタで構成される
– フォトダイオードに蓄積された信号電荷は画素ごとに設けられた増幅器で増幅された後、垂直、水平のシフトレジスタで画素ごとにスイッチングされ、読み出される
※PDとは光を電気に変換する計測用デバイス
※トランジスタとは電子回路において、信号を増幅またはスイッチングすることができる半導体素子
※半導体とは導体と絶縁体の中間の電気伝導率をもつ物質

### ビデオカメラの技術展開
被写体 -> 撮像レンズ -> 光学LPF -> CFA -> 【CMOSセンサ】 -> LPF -> AGC CDS -> ADC -> 【カメラ基本回路】(デジタル信号処理) -> 高画質化・高機能化処理 -> ビューファインダ or 録画装置(VTR/DVD/半導体メモリ) or 出力回路

ビデオカメラやデジカメがネット接続できれば、画像処理のところはMLなどでリアルタイムで色々できそうやな。

ビデオカメラの仕組み

ビデオカメラでは、レンズで集めた光をカメラ本体にある撮像素子に結像させ、電気信号に変換し、レコーダーに送られた電気信号は、テープ、フラッシュメモリ、HDD、光学ディスクなどに記録される
動画は通常、毎秒30コマの速度で撮影を行う
信号は画面を区切っていき、それを端から時系列に並べたもの
音声を収録するマイクや、音声入力と音声信号をビデオ信号に付加する機能が搭載されている

### ビデオカメラの性能
– CCDが大きいほど解像度が高く、感度が高い(RGB3枚のCCDを使った3CCDカメラなど)

### ビデオカメラの種類
放送用、業務用、民生用、固定型ビデオカメラがある
1. 放送用ビデオカメラ
絶対の信頼性と高画質、機動性を重視
2. 業務用ビデオカメラ
ビデオパッケージなどコスト管理にシビアな映像を高画質で撮影
3. 民生用ビデオカメラ
市民のプライベート用、手ぶれ補正が表中
4. 固定型ビデオカメラ
監視カメラに用いられる

### 構造
用途に応じて形態が異なる
1. 撮影部分が独立
 業務用や監視用ビデオカメラはほとんどこのタイプ
 カメラヘッドからビデオ信号を出力する線が出ており、カメラ制御部(CCU)を経て使用する
2. 撮影部分と録画部分が一体化
  撮影部分と録画部分が一体化したものを一体型という
  録画するビデオテープレコーダ・ハードディスクレコーダ・DVDレコーダなどの録画部が一体
業務用カメラ、民生用カメラの殆どがこのタイプ
3. 組み立て型
  組立型は撮影部と録画部を組み合わせて使うことが前提

### サイズ
スタジオカメラ、肩乗せカメラ、手持ちカメラ、据え置きカメラなどがある

光子からCCDによる電気変換、光電変換からの画像処理の流れなど基本的な構造はデジカメと一緒かと思ったが、音声信号はカメラにはなく、記録メディアも異なり、一緒くたにするのはかなり乱暴か。

スマホのカメラの仕組み

デュアルカメラ(デュアルレンズ、ダブルレンズカメラ)が増えている
一眼レフと比べて、ズームができなかったり、光を取り込む量が足りなかったりなど、幾つか弱点がある

### デュアルレンズの仕組み
– 普通のレンズと遠くのものを引き寄せるように撮るズームレンズを装備(iPhone, Galaxyなど)
– 超広角レンズを採用するスマホもある(ASUSのZenFone, LGなど)

### モノクロ
モノクロ(白黒画像)専用のセンサーを搭載する方式(HUAWEI)
-> 撮影時にはカラーとモノクロで同時に撮影し、モノクロで記録された光量の情報を元にカラー画像を補正
-> ズームレンズを組み合わせたトリプルレンズもある

### ボケ加工(ポートレートモード)
被写体との距離情報を元に、背景部分にボケのような加工を施す

iPhone 11 Pro/11 Pro Max
- 超広角レンズ
- 広角レンズ
- 望遠レンズ

### スマホの撮像素子
ソニーのCMOSセンサー一強(iPhone, Galaxyなど)

### 画像処理
CMOSセンサーから出力した信号をQualcommなどのアプリケーションプロセッサがRGBの画像に変換

ハードウェアにCPU、GPUがあれば、LSIではなく、アプリケーション側で画像処理を行う
デジカメとスマホカメラの全体的な仕組みはかなりリンクしている
CMOSからどういう電子データが出力されるのか気になるところか

モーションテンプレート

モーションテンプレートとは?
-> 映像の中から動き(モーション)の方向などを抽出する方法
-> 動きを履歴として残したものをが増加する。そして、履歴画像から輝度変化の勾配を計算し、全体としてどのように移動したかを線分で表す
-> 応用範囲が広く、ジェスチャ認識やボールの軌跡を視覚的に表示したりすることができる

カメラキャリブレーション

カメラキャリブレーションとは?
-> 画像中の位置や距離を計測したい時などに、画像の歪みなどを直すこと
-> 例えば車間距離の測定など
-> 基準となる物体を画像中に取り込んでおき、この特徴点をベースに3次元位置を複製し、歪みを計算して補正する
-> オブジェクトの測定、検出に使われるだけでなく、ロボット工学のナビゲーションシステムや3次元シーン再構築などに使用される

### カメラキャリブレーションのロジック
– カメラの相対位置とキャリブレーションパターンのプロット
– 再投影誤差の計算
– パラメータ推定誤差の計算

カメラの外部パラメーターと内部パラメーターを使用してカメラ行列を計算する
外部パラメーターは、3次元のワールド座標系から 3次元のカメラ座標系への剛体変換
内部パラメーターは、3次元のカメラ座標から 2次元のイメージ座標への射影変換

外部パラメータは回転Rと変換tで構成
内部パラメータは焦点距離、光学的中心、せん断係数が含まれる

物体追跡

### SSD
入力された動画に対してフレーム単位で検出を行い、フレームごとのBoundingBoxを取得できる
Nフレーム経過した後、N個のBoundingBoxが得られるので、BoundBoxを解析すれば物体の動きとしてTrajectoryを取得できる。これまでの物体の動きはもちろん、ある程度予測することができる

### 物体追跡技術
画像上に興味のある場所(Region of Interest)を予め定義しておき、次のフレーム領域の中で定義されたROIの特徴と一番類似している領域を検索するのが物体追跡

低画質、早い動きだったり、カメラの角度が変わると、検出精度が落ちやすい
精度を保つためにはRaw品質が良い、圧縮、ピンぼけ、縮小は画像が劣化する

### CNNを利用するTracking手法
Tensorflow実装、GPUリアルタイム処理
Trackingの基本は、探索領域xの中で、ターゲットzに一番類似している領域を見つけること
教師データとしてzをニューラルネットワークに入力する
score mapが生成され、x領域の中にzとの類似度を探し、最も類似している領域が対象となる

なるほど、ここにきてニューラルネットワークの活用法がわかってきました。