PHP-FFI を使って OpenCV4 で ウェブカメラ撮影

2021-06-14
PHP
FFI
OpenCV

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 からウェブカメラを直接?操作しているので、アリということで…