<!--親の顔より見た光景-->

日々の発見を残していきます。

【plantuml】ピリオドをクラス名として扱わせる

クラス図にヘッダファイルを登場させたくなった。
.hの、.が namespaceとして扱われるようで、思い通り描いてくれない。
f:id:akagi13213:20190113220705p:plain
↑こうなっちゃう。

class goal_functions as "goal_functions.h" {
    +double getGoalPositionDistance(const gemetry_msgs::PoseStamped& global_pose
}

上のソースのように、

class 適当な名前 as "描画させたい名前" {

の形式で記述すれば、ピリオドをクラス名に含ませることが可能。
f:id:akagi13213:20190113220600p:plain

ヘビの安否確認システム

帰省時、蛇は雪国に持っていけないので安否システムを作った。

Python と USBカメラだけでヘビが動いてるか(生きてるか)を、自宅から離れていても確認出来る。

f:id:akagi13213:20181225000054j:image


f:id:akagi13213:20181225000911j:image

少しでも動いたらgmailに画像添付して通知を送ってくれる。監視はとりあえず1分毎。

 

仕組みは簡単で、前回の画像と現在の画像をグレースケール化、走査し、輝度差がしきい値以上なら差分としてカウント。

1分前から変化があった画素は緑にした。上手く蛇のとこだけ検知できてる。うちのヘビは白いので閾値が効きやすい…


最初はAKAZEとかORBとか、特徴点マッチングを試したけど、水槽の定点カメラでは似すぎて厳しかった。

 

https://github.com/akagi132/basilisk

 

別タブからyoutubeに戻ると再生が停止・画が停止する

設定->詳細設定->システム->「ハードウェアアクセラレーションが使用可能な場合は使用する」をOFFにする。

Chromeがアップデートするとここが勝手にONになってたりする。

C#からC++の関数を呼ぶ 文字列が引数のとき

以下でうまくいく。
C++ソース】

extern "C"
{
    __declspec(dllexport) void Resize(const char* file_path, double fx, double fy );
    __declspec( dllexport ) void Print(const char* str);
}

C#ソース】

        [DllImport("OpenCV.dll")]
        static extern void Resize(string str, double fx, double fy);
        [DllImport("OpenCV.dll")]
        static extern void Print(string str);

        static void Main()
        {
            Print("test!");
            string file_path = "src.jpg";
            Resize(file_path, 0.5, 0.5);
            System.Console.WriteLine("end.");
        }

C++ではC形式で引数を定義。(const char*)
C#ではstringを実引数として呼べる。

Visual Studio 2017 + OpenCV(3.00)の環境構築

【成功した環境】
・OS:Windows 10
OpenCV:3.00
・VisualStudio:Visual Studio Community 2017

以下の手順を慎重に行えばOpenCVライブラリが使えるぞ!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

0.OpenCVをダウンロード

OpenCV3.2インストール方法(ビルドなし)を参考に、ダウンロード。

1.プロジェクト作成

VisualStudio2017でOpenCVアプリ用のプロジェクトを作成。(Win32コンソールアプリケーション)

2.ソリューション構成を「Release」に変更。

f:id:akagi13213:20180901233815p:plain


f:id:akagi13213:20180901234221p:plain


f:id:akagi13213:20180901234444p:plain

3.OpenCVのパスをプロジェクトに通す

以下リンクを参考に、パスを通す。
Visual StudioとOpenCVを使う | OpenCVで遊ぼう!

※libへのパスはx86を選ぶこと。
 VisualStudioプロジェクトデフォルト設定の「対象コンピュータ」がx86になってるため

4.依存ファイルを指定

プロジェクト -> 構成プロパティ -> リンカー -> 入力 -> 追加の依存ファイルに「opencv_world300.lib」を追加。(バージョンに合わせて数字は変更)
opencv_world300d.libを指定すると、「~~~.dllが見つからない」とか言うエラーが出て実行できないので注意。

f:id:akagi13213:20180901233815p:plain


f:id:akagi13213:20180901235015p:plain

5.プロジェクトをビルド。

以下のプログラムをビルド・実行。
黒い窓が現れれば成功。

#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
    Mat image = Mat::zeros(100, 100, CV_8UC3);
    imshow("", image);
    waitKey(0);
}