OpenCV
以前の記事で、シャルトル大聖堂の写真を使って、特徴点マッチングとHomography(射影変換)の記事を書いたが、射影変換でカメラ視点変換しようと思うと、被写体が同じ平面上にないといけない(1つの行列で変換できるのは同じ平面にある点に限られる)、というの…
OpenCVのOptical Flowを試してみる 画像からの動き検出をやってみたいと思っています。 OpenCVの公式チュートリアルの中で、Optical Flowが取り上げられていて、これでできそうなので、やってみます。 OpenCV: Optical Flow 対象データ 同じデータを使っても…
今回で春のパン祭り点数集計のアプリも仕上げです。 GitHubのrelease機能を使って、exeを公開してみます。 下記を参考にしましたが、基本的にはGitHubのガイドに従うだけです。 【GitHub】exeファイルを配布する方法 - しまぞうブログ 改めてGitHubのリポジ…
今回は、exeをGitHubに上げる前に、いくつか調整しておきます。 変更点は、GitHubリポジトリに反映しています。 github.com exe化の変更 その他変更 PowerShellスクリプト化 requirements.txt生成 ついで 以上 exe化の変更 Pyinstaller生成物フォルダを変更 …
今回は、前回に引き続きexe化をやります。 前はPyinstallerを使いましたが、今回はNuitkaを試してみます。 conda環境作成 Nuitkaインストール Nuitka実行 exe実行 ここまで conda環境作成 前回用意したconda環境はかなり最小限のものでしたが、Pyinstallerが…
予定通り、春のパン祭り点数集計アプリのexe化をやってみます。 今回は基本的にはJupyterを使わない記事です。 スクリプト更新 exe化 処理時間表示 conda環境再作成 Pyinstallerでexe化 変更内容 Pyinstaller実行 その他オプション指定 処理時間再確認 ここ…
今回は、春のパン祭り点数集計GUIの微調整をしていきます。 調整項目 主に調整したいのは、 画像更新停止ボタン追加 ある程度点数認識できたら間違っている部分を目視で確認、点数修正、という使い方を想定しているので。 ウィンドウサイズに応じた表示サイ…
春のパン祭り点数集計GUIの調整をしています。 調整項目の一つとして、VideoCaptureの接続タイムアウト設定がありました。 iPhoneに入れたDroidCamアプリ経由で画像を取得する場合、割り当てられているIPアドレスが場合によって変わるので、IP設定を間違えて…
今回は、今まで作ったGUIに、点数集計処理を組み合わせていきます。 処理組み合わせ 去年の点数集計処理と、今回のGUIを組み合わせるだけです。 前回はtkinter.Frameを継承したアプリを一度作り、その後で関数をオーバーライドしたりしましたが、今回は最終…
前回の続き。 今回は、春のパン祭りシール点数集計の処理を組み合わせていく前に、アプリ内処理の並列化をします。 スレッドで並列処理 GUIのクラス化 GUIと画像取得部分の分離 (スレッド化) ここまで スレッドで並列処理 前回はGUI上でのキー入力でカメラ画…
前の記事通り、GUIでのカメラ画像表示をやってみます。 前回と前々回の内容の組み合わせ+αです。 カメラ画像表示 キー入力受付 今度こそカメラ画像表示 ここまで カメラ画像表示 前回、前々回の内容に加えて、OpenCV画像→PIL画像の変換があるぐらいです。 下…
前回の続きです。 春のパン祭りアプリをexe化する前に、PythonでGUIを作れるようにしておきます。 今回の記事はJupyter notebookでやった内容の貼り付けです。 Tkinter試し GUI基本(テキスト表示、文字入力、ボタン) 少しだけ試し 画像表示 ここまで Tkinter…
久し振りの更新です。 今年も春のパン祭りが始まり、シールも早速集まってきた(もらった)ので、去年のシール点数自動集計を改めて触ってみました。 いくつか本体の処理以外でやったことがあるので、記事にしておきます。 今回は、Jupyter notebookのエクスポ…
今回は、前回高速化した処理で、PCカメラ画像のリアルタイム処理をやってみます。 今度こそ最終回! 準備 修正したスクリプトの読み込み、テンプレートデータとSVMデータの読み込み。 from harupan_data.harupan import * svm = load_svm('harupan_data/haru…
春のパン祭り点数集計、前回で最後のつもりでしたが、1つ高速化の手段を思いついたので、もうちょっとがんばります。 変更内容 下準備 スクリプト読み込み テンプレートデータ、SVMデータ読み込み 処理変更 変更処理試し 処理時間計測 いざ実施 探索範囲を変…
今回は、春のパン祭りのシール点数集計の仕上げになるかと。 リアルタイム処理作成 PCのカメラ画像を連続的に取得して、点数集計を実施します。 今年は現状3枚の春のパン祭り台紙が用意できているので、これで確認します。 下準備 スクリプト読み込み テンプ…
まだ春のパン祭りの続きですが、1点だけ処理の調整を試したいと思います。 -- 追記 -- 今までmarkdown記法でブログを書いていると、ときどき画像がうまく表示されない(半角スペース4つのブロックの後に画像が表示されない)問題があって、前にはてなブログさ…
春のパン祭りシールの点数文字認識処理は、これ以上調整はなしにしようと思っていましたが、もう少しがんばってみます。 方針 前回の結果で、問題点の1つは シールの白抜き部分(点数文字が含まれる)の間隔が小さく、輪郭がつながってしまう ということだった…
春のパン祭り点数集計も仕上げの段階ですが、今回はPCのカメラ画像を取得できるようにしたいと思います。 カメラから画像取得 OpenCVチュートリアルの最初のほうでやっています。 これを試してみます。 https://docs.opencv.org/4.x/dd/d43/tutorial_py_vide…
今回は、点数計算の実アプリケーション作成に向けて、以下の処理を検討します。 画像1枚を受け取ってからの一連の処理 点数計算 処理フロー 点数計算アプリケーションは、ストリーミングされている画像データから、1枚取り出して計算処理を実施・表示、とい…
春のパン祭り点数文字認識処理を調整していますが、なかなか完璧にはいかず… 調整は今回までにして、実際のアプリケーションを作っていく方向に進めたいと思います。 今回変更したこと 色々調整していて、以下変更しました。 数字テンプレートとする輪郭デー…
春のパン祭り点数計算は前回までの処理でおおよそできるようになりましたが、少し調整していきます。 ICP収束条件 初期変換行列での判定 文章を整える気があまりなく… 以下雑な文章ご容赦で。 下準備 Jupyter notebookを改めて作っているので、始めに必要な…
前回からの続きです。 Jupyter notebookのデータ等の状態も引き継いでいます。 前回は、春のパン祭りシール台紙の画像から点数数字の輪郭を取得、数字テンプレートと比較して一致度を出して、固定の閾値で判定してみましたが、いまいちきっちりとは判定でき…
春のパン祭りが始まりましたが、まだ点数自動計算ができず… むずい… 方式変更 前まで検討していた点数判定方法を実際のデータで試したところ、うまくいかず。 特に"5"の文字の判定が困難でした。 経過は省きますが、以下の点を変更しました。 "0"以外での比…
連続の投稿になりますが、続きです。 2月1日から春のパン祭りスタートらしいので、ペースアップ中です… 今回は前回の記事と同じJupyter notebookでやっているので、画像読み込みなどの下準備は省きます。 楕円近似による"0"の判定 "0"の文字の判定についてで…
前回の続きです。 今回は実際に文字テンプレート - 比較対象輪郭間のアフィン変換行列の推定、比較を行ってみたいと思います。 下準備 今まで通りの画像読み込み、下処理です。 import cv2 import numpy as np %matplotlib inline from matplotlib import py…
あけましておめでとうございます。 1月も半分以上過ぎてしまいましたが、今年初めての記事です。 今年も引き続き春のパン祭りシール点数集計をやっていきます。 去年の3月から始めて、色々寄り道しながらゆっくり進めてきましたが、 今年の春のパン祭りに間…
春のパン祭りシール点数集計の続きです。 前回のおさらい 前回までで、ひとまず点数文字の輪郭が取れるようになりました。 Hue,Saturation情報を使って2値化 階層認識ありで輪郭を検出、最上位階層の1つ下の輪郭を検出 ここから、テンプレートマッチングを使…
引き続きの春のパン祭りシール点数集計。 前回の結果再確認 前回の結果をよく見ると、点数文字の輪郭をきちんと取れていない部分がありました。 3つ目の画像で、中央上部の'1'、'2'の輪郭が取れていません。 対応を検討します。 様子チェック まずは問題の画…
春のパン祭りシール点数集計の続きです。 今回の内容 前回、春のパン祭り画像から点数文字の輪郭を取得できましたが、まだ1画像でしか試していないので、 他の画像でもやってみます。 関数化 いつも通りの手順ですが、内容が増えてきたので、関数化しておき…