PHP-FFI でウェブカメラ撮影をするサンプルといえば、長いこと vdechenaux/PhpWebcam を参考にしていたのですが、時代が移り変わり OpenCV4 系になった結果、C の API が無くなってしまい動かない。
OpenCVの 4系は、Vulkan のサポートも入ったりと、これからは絶対にこっちだろうというオーラを出しているので、PHP-FFI でも OpenCV4 に対応したライブラリーを作りました。
hanhan1978/php-opencv-webcam: Take a snapshot with your web-camera via OpenCV4
使い方は、Readme に書いてあるので、もし万が一使いたい人がいたらどうぞ。私はコレを使って、猫を撮影します。
余談
もしかしたら、どうやってやっているのか??ということに興味がある人がいるかもしれないので簡単な解説。
PHP-FFI は Cの関数は呼び出せますが、C++の関数を直接呼び出すことは出来ません。そこで、ラッパーとなる CPP のファイルを作成&コンパイルして共有ライブラリを作っています。
src/lib/camera.cpp
がそれです。
ソースコード内に extern C
という記述で関数定義をしていますが、これによって C言語から呼び出すことが可能な関数のシンボルを作っています。C言語として呼び出しさえ可能になってしまえば、後はPHP-FFI から呼び出すだけという方式です。
この方法は、ほとんど PHP-FFI じゃなくて CPP やんけと言われそうですが、ともかく PHP からウェブカメラを直接?操作しているので、アリということで…