Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
F#で作るカメラアプリケーション
Kouji Matsui
PRO
October 29, 2022
Programming
0
73
F#で作るカメラアプリケーション
Kouji Matsui
PRO
October 29, 2022
Tweet
Share
More Decks by Kouji Matsui
See All by Kouji Matsui
F# Epoxy
kekyo
PRO
1
310
F# Epoxy (English translated)
kekyo
PRO
0
500
ビジュアルでわかる最初のGit (第一部)
kekyo
PRO
1
340
ビジュアルでわかる最初のGit (第二部)
kekyo
PRO
1
780
A Proposal for an Interactive Shell Based on a Typed Lambda Calculus
kekyo
PRO
0
17
パターンでわかる! .NET Coreの 非同期処理
kekyo
PRO
1
47
Making archive IL2C #6-55 dotNET600 2018
kekyo
PRO
0
20
Locality of Reference
kekyo
PRO
0
23
C#でわかる こわくないMonad
kekyo
PRO
0
93
Other Decks in Programming
See All in Programming
Cloudflare WorkersでGoを動かすライブラリを作っている話
syumai
1
320
T3 Stack and TypeScript ecosystem
quramy
3
790
Hatena Engineer Seminar #23「新卒研修で気軽に『ありがとう』を伝え合える Slack アプリを開発した話」
slashnephy
0
380
10年以上続くプロダクトの フロントエンド刷新プロジェクトのふりかえり
yotahada3
2
350
How to Fight Production Incidents?
asatarin
0
230
Spring BootとKubernetesで実現する今どきのDevOps入門
xblood
0
390
[2023년 1월 세미나] 데이터 분석가 되면 어떤 일을 하나요?
datarian
0
610
TokyoR#103_DataProcessing
kilometer
0
540
量子コンピュータ時代のプログラミングセミナー / 20221222_Amplify_seminar _route_optimization
fixstars
0
250
2023年にクル(かもしれない)通信ミドルウェア技術(仮)
s_hosoai
0
220
コンピュータビジョンセミナー2 / computer_vision_seminar_libSGM
fixstars
0
320
フロントエンドで学んだことをデータ分析で使ってみた話
daichi_igarashi
0
190
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
2
300
Design by the Numbers
sachag
271
18k
Embracing the Ebb and Flow
colly
75
3.6k
How to Ace a Technical Interview
jacobian
270
21k
Mobile First: as difficult as doing things right
swwweet
213
7.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
32
6.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
31
20k
Six Lessons from altMBA
skipperchong
15
2.3k
The Web Native Designer (August 2011)
paulrobertlloyd
76
2.2k
Robots, Beer and Maslow
schacon
154
7.3k
Infographics Made Easy
chrislema
235
17k
A Philosophy of Restraint
colly
193
15k
Transcript
(c) 2022 Kouji Matsui F#で作る カメラアプリケーション 2022.11.29 FUN FAN F#
7 IN TOKYO - KOUJI MATSUI @KOZY_KEKYO
(c) 2022 Kouji Matsui Kouji Matsui – kozy, kekyo •
NAGOYA city, AICHI pref., JP • Self employed • Center CLR organizer. https://centerclr.connpass.com/ • .NET/F#/IL/metaprogramming or like… • Bicycle rider
(c) 2022 Kouji Matsui (c) 2022 Kouji Matsui Agenda 最近のアウトプット
F#でGUIアプリケーションを作る ライブデモ
(c) 2022 Kouji Matsui 最近のアウトプット ここ1年程で新規に作ったり継続してメンテナンスしているOSS プロジェクトを、10個ほど紹介します。 ほぼ全部のプロジェクトを、何かしらのお仕事で使っています ◦ 非公開案件ですが、OSSで公開したプロジェクトを仕事で使用OKして
貰っているので感謝。 ここに挙げてないプロジェクトもまだいくつか…
(c) 2022 Kouji Matsui 最近のアウトプット RelaxVersioner ◦ パッケージ導入だけで、完全自動で、Gitのタグやブランチ情報をコー ドに埋め込みます。 ◦
Gitだけでバージョン管理出来ます。 ◦ C#, F#, VB.NET, C++/CLI ◦ もちろんCI対応。SourceLink併用可能。 ◦ パッケージへの適用も自動。 ◦ もう結構長くやってて、ずっと使っています。 ◦ https://github.com/kekyo/CenterCLR.RelaxVersioner
(c) 2022 Kouji Matsui 最近のアウトプット DupeNukem ◦ ガワネイティブで使うWebViewのJavaScriptと、非同期双方向RPCが手軽 に出来る、WebViewの実装に依存しないライブラリ。 ◦
WebViewに要求されるのは、文字列の送受信のみ。 ◦ C#でもJavaScriptでも、async-awaitで同じようにコードが書けます。通 信アーキテクチャについて悩まなくても良くなった。 ◦ Edge WebView2 ◦ CefSharp ◦ Xamarin Forms (Xam.Plugin.Webview) ◦ etc… ◦ https://github.com/kekyo/DupeNukem
(c) 2022 Kouji Matsui 最近のアウトプット Marionetta ◦ DupeNukemを使って、アウトプロセスサンドボックスでライブラリを 駆動するための、IPCライブラリ。 ◦
直接メインプロジェクトに組み入れることが出来ない、以下のような コードを、出来るだけ簡単に扱えるようにします。 ◦ どうしようもない負債コード ◦ 古いアーキテクチャのライブラリ ◦ 32ビットで縛られているライブラリ ◦ .NET Framework固定のライブラリ ◦ https://github.com/kekyo/Marionetta
(c) 2022 Kouji Matsui 最近のアウトプット ILAsm.Managed ◦ 公式のILAsmがネイティブコードで扱いにくいので、monoのILAsmをマ ルチプラットフォームで使えるように移植したもの。 ◦
公式ILAsmは、ディストリビューション毎にパッケージが分割されていてちょっと… そこに NuGet CLIの制約が組み合わさって、使い物にならない… ◦ マネージコードなので、Windows, LinuxどちらでもOK。 ◦ つまり、CIフリー。 ◦ https://github.com/kekyo/ILAsm.Managed
(c) 2022 Kouji Matsui 最近のアウトプット ILCompose ◦ CILアセンブラ言語で書かれたコードを、直接C#などのアセンブリに挿 入します。 ◦
C#で言うところの、partial classによる合成をCILで出来るようにしたも の。イメージ的には、ソース分割されるインラインアセンブラ。 ◦ かつてのILSupportが扱いにくいので、パッケージ導入だけでマルチプ ラットフォームで使えるようにしました。 ◦ CIフリー。 ◦ https://github.com/kekyo/ILCompose
(c) 2022 Kouji Matsui 最近のアウトプット ILRepack.FullAuto ◦ ILRepack (Successor of
ILMerge) を、完全自動で使えるようにしたパッ ケージ。 ◦ 多種多様な亜種がありますが、いろいろ問題が発生したりするので、 とにかく現在の環境で完全に使えるように。 ◦ Linuxでも行けるので、CIで使えます(要: monoランタイム) ◦ https://github.com/kekyo/ILRepack.FullAuto
(c) 2022 Kouji Matsui 最近のアウトプット SkiaImageView ◦ SkiaSharpの各種オブジェクトを、バインディングだけで表示できるコ ントロールです。 ◦
WPFのImageコントロールに似せてあります。レイアウトの制御方法も ほぼ同じです。 ◦ Source=“{Binding Image}” ◦ SKBitmap, SKImage, SKPicture, SKDrawable, SKSurface ◦ 文字列またはUriで非同期ダウンロード表示 ◦ WPF, Xamarin Forms ◦ https://github.com/kekyo/SkiaImageView
(c) 2022 Kouji Matsui 最近のアウトプット FlashCap ◦ マルチプラットフォーム対応のビデオキャプチャ(フレームグラバ) ◦ Windows
(DirectShow, VFW), Linux (V4L2) ◦ 完全に自前でP/Invokeするので、依存ライブラリなし。 ◦ 多くのデバイスと環境でテスト。 ◦ 簡潔かつ拡張可能なインターフェイス。 ◦ https://github.com/kekyo/FlashCap
(c) 2022 Kouji Matsui 最近のアウトプット Epoxy ◦ 様々なプラットフォームで使える、直交的なMVVMライブラリです。 ◦ WPF,
Avalonia, OpenSilver, UWP, WinUI 3, Xamarin Forms, MAUI ◦ F#も行けます!(WPF, Avalonia) ◦ どの環境でも、一様に同じAPIインターフェイス ◦ ViewModelのイベント発火は、ビルド時に自動的にCILコード挿入を行 うので、完全スタティック動作。 ◦ 個々の機能は完全に独立していて、自由に組み合わせることが出来ま す。 ◦ そのため、他のライブラリとの併用も問題ありません。 ◦ https://github.com/kekyo/Epoxy
(c) 2022 Kouji Matsui (c) 2022 Kouji Matsui Agenda 最近のアウトプット
F#でGUIアプリケーションを作る ライブデモ
(c) 2022 Kouji Matsui F#でGUIアプリケーションを作る カメラアプリケーションを作ります: ◦ USBカメラを接続して、映像がプレビュー出来るところまでが目標 ◦ F#でWPFのアプリケーション
◦ Epoxy, FlashCap, SkiaImageViewを使います ◦ コードビハインドは一切使いません ◦ そもそも、F#とWPFの組み合わせでは出来ません。 ◦ Epoxyがあれば簡単です。
(c) 2022 Kouji Matsui (c) 2022 Kouji Matsui Agenda 最近のアウトプット
F#でGUIアプリケーションを作る ライブデモ
(c) 2022 Kouji Matsui ライブデモ YouTube: https://youtu.be/bhXDUpG8xSg
(c) 2022 Kouji Matsui 以下の展望が持てるかも? キーか何かでシャッターを切って、画像を保存するのは簡単 に出来るはず? ◦ XAMLにボタンを配置して、Commandをプロパティで公開しておけば、 ボタンクリックが検知できる。
◦ 直近のSKBitmapを保存しておく。 ◦ SKBitmap.Encode()で任意の画像フォーマットでファイルに保存。 Zxingにかければ、バーコードをリアルタイムで認識出来そ う? ◦ ZXing.Net.Bindings.SkiaSharpのSKBitmapLuminanceSourceを 使えば、SKBitmapから直接バーコード検出が出来ます。
(c) 2022 Kouji Matsui 以下の展望が持てるかも? 少しの変更でAvaloniaでも行けそう? ◦ SKBitmapの代わりにAvaloniaのBitmapを使えば簡単に行けます。 C# &
XAMLの様々な知見が応用できそう? ◦ 課題も、対応する情報もウェブ上にいっぱいあります。 ◦ F#固有の問題は (Epoxyを使う限りは) そんなに多くないです。
(c) 2022 Kouji Matsui 質疑応答 デモ実装例: https://github.com/kekyo/fffsharp-demo-cameraapp