SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
OpenCV 便利Tips紹介
第27回コンピュータビジョン勉強会@関東
2015/1/31
@dandelion1124
自己紹介
Twitter ID:@dandelion1124
• 学生時代は画像処理の研究に従事。
• 研究室でOpenCV Tipsサイトを作っていたらOpenCV関連書
籍(OpenCVプログラミングブック)を執筆。
• 現在は都内勤務エンジニア。
• Build InsiderにてOpenCV入門
(http://www.buildinsider.net/small/opencv)を連載中。
blog: http://www.atinfinity.info/blog/
wiki: http://www.atinfinity.info/wiki/
本日のアジェンダ
• OpenCVメモリ使用量を計測する
• oclMatで自作OpenCLカーネルを動かす
• OpenCVでラベリングを行う
OpenCVメモリ使用量を計測する
OpenCVメモリ使用量を計測する
• 「Hacking OpenCV for fun and profit」(http://computer-
vision-talks.com/articles/hacking-opencv-for-fun-and-profit/)
というブログ記事にて「OpenCVを拡張したメモリ使用量計測
方法」が紹介されています。
• 最近、公式へのプルリクエストも行われている模様。
(https://github.com/Itseez/opencv/pull/3640)
– そのうち、公式に取り込まれるかも?
ということで、なんだか便利そうなこの機能を試してみました!
OpenCVメモリ使用量を計測する
• 使い方
– OpenCVメモリ使用量計測機能が入ったソース
(https://github.com/BloodAxe/opencv/tree/memory-
snapshots)を取得する
– CMakeで「ENABLE_MEMORY_SNAPSHOTS」をONにして
OpenCVをビルドする
– 計測したい箇所をMEASURE_MEMORYマクロで囲む!
【注意】OpenCV内部で確保したメモリ使用量のみ計測可。
サンプルコード(OpenCVメモリ使用量計測)
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#define ENABLE_MEASURE_MEMORY
#ifndef ENABLE_MEASURE_MEMORY
#define MEASURE_MEMORY(x) {x;}
#else
#define MEASURE_MEMORY(x) { ¥
size_t memOnStart = cv::memorySnapshot().allocatedMemory; x;¥
size_t memOnEnd = cv::memorySnapshot().allocatedMemory; ¥
std::cout << #x << "," << "¥t" << memOnStart / (1024.0*1024.0) << "[MB]" << ¥
" -> " << ¥
memOnEnd / (1024.0*1024.0) << "[MB]" << std::endl; }
#endif
int main(int argc, char** argv)
{
cv::Mat src, dst;
MEASURE_MEMORY(src = cv::imread("lena.jpg", cv::IMREAD_COLOR));
MEASURE_MEMORY(cv::resize(src, dst, cv::Size(), 5.0, 5.0));
MEASURE_MEMORY(dst.release());
return 0;
}
MEASURE_MEMORYマクロで
囲んで実行
計測用マクロ定義
サンプルコード(OpenCVメモリ使用量計測)
#define MEASURE_MEMORY(x) { ¥
size_t memOnStart = cv::memorySnapshot().allocatedMemory; x;¥
size_t memOnEnd = cv::memorySnapshot().allocatedMemory; ¥
std::cout << #x << "," << "¥t" << memOnStart / (1024.0*1024.0) << "[MB]" << ¥
" -> " << ¥
memOnEnd / (1024.0*1024.0) << "[MB]" << std::endl; }
ソースコード(計測用マクロ)
MEASURE_MEMORYマクロの概要
① 処理xを行う前のOpenCVメモリ使用量(memOnStart)を取得する
② 処理xを実行する
③ 処理xを行った後のOpenCVメモリ使用量(memOnEnd)を取得する
④ memOnStart、 memOnEndの値を標準出力する
① ② ③
④
src = cv::imread("lena.jpg", cv::IMREAD_COLOR), 0.332099[MB] -> 1.0821[MB]
cv::resize(src, dst, cv::Size(), 5.0, 5.0), 1.0821[MB] -> 19.8321[MB]
dst.release(), 19.8321[MB] -> 1.0821[MB]
標準出力結果
サンプルコード(OpenCVメモリ使用量計測)
cv::Mat src, dst;
MEASURE_MEMORY(src = cv::imread("lena.jpg", cv::IMREAD_COLOR));
MEASURE_MEMORY(cv::resize(src, dst, cv::Size(), 5.0, 5.0));
MEASURE_MEMORY(dst.release());
ソースコード(抜粋)
実行した処理 処理前のメモリ使用量 処理後のメモリ使用量
サンプルコード(OpenCVメモリ使用量計測)
src = cv::imread("lena.jpg", cv::IMREAD_COLOR), 0.332099[MB] -> 1.0821[MB]
cv::resize(src, dst, cv::Size(), 5.0, 5.0), 1.0821[MB] -> 19.8321[MB]
dst.release(), 19.8321[MB] -> 1.0821[MB]
cv::Mat src, dst;
MEASURE_MEMORY(src = cv::imread("lena.jpg", cv::IMREAD_COLOR));
MEASURE_MEMORY(cv::resize(src, dst, cv::Size(), 5.0, 5.0));
MEASURE_MEMORY(dst.release());
画像データを解放するとメモリ使用量も減少していることがわかる。
サンプルコードは、https://gist.github.com/atinfinity/6b837b3859a5252d4cb8で公開。
ソースコード(抜粋)
標準出力結果
oclMatで
自作OpenCLカーネルを動かす
oclMatとは?
• OpenCLデバイス上で画像処理を行うために用いる
OpenCVのデータ構造
• MatやGpuMatと基本的に使い方が同じ
oclMatの詳細を知りたい方は過去の発表資料を参照ください。
http://www.slideshare.net/YasuhiroYoshimura/gpgpu2opencvopencloclmat
自作OpenCLカーネルを動かす方法
• oclMatで実行されるカーネルは基本的にあらかじめ
OpenCVで既に用意されたOpenCLカーネル
• あまり知られていません(?)が、ユーザ自作の
OpenCLカーネルを動かす方法も提供されています!
– ただし、公式ドキュメントには使い方が一切書かれていないことから、
しぶしぶソースを読んで調べました・・・
oclMatで自作OpenCLカーネルを動作させる
おおまかな手順は以下の通り。
① OpenCLカーネルを記述
② ①からプログラムオブジェクトを作成
③ ocl::openCLExecuteKernelInterop関数に画像データ、②で
作成したプログラムオブジェクトを渡して実行
これで俺々OpenCLカーネルを作って
動かせる!嬉しい!!!
自作OpenCLカーネルを動かす方法
サンプルコード(ネガポジ変換)
const char *KernelSource = "¥n" ¥
"__kernel void negaposi_C1_D0( ¥n" ¥
" __global uchar* input, ¥n" ¥
" __global uchar* output) ¥n" ¥
"{ ¥n" ¥
" int i = get_global_id(0); ¥n" ¥
" output[i] = 255 - input[i]; ¥n" ¥
"}¥n";
①OpenCLカーネルを記述
【注意】
カーネルが対象とするチャンネル数、デプスを
表すような関数名にする必要がある。
この例では、
C1:チャンネル数が1
D0:デプスがCV_8U(=0)
向けのカーネルであることを表している。
画素値(出力) = 255 – 画素値(入力)という単純なカーネル
自作OpenCLカーネル
サンプルコード(ネガポジ変換)
自作OpenCLカーネル実行処理(抜粋)
cv::ocl::ProgramSource program("negaposi", KernelSource);
std::size_t globalThreads[3]={mat_src.cols * mat_src.rows, 1, 1};
std::vector<std::pair<size_t , const void *> > args;
args.push_back( std::make_pair( sizeof(cl_mem), (void *) &ocl_src.data ));
args.push_back( std::make_pair( sizeof(cl_mem), (void *) &ocl_dst.data ));
cv::ocl::openCLExecuteKernelInterop(cv::ocl::Context::getContext(),
program, "negaposi", globalThreads, NULL, args, channels, depth, NULL);
サンプルコードは、https://gist.github.com/atinfinity/8c25c8fb1b3708aa0944で公開。
②①のOpenCLカーネルから
プログラムオブジェクトを作成
③ocl::openCLExecuteKernelInterop関数に画像データ、
②で作成したプログラムオブジェクトを渡して実行
ネガポジ変換の結果
入力画像 出力画像(ネガポジ変換)
OpenCVでラベリングを行う
OpenCVでラベリングを行う(1/2)
OpenCV 2.xでライブラリ等を用いてラベリングを行う場合、
ざっくりと以下の選択肢があります。
• OpenCVBlobsLib(http://opencvblobslib.github.io/opencvblobslib/)を使う
– pthreadを用いて並列化されており、OpenCVとの親和性も高い。
– 2014年3月で更新が止まっている。また、GNU LGPL v3なのがややネック。
• 井村先生のLabelingクラス(http://oshiro.bpe.es.osaka-
u.ac.jp/people/staff/imura/products/labeling)を使う
– 便利関数も用意されている。ライセンスも修正BSDなので使いやすい。
– ただし、OpenCVのMatを直接扱えない。
• cv::findContours関数を使って自前実装する
– もともとラベリング専用の関数ではないので細かいところがイマイチ。
OpenCVでラベリングを行う(2/2)
今更感はありますが、ついにOpenCV 3.0からラベリング専用APIが
提供されます!嬉しい!!
• 簡易版API
– int connectedComponents(InputArray image, OutputArray labels,
int connectivity=8, int ltype=CV_32S)
• もう少し細かい情報(面積、重心、幅 、高さ etc…)が取れるAPI
– int connectedComponentsWithStats(InputArray image,
OutputArray labels, OutputArray stats, OutputArray centroids, int
connectivity=8, int ltype=CV_32S)
• 詳細は公式ドキュメント
(http://docs.opencv.org/master/modules/imgproc/doc/structural_analysis_and_shape
_descriptors.html#connectedcomponents)を参照ください。
サンプルコード(抜粋)
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
int main(int argc, char** argv)
{
cv::Mat src = cv::imread("input.png", cv::IMREAD_GRAYSCALE);
cv::Mat bin;
cv::threshold(src, bin, 0, 255, cv::THRESH_BINARY|cv::THRESH_OTSU);
cv::Mat labelImage(img.size(), CV_32S);
int nLabels = cv::connectedComponents(bin, labelImage, 8);
return 0;
}
画像読み込み
二値化
ラベル用画像生成
※CV_32S or CV_16Uとする必要あり
ラベリング実行。
戻り値がラベル数。
ラベリングAPIは
imgprocモジュールにて提供
このサンプルでは8近傍で
ラベリング処理を行う
ラベリング結果
サンプルコードは、https://gist.github.com/atinfinity/e725e659b4bd68fb3fb4で公開。
入力画像 ラベリング結果
(ラベル毎に色を割り振っている)
おわり

Contenu connexe

Tendances

OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Yoshifumi Kawai
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
Yosuke Onoue
 

Tendances (20)

OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
続Open cv4android
続Open cv4android続Open cv4android
続Open cv4android
 
Introduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGeneratorIntroduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGenerator
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
 
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of GraniA Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
 
OpenCV 百聞は一見にしかず
OpenCV 百聞は一見にしかずOpenCV 百聞は一見にしかず
OpenCV 百聞は一見にしかず
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
 
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
 
C#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめC#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめ
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
 
Hls friends 20161122.key
Hls friends 20161122.keyHls friends 20161122.key
Hls friends 20161122.key
 
SignalRブートキャンプ
SignalRブートキャンプSignalRブートキャンプ
SignalRブートキャンプ
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
qmake入門
qmake入門qmake入門
qmake入門
 
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for UnityUniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for Unity
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
 
Maxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングMaxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミング
 

En vedette

「機械学習 By スタンフォード大学」勉強会 2015.09.11
「機械学習 By スタンフォード大学」勉強会 2015.09.11「機械学習 By スタンフォード大学」勉強会 2015.09.11
「機械学習 By スタンフォード大学」勉強会 2015.09.11
Minoru Chikamune
 
ディジタル信号処理 課題解説 その9
ディジタル信号処理 課題解説 その9ディジタル信号処理 課題解説 その9
ディジタル信号処理 課題解説 その9
noname409
 
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
智啓 出川
 

En vedette (20)

Cvim saisentan-cvpr-hyper depth
Cvim saisentan-cvpr-hyper depthCvim saisentan-cvpr-hyper depth
Cvim saisentan-cvpr-hyper depth
 
深層学習とTensorFlow入門
深層学習とTensorFlow入門深層学習とTensorFlow入門
深層学習とTensorFlow入門
 
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)
 
「Googleを支える技術」の解説 2010.08.23
「Googleを支える技術」の解説 2010.08.23「Googleを支える技術」の解説 2010.08.23
「Googleを支える技術」の解説 2010.08.23
 
Hough forestを用いた物体検出
Hough forestを用いた物体検出Hough forestを用いた物体検出
Hough forestを用いた物体検出
 
20161203 cv 3_d_recon_tracking_eventcamera
20161203 cv 3_d_recon_tracking_eventcamera20161203 cv 3_d_recon_tracking_eventcamera
20161203 cv 3_d_recon_tracking_eventcamera
 
Cloud frontの概要と勘所
Cloud frontの概要と勘所Cloud frontの概要と勘所
Cloud frontの概要と勘所
 
TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!TensorFlowで遊んでみよう!
TensorFlowで遊んでみよう!
 
関東コンピュータビジョン勉強会
関東コンピュータビジョン勉強会関東コンピュータビジョン勉強会
関東コンピュータビジョン勉強会
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
 
機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA
機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA
機械学習モデルフォーマットの話:さようならPMML、こんにちはPFA
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門
 
畳み込みLstm
畳み込みLstm畳み込みLstm
畳み込みLstm
 
「機械学習 By スタンフォード大学」勉強会 2015.09.11
「機械学習 By スタンフォード大学」勉強会 2015.09.11「機械学習 By スタンフォード大学」勉強会 2015.09.11
「機械学習 By スタンフォード大学」勉強会 2015.09.11
 
ディジタル信号処理 課題解説 その9
ディジタル信号処理 課題解説 その9ディジタル信号処理 課題解説 その9
ディジタル信号処理 課題解説 その9
 
ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)
ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)
ハロー・ワールド入門(オープンソースカンファレンス2015 Tokyo/Spring ライトニングトーク)
 
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
2015年度GPGPU実践基礎工学 第14回 GPGPU組込開発環境
 
Process Simulation using DWSIM
Process Simulation using DWSIMProcess Simulation using DWSIM
Process Simulation using DWSIM
 
Amazon Machine Learing と機械学習
Amazon Machine Learing と機械学習Amazon Machine Learing と機械学習
Amazon Machine Learing と機械学習
 
Scilab: Computing Tool For Engineers
Scilab: Computing Tool For EngineersScilab: Computing Tool For Engineers
Scilab: Computing Tool For Engineers
 

Similaire à 【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介

[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
de:code 2017
 
2012 kanemotolablecture1
2012 kanemotolablecture12012 kanemotolablecture1
2012 kanemotolablecture1
ytanno
 
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
NilOne Ltd.
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
Takayuki Kondou
 

Similaire à 【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介 (20)

[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
[AI05] 目指せ、最先端 AI 技術の実活用!Deep Learning フレームワーク 「Microsoft Cognitive Toolkit 」...
 
2012 kanemotolablecture1
2012 kanemotolablecture12012 kanemotolablecture1
2012 kanemotolablecture1
 
Intel OpenVINO™ ツールキットのご紹介
Intel OpenVINO™ ツールキットのご紹介Intel OpenVINO™ ツールキットのご紹介
Intel OpenVINO™ ツールキットのご紹介
 
【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介
【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介
【第45回コンピュータビジョン勉強会@関東】NVIDIA VisionWorks Tips紹介
 
OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門OpenCVを用いた画像処理入門
OpenCVを用いた画像処理入門
 
20110819 関西 kinect勉強会 初級編
20110819 関西 kinect勉強会 初級編20110819 関西 kinect勉強会 初級編
20110819 関西 kinect勉強会 初級編
 
LightSwitch 結局何ができるの
LightSwitch 結局何ができるのLightSwitch 結局何ができるの
LightSwitch 結局何ができるの
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要
 
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
 
継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング継続的インテグレーション3分クッキング
継続的インテグレーション3分クッキング
 
concrete5 の超便利アドオン Designer Content を極める!
concrete5 の超便利アドオン Designer Content を極める!concrete5 の超便利アドオン Designer Content を極める!
concrete5 の超便利アドオン Designer Content を極める!
 
Azure Antenna AI 概要
Azure Antenna AI 概要Azure Antenna AI 概要
Azure Antenna AI 概要
 
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
 
JavaOne2017参加報告 Microservices topic & approach #jjug
JavaOne2017参加報告 Microservices topic & approach #jjugJavaOne2017参加報告 Microservices topic & approach #jjug
JavaOne2017参加報告 Microservices topic & approach #jjug
 
20160728 hyperscale #03
20160728 hyperscale #0320160728 hyperscale #03
20160728 hyperscale #03
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
自習形式で学ぶ「DIGITS による画像分類入門」
自習形式で学ぶ「DIGITS による画像分類入門」自習形式で学ぶ「DIGITS による画像分類入門」
自習形式で学ぶ「DIGITS による画像分類入門」
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソ
 
AWS Black Belt Online Seminar AWS上のJenkins活用方法
AWS Black Belt Online Seminar AWS上のJenkins活用方法AWS Black Belt Online Seminar AWS上のJenkins活用方法
AWS Black Belt Online Seminar AWS上のJenkins活用方法
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 

【第27回コンピュータビジョン勉強会@関東】OpenCV 便利Tips紹介