現在のGemini様は、ハードウエア関係はお得意でないみたい。一方プログラミングはお得意。そこで今回はソフトウエアをお願いしてみました。「opencvを使って、画像ファイルにガウシアンフィルタをかけるプログラムを作製して」と。このとき老人の頭にあったのはビルドのスクリプトまで作ってもらいたいということ。だってメンドイ。
※Google様の生成AI、Gemini(無料プランだけれども)を使ってソフトをコーディングしてもらっています。
OpenCVは、皆さんご存じの定番、かつ巨大なComputer Vision ライブラリであります。「opencvを使って、画像ファイルにガウシアンフィルタをかけるプログラムを作製して」などと茫漠とした投げかけをしたらば、お楽なPythonコードが生成されるかも、とは思いましたが、3案の中にはCで書かれたものがあるんじゃないか、と勝手に期待。Gemini様に問いかけてみました。
最初の3案は皆Pythonのコード
茫漠とした問いに対するGemini様の最初の回答は、3案全てPythonでした。まあライブラリ呼び出すだけだし、Pythonでいいんじゃね。という感じか。3案どこが違うのか代わり映えなどまったくしません。そして何も手を入れることなく動作OK。こんな感じ。左半分が入力画像、右半分が出力画像であります。
右側がぼやけておりますな。これぞガウシアンフィルタの証。
ただ老人の密な野望は、コンパイルかけるときのビルド・ファイルをなんとかしてもらいたい、という点。そこで追加のお願いをGemini様のプロンプトに入力
C言語からOpenCVを呼び出して
C言語と書けば、流石にGemini様はコンパイル必要なコードを出力してくれるだろう、との期待です。期待は裏切られず「Cのコード」が出力されました。しかし、ここで気づけばよかったのですが、
OpenCV4ではC言語APIが削除されてしまった
らしいです。知らんけど。後でCのつもりでコンパイルかけると大量のエラーを受け取ることになりました。ダメじゃん。ただ、生成されたコードは、ほぼほぼC++なので、拡張子を .C から .CPPに変更し、コンパイラを gcc から g++ に変更するだけでコンパイルは通るようになりました。当方の浅はかな指示などGemini様はお見通し?
なお、何も言わなかったら、コマンドラインでコンパイルできそうなgccの引数をご提示いただきました。ただし、Gemini様ご提示のコマンドラインそのままではビルドは通りませぬ。当方。Windows11上のWSL2内で走っているUbuntu 20.04LTSを使って今回ビルドしているので、この環境に合致した「もろもろ」を設定する必要があるためです。
Makefileを作製してください
まあフツーのC言語のプログラムであれば上記のようなMakefileでビルドOKだろうけれども、OpenCVは環境がちょいと捻くれている?ので上では不足。
CMakeLists.txtを生成して
やはりOpenCVの場合、cmake利用じゃないか、ということで上記のようにお願いすると作成してくれました。
でもね~。ライブラリのリンクのところでエラーが抜けませぬ。結局、年寄が手動で修正したファイルが以下に
cmake_minimum_required(VERSION 3.10) project(GaussianFilter) set(CMAKE_C_STANDARD 11) find_package(OpenCV REQUIRED) include_directories( ${OpenCV_INCLUDE_DIRS} ) add_executable(gaussian_filter gaussian_filter.cpp) target_link_libraries(gaussian_filter ${OpenCV_LIBS} )
上記で .c を .cpp に変更したソースをビルドして、オブジェクトを得、実際にPythonで生成したのと同じ画像ができることを確かめました。
まあねえ、Gemini様はそれなりのビルド・スクリプトは作成してくれるけれども、ライブラリのバージョンとか、ビルドに使っているOSやらコンパイラやらのバージョンまでGemini様にお伝えしているわけではないので、一撃必殺とはいかんよなあ。あたりまえか。