image

大学の市民講座で、OpenCVの講座を取っている人がいた。毎週宿題が出るので、自宅のパソコン環境を整えていたとか。勿論Windows上の事です。その人曰く、

そうなんですよ、一番手間取ったのがプロパティシートってやつで VC++ではプロジェクトのプロパティ設定をプロパティシートを読み込むことで既存の設定ができるってやつで 拡張子は ".props" なんですが中身はテキストファイルで編集可能とのこと XML規則ファイルってやつらしい

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup />
  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>C:\Users\Owner\Desktop\opencv\build\include</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <AdditionalLibraryDirectories>C:\Users\Owner\Desktop\opencv\build\x64\vc15\lib</AdditionalLibraryDirectories>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>

マイクロソフトお得意のやつですな。コンパイルする時、includeファイルは何処にあるやつを使うねん? ライブラリと言うか道具箱は何処から持ってくるねん?

そんなの、Makefileに書いておくに決まってるしょ。だから、オイラーはWindowsで開発ったら、golang一択です。それ以外には手を出さないのさ。

new octave in CentOS

控え目なCentOSに新風を! 選挙が近いですから、それ風な標語を掲げてみる。 最新のoctaveは、次の所から供給されてます。これが世界標準です。

GNU Octave(download)

世界標準を成し遂げるには、ディストリビューションを横断して手当出来ないといけない。 ウブ方面では、独自にスナップなんてのを提供してるけど、それはウブローカルな事。 世界標準の枠組みは、flatpakらしい。

新しいパッケージの仕組み,Flatpakを使用する

octaveを植え付ける元を、上記のサイトからDLしてくる。flatpakはCentOSに内蔵されてるので、下記のコマンドを叩くだけ。

(base) cent:Downloads$ flatpak --user install org.octave.Octave.flatpakref
The remote 'flathub', refered to by 'org.octave.Octave' at location https://dl.flathub.org/repo contains additional applications.
Should the remote be kept for future installations? [y/n]: y
The application org.octave.Octave depends on runtimes from:
  https://dl.flathub.org/repo/
Configure this as new remote 'flathub-1' [y/n]: y
Required runtime for org.octave.Octave/x86_64/stable (runtime/org.kde.Sdk/x86_64/5.12) found in remotes: flathub
1) flathub
2) flathub-1
Which do you want to install (0 to abort)? [0-2]: 1
Installing in user:
org.kde.Sdk/x86_64/5.12                            flathub 0099b34a45a1
org.freedesktop.Platform.html5-codecs/x86_64/18.08 flathub dfca6ff90bc4
org.kde.KStyle.Adwaita/x86_64/5.12                 flathub ff24e32a3ab8
org.kde.Sdk.Locale/x86_64/5.12                     flathub e6616964babc
org.octave.Octave/x86_64/stable                    flathub daf88f42feca
  permissions: ipc, network, pulseaudio, wayland, x11, dri
  file access: host, xdg-config/kdeglobals:ro, xdg-run/dconf, ~/.config/dconf:ro
  dbus access: com.canonical.AppMenu.Registrar, org.freedesktop.Flatpak
Is this ok [y/n]: y
Installing for user: org.kde.Sdk/x86_64/5.12 from flathub
 :

どんなのが入ったか確認。

(base) cent:~$ flatpak list
Ref                                                Options
org.octave.Octave/x86_64/stable                    user,current
org.freedesktop.Platform.html5-codecs/x86_64/18.08 user,runtime
org.kde.KStyle.Adwaita/x86_64/5.12                 user,runtime
org.kde.Sdk/x86_64/5.12                            user,runtime
(base) cent:~$ flatpak run  org.octave.Octave
octave: X11 DISPLAY environment variable not set
octave: disabling GUI features
GNU Octave, version 5.1.0

そして起動してみたら、Xと繋がらない。仮想環境下で動かしているから?

flatpak-run doesn't work over X11 Forwarding こういう人がうじゃうじゃいたぞ。仰せに従う。

[ham@cent ~]$ flatpak run --share=network --command=sh org.octave.Octave -c "DISPLAY=x.x.x.x:0 octave"
GNU Octave, version 5.1.0
 :
octave:1> image(magic(5))
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

どうなや繋がったんで、簡単なやつを実行したら、窓は出てきたけど、中身無し。libGLエラーが関係してるかと思ったけど、検索したらGPGPUあたりのお悩みしかみつからん。

これはもう、ちゃんとDesktop環境の上で動かせって事だな。(こちらは、ちゃんと動く)

[ham@cent ~]$ cat .octaverc
graphics_toolkit('gnuplot');

諦め切れないオイラーは往生際悪く、世に問うた。そして解決方を伝授された。これでCUI端末上から、グラフを眺められる。

octave:7> available_graphics_toolkits()
ans =
{
  [1,1] = fltk
  [1,2] = gnuplot
  [1,3] = qt
}

こんな候補が有るのか。まあ、素直に慣れ親しんだgnuplotにしとけ。それが無難だぞ。

[ham@cent tmp]$ flatpak ps
Instance   PID  Application       Runtime
2282297954 6707 org.octave.Octave org.kde.Sdk
[ham@cent tmp]$ ps awx | grep 6707
 6707 pts/2    S+     0:00 /usr/libexec/flatpak-bwrap --args 17 sh -c DISPLAY=x.x.x.x:0 octave

関係ないけど、flatpakの一端が垣間見えたぞ。ドッカー未満、かつpythonのversion切り替え器以上って雰囲気だな。

[ham@cent ~]$ flatpak remote-ls | wc
   1738    3476   63526
[ham@cent ~]$ flatpak remote-ls | grep octave
org.octave.Octave       flathub
org.octave.Octave       flathub-1
[ham@cent ~]$ flatpak remote-ls | grep ffmpeg
org.freedesktop.Platform.ffmpeg flathub
org.freedesktop.Platform.ffmpeg flathub-1

ふーん、困った時は頼りにしてもいいかな?

image for octave

一人でOpenCV系の自習です。

OpenCV3-Pythonチュートリアルこんなんで、軽く使うのが吉。Cフラフラ語と心中したくないですから。で、概要が分かったとしよう。

次はoctaveに進出だな。画像ったって、ピクセルの行列だから、きっと扱えるに違いない。

行列による画像処理

そして、広くoctaveの知識を仕入れる。

Octaveを使う

Octave を使いましょう(pdf)

octave:1> x = imread('lena.jpg');
octave:2> image( flipud(x) );
octave:3> print -dpng 'rlena.png'

試運転でlena嬢をまずは血祭じゃなくて、逆さ吊りにします。何故かっていうと、逆さにしたら、スカートがめくれて、ムフフになると思ったから。まて、巷では肩の上の画像が出回っているけど、肩から下はあらわな姿なのよね。興味ある人はファイル名で探してみるとよい。

それより注目は、行列の豪華さですかね。左右の反転は、fliplrで済んじゃうしね。

imageing for octave

これ、イメージの説明の所で、自慢気に展示されていた。

I = imread ("myimage.jpg");
S = conv2 (I, ones (5, 5) / 25, "same");
[Dx, Dy] = gradient (S);

たたみ込み演算による画像処理

「畳み込み(畳み込み積分):convolution」のできるだけ簡単な説明

畳み込みニューラルネットワークの仕組み

コンボリューション行列(gimp)

画像認識と数学

内積の計算方法

octave:18> a = [1 1 1 0 0]
a =

   1   1   1   0   0

octave:19> b = [1 1 0 0 0]
b =

   1   1   0   0   0

octave:20> a * b
error: operator *: nonconformant arguments (op1 is 1x5, op2 is 1x5)
octave:20> a * b'
ans =  2
octave:21> sum( a .* b)
ans =  2

エッジ抽出

octave:8> size(y)
ans =

   225   400     3

octave:10> y = x(:,:,1)/3 + x(:,:,2)/3 + x(:,:,3)/3 ;
octave:11> size(y)
ans =

   225   400

octave:13> [Dx, Dy] = gradient (y);
octave:14> size(Dx)
ans =

   225   400

octave:15> a = Dx/2 + Dy/2;
octave:16> image(a)

for speedup(octave doc)

高卒でもわかる機械学習 (7) 畳み込みニューラルネット その1

octave:1> x = imread('logo.png');
octave:2> y=255-x;
octave:3> image(x)
octave:4> image(y)
octave:5> z=mean(y,3);
octave:6> image(z)

OpenCVの色付きロゴを読み込んで、色を反転させ、それを白黒にする。

octave:10> [Dx, Dy] = gradient(z);
octave:11> imagesc(Dx+Dy)
octave:12> print -dpng 'difflogo.png'

gradientって傾きって意味だけど、これって一次微分という理解で宜しいのかな? difflogo.png

numpy で畳み込み演算と平滑化フィルタの実装

Octave を用いた画像処理や統計処理,Octave と OpenCV との連携

これ非常に有益なページですよ。

etc

GLUTによる「手抜き」OpenGL入門