2017年10月13日 星期五

在Visual Studio內嵌美人時鐘 - 美人時計IDE

puni_ide_4

今天在找Visual Studio上的theme時,發現到一個有趣的東西美人時計 IDE,因為介紹上沒看到圖,不是很能了解具體呈現會是怎樣,所以我抱著踩雷的心情試看看,沒想到裝了之後這玩意真心不錯XD

[Python] Using deep learning model in OpenCV | 在OpenCV中使用深度學習模型

space_shuttle

OpenCV 3.3 included dnn module in the main repository, now we can use popular framework like Caffe, TensorFlow in OpenCV via dnn module.
OpenCV 3.3將dnn模組包入了主庫,現在我們可以在OpenCV中藉由dnn模組使用像是Caffe,TensorFlow這些熱門框架。

This post we will follow this dnn sample to test it (with some modify), because OpenCvSharp didn't support OpenCV 3.3 yet, so we will using python to do it.
這篇文章我們將照著這篇dnn範例來測試(有做一點修改),因為OpenCvSharp還沒支援OpenCV 3.3,所以我們將使用python來做這測試。

2017年10月3日 星期二

[C#] OpenCvSharp Detect Object in Video | OpenCvSharp 在影片中偵測物體

Last time we can detect object in image , now we can using same way to detect object in video , all we need just change the data source then do a little change.
上次我們做到了從圖片中偵測物體,現在我們可以用同個方式來從影片中偵測物體,只要改變資料來源跟做一點小修改。

2017年10月2日 星期一

2017 台灣網路銀行速度評比

cobank.tcb-bank.com.tw
日前因為工作需要開了合作金庫的帳戶,開戶過程蠻有問題的就算了,沒想到回家後使用網銀也讓我怨聲載道,從來沒看過有一家銀行的網銀可以慢到timeout的,於是我就想來看看到底合庫的網銀是不是最爛的,這篇文章因此而生。

首先參考wiki上的台灣銀行列表,將其中所列的37間商業銀行,一間間的找到其個人網銀的首頁或登入頁,然後丟到Pingdom Website Speed Test去測試速度,測試來源一律選San Jose, California, USA,在一番苦功之後,終於把每間銀行都搞定,底下就是我整理後的結果。

2017年9月28日 星期四

[C#] OpenCvSharp Detect Object in Image by Contour | OpenCvSharp 使用輪廓偵測圖片中的物體

snip_20170928110929

This time I will try to detect objects from image by OpenCvSharp, let me introduce the flow first.
這次我要用OpenCvSharp嘗試偵測圖片中的物體,讓我先介紹流程。

  1. Load image (I load image as gray scale here). | 讀取圖片(我直接讀成灰階)
  2. Blur the image (I choose Gaussian Blur). | 模糊化圖片(我用高斯模糊)
  3. Get edge (use canny) | 取得邊緣(使用Canny)
  4. Find the Contour. | 找出輪廓
  5. Get right contour and draw on image. | 取得正確的輪廓並畫到圖片上上

2017年9月19日 星期二

[C#] OpenCvSharp Draw Histogram | OpenCvSharp 畫直方圖

最近我使用OpenCv做研究,發現C#在這領域蠻缺乏資源的,在找怎麼畫出直方圖時花了一些時間,所以現在來分享一下結果。
Recently I was using OpenCV to do research, found C# in this field was quite lack of resources, looking for how to draw the histogram took me some time, so now to share the results.

首先,使用nuget安裝OpenCvSharp,目前C#比較好用的OpenCv Wrapper。
First, use nuget to install OpenCvSharp, the current better OpenCv Wrapper for C#.

HistExample1


然後參考下列程式碼
Then refer to the following code

2017年9月7日 星期四

Merge DLL into EXE on WPF via LibZ | 使用LibZ在WPF上將DLL合併至EXE內

In winform, you can use ILMerge merge DLLs into EXE, but it can't work on WPF, so we need find another way to do it. Lot of people recommend this post "Combining multiple assemblies into a single EXE for a WPF application", but it didn't work on me, luckily I found another way to do it.
在winform上,你可以用ILMerge合併DLLs到EXE裡,但是在WPF上沒辦法辦到,所以我們需要找另外的方法來達成。很多人推薦這篇" Combining multiple assemblies into a single EXE for a WPF application "的方式,但是在我的情況不適用,還好我找到另外的方式。


Using LibZ, we can use commend line doing merge like using ILMerge, you can even use LibZ as library to control it in code for advanced use. For me, Libz can merge DLLs into EXE on WPF, it saved my day.
使用LibZ,我們可以跟ILMerge一樣用指令列來做合併,在進階的狀況,甚至可以在程式內呼叫LibZ library來使用他。對我來說,LibZ可以在WPF上將DLLs合併至EXE內,這省了我很多時間。


LibZ github nuget


To use LibZ is easy, the fast way for me is use NuGet Package Manager Console (in Visual Studio -> Tools -> NuGet Package Manager -> Package Manager Console)
使用LibZ很簡單,最快的方式就是使用NuGet Package Manager Console (在Visual Studio中-> Tools -> NuGet Package Manager -> Package Manager Console)


Open NuGet Package Manager Console, type in following commend to install
開啟NuGet Package Manager Console,輸入下列指令安裝
PM>Install-Package LibZ.Tool -Version 1.2.0
libz1


After LibZ.Tool package installed, goto the dictionary that having you want to merge's file, using following commend to merge DLLs into EXE.
LibZ.Tool安裝完後,到有你要合併的檔案之目錄,使用下列指令來將DLLs合併至EXE.

PM>libz inject-dll --assembly .\YOUREXE.exe --include .\YOURDLL.dll
libz2


Then it's done.
然後就完成啦。


You can read LibZ document to get more help.
你可以閱讀LibZ的文件來取得更多幫助。

2017年7月27日 星期四

冥頑不靈的舊時代思維

最近這幾天,北市府與Youtuber合作宣傳世大運上了好幾個新聞,像是這個 宣傳世大運 柯P聯手網紅拍片,其實這也不是創舉,政府單位在之前就已經有找國內外youtuber合作的記錄了。而跟網路紅人、Youtuber業配是一個很聰明又實惠的作法,只要找對人,其穿透力、到達率絕對比花大錢買電視、報紙廣告來的有效,看了一下這次合作背後的推手是貝殼放大的創辦人,想想也就不意外了,若是舊時代的思維肯定會覺得這些都是邪魔歪道....沒想到在FB上還真的看到這種人。

前柯辦發言人,前悠遊卡公司董事長特助 - 林筱淇在7/26時發了一篇文評論了與Youtuber合作這件事,在貼文章內容之前,先來說說舊時代思維有哪些特點:
  1. 接受不了新觀念、新事物。
  2. 看不慣的東西都是沒用的垃圾。
  3. 覺得用老招就可以吃遍天下。
讓我們看看舊時代思維是怎麼呈現的。
Joke4

2017年4月25日 星期二

[C#] Roman numerals converter - 羅馬數字轉換

Two little function can translate Roman Numerals(String) to Number(Int) and trans back.
兩個小function可以將羅馬數字(字串)轉成數字(整數)再轉回

//1990=>MCMXC
public static string IntToRoman(int num)
{
 String[] m = { "", "M", "MM", "MMM" };
 String[] c = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
 String[] x = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
 String[] i = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
 return m[num / 1000] + c[(num % 1000) / 100] + x[(num % 100) / 10] + i[num % 10];
}

//MCMXC=>1990
public static int RomanToInt(string s)
{
 Dictionary d1 = new Dictionary { { 'I', 1 }, { 'V', 5 }, { 'X', 10 }, { 'L', 50 }, { 'C', 100 }, { 'D', 500 }, { 'M', 1000 } };
 Dictionary d2 = new Dictionary { { "IV", 4 }, { "IX", 9 }, { "XL", 40 }, { "XC", 90 }, { "CD", 400 }, { "CM", 900 } };
 int num = 0;
 foreach (var d in d2)
 {
  if (s.Contains(d.Key))
  {
   num += d.Value;
   s = s.Replace(d.Key, "");
  }
 }
 foreach (var d in d1)
 {
  var c = s.Count(x => x == d.Key);
  if (c > 0)
  {
   num += d.Value * c;
  }
 }
 return num;
}

2017年4月24日 星期一

空襲來時要躲哪 ?

今天北韓開戰的機會不小,前幾天北韓太陽節搞得大家人心惶惶,雖然最終以北韓飛彈試射失敗告終,但還是讓東亞國家都緊張了一個周末,戰爭的陰霾也還未散去。雖然北韓開戰影響台灣的機會很小,但天底下不怕一萬只怕萬一,就算北韓影響不到台灣,還有幾千顆飛彈對著台灣啊。

說到空襲,在和平了許久的台灣,最多人聯想到的應該是伍佰的【空襲警報】,至於防空演習,這年代除了參與演習的單位,其他人只會覺得一小時不能上街有點麻煩吧。但是你有想過,若今天空襲警報響了,幾分鐘後你查了一下,發現這不是演習,這時候你要躲到哪裡去嗎 ?

電影中打仗有戰壕躲,伍佰【空襲警報】裡說種田的都躲樹下,學生時代遇到空襲演練,老師說要躲在課桌底下,而現在呢 ? 老實說我還真的不曉得台灣有甚麼規定要怎麼躲,按照我的知識,遇到空襲若在市區,應該要就近找堅固的建築物做掩蔽,祈禱炸彈別炸到頭上把你埋了,但這只是我的想法,理論上台灣辦過那麼多場萬安演習,應該會有清楚的指示才對.....