実は最近Qtをさわってます。
数年前にQtを使ってアプリケーションを作っていて、最終的に便利なジェネレーションパッケージとして「PyamlQt」を作成しました。
割と便利だったのですが、GUIに時間を割くことができず中途半端に終わっています。
1年前はたしかReactつかってGUI作りてえなぁと思ったり、flutter(dart)使ったり、htmlベースでGUI使ったりと綺麗なグラフィックをもとめてチョット勉強したりしていた気がします。
結局、慣れるまで大変すぎるのと、私が開発したいのはC++/Pythonアプリケーションであることがあり挫折。
最近までは、Rvizにパネル出してごまかしもしていました。
つまり、よわよわ駆け出しエンジニアです‥😇
いまさらですが、QLabelで画像を描画できるらしいと知ったので、(紹介も兼ねて)imshowの代わりにPyside2(Python版Qt)を使ってGUIカスタムしてみようと思います。
使用環境
はやくUbuntu24に乗りかえなければ‥
(python depends)
PyamlSide2の使いかた
そもそも、PyamlSide2とは2022年の技育展に出すことと、さくっとGUIを作成して研究に使うデモアプリをさくっと終わらせる2つの目的がありました。
インストールは次の通り。READMEちゃんと書いていた自分に感謝。
git clone https://github.com/Ar-Ray-code/ReadableWidgets.git cd ReadableWidgets/PySide2/ pip install .
READMEを読むと、どうやらYAMLファイルからPySide2ランタイムを自動生成してくれるらしい。
とりあえずYAMLファイルを適当に作成します。
WINDOW: type: window x: 0 y: 0 width: 1280 height: 729 title: "camera demo" style_common: type: stylesheet style: include: path: https://raw.githubusercontent.com/Ar-Ray-code/PyamlQt/main/yaml/color/style_blue.yaml key: style_common button_1: type: qpushbutton rect: include: path: https://raw.githubusercontent.com/Ar-Ray-code/PyamlQt/main/yaml/rect/basic_button.yaml key: basic_button x_center: 100 y_center: 360 text: "PUSH" vcodec_label: type: qlabel x_center: 640 y_center: 360 rect: width: 640 height: 360 text: "" style: font: 10px color: white font-family: Ubuntu
生成します。
rw_gen_yaml2py -i yaml/video_demo.yaml -o video_demo.py
video_demo.py
というファイルが生成されました。
これと、生成に使用したYAMLファイルを引数に実行
python3 video_demo.py video_demo.yaml
はい、GUI完成!
え、、2年前の自分天才なのでは!?(自画自賛)
ビデオフレームを埋め込む
ということで、OpenCVでビデオ取得しましょう。
これでOK! QTimerはQTで使えるTImerです。
opencv-python GUI抜きが必要
実行しようとすると次のエラーが‥
アンインストールして opencv-python-headless
をインストールします。
pip3 uninstall opencv-python pip3 install opencv-python-headless
実行するとウェブカメラ映像が垂れ流されて「PUSH」ボタンで一時停止可能なウィンドウが開きます。
完璧です!
コードはこちらにあります↓
C++向けに実装したいなぁと一瞬思いましたが、面倒だったことを思い出しました😇
そういえば、今はChatGPTというものがありますね()