2018年12月24日 星期一

2018年12月14日 星期五

CUDA driver version is insufficient for CUDA runtime version



問題1: 程式只要 import keras 就會掛掉!!

解法==> conda update keras
                conda update tensorflow


問題2: UDA driver version is insufficient for CUDA runtime version

\Anaconda3\lib\site-packages\tensorflow\python\client\session.py in __init__(self, target, graph, config)
    674     try:
    675       # pylint: disable=protected-access
--> 676       self._session = tf_session.TF_NewSessionRef(self._graph._c_graph, opts)
    677       # pylint: enable=protected-access
    678     finally:

InternalError: cudaGetDevice() failed. Status: CUDA driver version is insufficient for CUDA runtime version



解法==> 就是要讓 cuda driver和 cudnn 匹配. 若是在Anaconda , 因為Anaconda 會去做軟體版本匹配的整合, 所以最簡單的作法就是直接執行  conda update --all


若tensorflow 要使用底層GPU架構,要安裝對應的軟體.

Keras --> Tensorflow --> cuDNN --> CUDA Driver  --> GPU graphic card


cuDNN [1]: The NVIDIA CUDA® Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tuned implementations for standard routines such as forward and backward convolution, pooling, normalization, and activation layers. cuDNN is part of the NVIDIA Deep Learning SDK.

CUDA Driver : Driver for NVIDIA graphic card


References:

2018年11月18日 星期日

異常檢測技術

Abnormally detection , Outlier detection and novelty detection 


異常檢測技術用於各種領域,如入侵檢測欺詐檢測、故障檢測、系統健康監測、傳感器網路事件檢測和生態系統干擾檢測等。它通常用於在預處理中刪除從資料集的異常資料。在監督式學習中,去除異常資料的資料集往往會在統計上顯著提升準確性。

入侵檢測而言, 很難檢查駭客入侵的方法

Multi-classification 多分類
Binary-classification 分兩類  ==> 是或不是  
One-Classification ==> 單分類 檢查異常質Outlier  (正常很多, 但異常很少, 而且也難不好界定所有或描述的異常種類) ==> Unbalanced DataSet

mean: 容許圈圈中有多少比例的異常質被誤檢中


RBF: fit的程度

2018年11月7日 星期三

[C語言]安裝MinGW - Minimalist GNU for Windows


對於不熟悉Linux,又想要用GNU gcc 編譯你的 C code或g++編譯你的C++ code, 你可以在windows上安裝minGW 使得你的windows也有最小的GNU程式開發工具.


MinGW - Minimalist GNU for Windows

 1.)下載  MinGW 並在windows下進行安裝

MinGW: A native Windows port of the GNU Compiler Collection (GCC), with freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All of MinGW's software will execute on the 64bit Windows platforms.
mingw32-base 選項,按右鍵 Mark for Installation



接著在選單[Installation]上選Apply Changes,就會進行線安裝






2.) 

2-1
  使用Code::Blocks IDE作為來編譯程式     <--建議: 新手使用視窗界面

 

2018年11月3日 星期六

[Linux 程式設計] IPC--Message Queue


Linux 程式設計課堂CH8裡的msg1.c跟msg2.c都會出現如下問題
請問一下為什麼msgget會產生失敗??







fprintf(stderr, "msgget failed with error: %d\n", errno);  

errno: 88 是 #define ENOTSOCK 88 /* Socket operation on non-socket */

這錯誤是核心無法建立Message Queue



解決方式:  讓核心支援Message Queue

cd ~/linux-rpi-4.4.y ;  make menuconfig


 ( toolcahin 路徑要設定好且要有 ncurse.h 才行!)     sudo apt-get install libncurses5-dev

[General Setup] --> [POSIX Message Queues] 編進核心內 [*] 或編成核心模組 [M]









更多核心編譯及模組使用, 可參考 嵌入式Linux設計開發 


按講師提供的Linux程式範例, 執行的正常畫面像是這樣, 






2018年10月25日 星期四

安裝jupyter notebook 於Raspberry Pi







1.) 安裝 jupyter notebook 

sudo pip3 install jupyter   

(約等個15分鐘吧..耐心等候)

2.) 讓 jupyter-notebook Server 可從windows連入

==> jupyter notebook --generate-config

#修改 ~/.jupyter/jupyter_notebook_config.py 找到
#c.NotebookApp.ip = ‘localhost'

改成

c.NotebookApp.ip = '0.0.0.0’ 





# 設定瀏覽器登入 jupyter notebook server密碼

==> jupyter notebook password

3.)啓動jupyter-notebook 


sudo jupyter-notebook

如果是root ,則要多加 --allow-root 才能啓動    sudo jupyter-notebook --allow-root     





4.) 在windows上,打開瀏覽器連入

http://192.168.1.252:8888/


Note: 192.168.1.252 為 Pi的Ethernet IP, 也可以用Wi-Fi 的IP連入, 只要那個IP是Windows能連到的即可 (同一個router所配的IP都OK!)

如何查Pi的IP?  請執行ifconfig  ==> 查看Pi網路IP 

(更多Pi 的基礎操作, 請看課程學習 )




 成功登入 jupyter notebook畫面~



 看一下 jupyter notebook kernel 使用的python 版本






2018年10月24日 星期三

工程師不可不知的影像辨識 3 階段



AI 時代中,「#影像辨」是其中一項熱門的應用,在許多產業都可以見到「影像辨」的蹤跡。若你擁有「影像辨」的技術,意味著你所擁抱的機會更大。然而這項技術實際上有許多眉眉角角」影響著專案的成果,如何讓你的「影像辨識」專案的準確率更高呢?更符合你設定的目標呢?

首先在第1個階段,從低階的處理技術進行 #影像預處 (image preprocessing)。由於你所取得的影像資訊可能有尺寸大小不一、雜訊(noise)、對比度差異等問題,而為了增加後續作業的準確率,依據你所取得的影像狀況,你可以用 #OpenCV 這項工具進行 #影像預處理 的工作,像是 #對比度增 #去雜 #尺寸重 等。

接著在第2階段,運用 #OpenCV 進行像是 #影像閾值#形態學轉#Canny邊緣檢#Harris角點檢 等演算法來擷取 #影像特,方便後續的影像處理作業,像是 ##Segmentation) #(#Classifiacation)等。

然後在第3個階段,運用 #Tensorflow#Keras  #AI 工具建立 #深度學#DeepLearning)模型,讓演算法去 #擷取影像特 進行模型訓練,依據結果,在流程中的相應環節進行調整,讓機器實現「#」的目的。

如果你對影像辨識有濃厚的興趣,並且希望學習不是只有聽聽就忘了,而是能真正從影像處理、影像偵測,一直到影像辨識/感知 完整學會與產業接軌的技術,歡迎加入艾鍗的學習行列。

小班制教學 : 與老師一對一的互動,可以讓你的問題可以得到快速解答。
主題式實作演練 : 循序漸進的主題式引導搭配學員上機演練,讓你自然而然地學會關鍵技術,牢牢記住。
完整範例程式碼 : 程式碼均由老師debug(除錯)過,並附詳細解說加上秘技,讓你複習有依據,學習高成效,不會再因為卡關而放棄成就自己的機會。
產業工程師親授 : 學到書本上沒有的知識,賺到老師實務開發的經驗。而且有老師帶著學,學得更快。

別在把人生白白蹉跎掉,你值得更好的未來!
立即預約專業諮詢,請撥(02)2316-7736
=============================
<AI
影像系列課程>
💡AI深度學習與影像辨識 http://bit.ly/2NRDM5a
💡機器人AI視覺整合實務 http://bit.ly/2PMpYFU
💡影像辨識與邊緣運算實戰
 http://bit.ly/2PRvvuK



2018年9月27日 星期四

ROS Rviz




RVizThe ROS Visualization Tool: 機器人作業系統 3D 視覺化工具。 它的作用就是:一個虛擬世界,用來模擬機器運行效果。簡單的說它就是 ROS 的一個模擬器軟體。一個顯示機器人實體的工具。 





[在Ubuntu 下執行]
roscore

export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_bringup turtlebot3_model.launch



#須事先安裝 turtlebot3 package
cd ~/catkin_ws/src/
git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
cd ~/catkin_ws && catkin_make




2018年8月28日 星期二

影像型能學運算 (Morphological Operations)



影像型能學運算 (Morphological Operations):

形態學主要用於二值化後的影像,根據使用者的目的,用來凸顯影像的形狀特徵,像邊界和連通區域等,同時像細化、像素化、修剪毛刺等技術也常用於圖像的預處理和後處理,
In short: A set of operations that process images based on shapes. Morphological operations apply a structuring element to an input image and generate an output image.

The most basic morphological operations are two: Erosion and Dilation. They have a wide array of uses, i.e. :


  1. Removing noise
  2. Isolation of individual elements and joining disparate elements in an image.
  3. Finding of intensity bumps or holes in an image



膨脹(Dilation)==> 白色區域影像變胖

Left image: original image inverted, right image: resulting dilatation




侵蝕(Erosion)  ==>  白色區域影像變瘦

Left image: original image inverted, right image: resulting erosion




斷開(Opening):  Erosion再Dilation 可以將硬幣分離





References:

  1. https://slidesplayer.com/slide/11398438/
  2. http://monkeycoding.com/?p=577
  3. http://blog.christianperone.com/2014/06/simple-and-effective-coin-segmentation-using-python-and-opencv/

2018年8月26日 星期日

HAAR Face Detection


Face Detection using Haar Cascades

利用 HAAR 分類器(包含不同的偵測dataSet), 用一個windw size 下, 不同Feature都有得到不同的分數.  再用不同window size, 再去掃,


整個演算法跑完之後, 顯示的這些不同矩形框,就是那些"疑似有人臉"出現的地方..








上課範例:

Haar-cascade Detection in OpenCV




2018年8月18日 星期六

18650電池




單顆充電電池(鎳氫電池)充飽電大概是1.2V
單顆18650電池(鋰電池)充飽電大概是4.2V (電壓掉到3.4~3.6v以下就要充電了)



18650 battery Size: 18mm x 65mm
18650電池的單顆電壓為3.7V,容量約為1000mAH左右 (以1000mA電流輸出能力持續1小時)


※電池電力尚未用至最低之前就充電,電池壽命將更長。
※將電池使用至低電量或完全沒電才進行充電,會造成新式鋰電池無法充電。
※電池金屬面積較小的一端為正極(+),較大的一端為負極(-)。


C是指 C 倍的放電效率




1C指的是在1小時內,可以把電池內全部的容量充飽或放光,而0.2C則因電流比較小,所以充電/放電的時間就是1/0.2 = 5小時了,換句話說2C的充/放電時間就是1/2 = 0.5小時了模型店使用的電池,由於需要大電流放電才能驅動馬達,所以幾C就很重要了,一般標稱8C,10C等,就是說電池有大電流放電的能力,基本上數值越大越好


2200mah 7.4V 3C
1300mah 7.4V 10C
第一組電池代表他放電電流是 2.2ax3=6.6a 的電流
第二組是 1.3ax10= 13a 的電流
容量來說,第一組比較大。可以用比較久 但是第二組可以放第一組二倍的電流





2018年8月11日 星期六

VS2017 設定Tesseract-OCR的編譯環境





Tesseract是一個光學字元識別引擎,支援多種作業系統。

[Include 目錄] (增加一項)


[程式庫目錄] 


[其他相依性] 


[C/C++ 前置處理器] 前置處理器定義






設定完成後, 執行上課範例, 可以看見原始影像為TAW-8686.jpg 然後看看Tesseract識別引擎的效果. 理論上"乾淨"的圖識別的效果應該100%正確!




但實際上取得的車牌影像不會如此乾淨, 車牌會有污點、影像對比度可能也不足(光線影響)、拍攝角度不對以及有其他的文字、符號等等., 都得再經過影像處理的手法重新把影像"惡搞"後,才能丟入OCR去做後續的文字分析識別


台灣的車牌


影像經過二值化處理,將原始影影像轉換成"黑白"影像, 至於Threshold value 怎麼選, 這就是學問所在啦~


若想要用自己的識別引擎去分析文字或一些特定的符號,也可以自己去訓練。訓練的方法可以用現在很夯的AI方法如Deep Learning  CNN來訓練模型,像是 MINST 手寫數字辨識 這種資料集(Data Set) 模型可以讓你識別出0~9的手寫數字。

不過在做真正的影像識別的應用,通常得經過一些影像處理的技巧, 例如進行二值化 (Thresholding)、閾值分析、影像去雜訊、影像模糊、影像強化、影像縮放、色彩空間轉換及影像切割等,才餵進到識別引擎,以獲得較高的辡別率。因此,對影像進行預處理,總是避免不了~



異質計算機結構



異質計算機結構? 
指的是用和CPU不同的計算裝置,例如使用顯示卡做計算的GPGPU運算, 目前常看的的API有CUDA、OpenCL等。

CUDA only for nVidia

OpenCL is a generic graphic computing , it can be used for AMD GPU, nVidia,...


From Wiki:

https://zh.wikipedia.org/wiki/OpenCL

OpenCLOpen Computing Language,開放計算語言)是一個為異構平台編寫程式的框架,此異構平台可由CPUGPUDSPFPGA或其他類型的處理器與硬體加速器所組成。OpenCL由一門用於編寫kernels(在OpenCL裝置上執行的函式)的語言(基於C99)和一組用於定義並控制平台的API組成。OpenCL提供了基於任務分割和資料分割的平行計算機制。

http://www.ittraining.com.tw/ittraining/index.php/course/hardware/fpga