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


2018年6月26日 星期二

Invalid MIT-MAGIC-COOKIE-1 ??



python3 tkui.py 直接執行可以..但是無法在開機時自動執行, 原因是執行X Window應用程式(X X Client),若要能連接到X Server 時, X Client 必須要提供兩個設置


  1. 設置遠端 XServer  DISPLAY 環境變數。
    export DISPLAY=:0.0
  2. 能讀到 Xauthority下的cookie檔 ( 位在每個user 的HOME目錄的.Xauthority 目錄)
    export XAUTHORITY=/home/<YOUR-USER-NAME>/.Xauthority


通常用自己登入帳號去執行X Client 程式沒有問題, 但若不是或經由 sudo 去執行,則必須設定  Xauthority的位置.


用pi 帳戶, 執行 python3 tkui.py 沒有問, 但是用 sudo python3 tkui.py 會出現錯誤

例如:

pi@raspberrypi:~ $ sudo python3 tkui.py
Invalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 keyTraceback (most recent call last):
  File "tkui.py", line 16, in <module>
    win=Tk.Tk()
  File "/usr/lib/python3.5/tkinter/__init__.py", line 1880, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display ":0.0"



解決方式: 

pi@raspberrypi:~ $ export XAUTHORITY=/home/pi/.Xauthority
pi@raspberrypi:~ $ sudo python3 tkui.py   ==> 能正常執行,因為能找到Xauthority 檔案



References:

https://iwf1.com/quick-fix-invalid-mit-magic-cookie-1-sudo

2018年6月24日 星期日

使用pyserial讀取Serial資料










Trouble Shooting


 pip3 install pyserial

Traceback (most recent call last):
  File "serial.py", line 1, in <module>
    import serial
  File "/home/pi/serial.py", line 3, in <module>
    port = serial.Serial("/dev/ttyUSB0", baudrate=9600, timeout=3.0)
AttributeError: module 'serial' has no attribute 'Serial'

解法:  pip3 uninstall serial

>>> import serial
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: bad magic number in 'serial': b'\x03\xf3\r\n'

解法:  find . -name \*.pyc -delete




https://goo.gl/EcCcj7

2018年6月11日 星期一

[Raspberry Pi] 開機後LCD螢幕不要變黑





How to disable monitor power saving option in Raspberry PI?

最簡單方式就是裝xscreensaver的應用程式, 然後不要啓動 Screen Saver

sudo apt-get install xscreensaver
 then on the main preferences page set MODE: Disable Screen Saver







https://goo.gl/EcCcj7

2018年6月7日 星期四

[Raspberry pi] Python GUI Tkinter



如何執行?
export DISPLAY=:0.0
python3 tkui.py













----------------------------------------------

Create GUI with TKInter over SSH

這一行, 就可以用SSH開發GUI程式, 讓視窗畫面出現在LCD上


export DISPLAY=:0.0

----------------------------------------------

RPi 4"Inch 480x320 LCD (SPI 界面)

[Raspberry Pi] Give root password for maintenance ..



若Raspberry Pi 出現一直出現 "
Give root password for maintenance (or type Control-D continue .." 而無法直接進入Desktop視面系統怎麼辦?

把SDcard 拿到別台Linux機器, 當然也可以是另外一台Pi, 做以下動作, 就可以做檔案系統修復


sudo fdisk -l

sudo fsck /dev/sda2 -y





https://goo.gl/EcCcj7


2018年6月4日 星期一

HTML5-WebRTC



WebRTC is an open source project to enable realtime communication of audio, video and data in Web and native apps.

WebRTC網路即時通信Web Real Time Communication)的縮寫,它主要用來讓瀏覽器即時獲取和交換視頻、音訊和資料。
WebRTC共分三個API
·         MediaStreamgetUserMedia
·         RTCPeerConnection
·         RTCDataChannel

getUserMedia主要用於獲取視頻和音訊資訊,後兩個API用於覽器之間的資料交換。
https://webrtc.github.io/samples/src/content/getusermedia/gum/

Demo:



Display the video stream from getUserMedia() in a video element.
The MediaStream object stream passed to the getUserMedia() callback is in global scope, so you can inspect it from the console.


2018年5月28日 星期一

只要三分鐘!立即搞懂什麼是APCS程式檢測


107年APSC大學程式先修檢測重要時程

(一)APCS報名資格及方式:

資格:全國高級中等學校之學生皆可報名參加
方式:採個別報名,沒有提供團體報名 。

(二)APCS檢測費用:免費


(三)APCS報名時程:

 6月10日場次(實作題&觀念題)—自 4月23日(一) 10:00 至 5月18日(五) 09:00 止(延長至13:00)
10月27日場次(實作題)—自 9月10日(一) 10:00 至 9月30日(日) 23:59 止

(四)APCS檢測科目:

6月10日(日)場次:實作題&觀念題
10月27日(六)場次:實觀念題

(五)APCS成績查詢:

6月10日(日)場次:ˊ於6月28日(四)上午10點開放查詢
10月27日(六)場次:暫定於11月開放查詢

107年APSC大學程式先修檢測科目及級分說明

(一)APCS檢測科目及檢測時間:

檢測包含兩科目:「程式設計觀念」及「程式設計實作」,兩科均以中文命題,採線上方式進行測驗。

科目一_程式設計觀念(主要以 C 語言 subset 命題):
單選題25題,測驗時間75分鐘,以運算思維、問題解決與程式設計觀念測試為主。
(觀看歷屆試題解析)


科目二程式設計實作:
4題,測驗時間150分鐘,以撰寫完整程式或副程式為主。
(觀看歷屆試題解析)

(二)APCS檢測科目級分說明:

級別
程式設計觀念題
程式設計實作題
分數範圍
分數範圍
說明
90-100
350-400
能在時間內正確撰寫34個程式,程式設計實作表現極優異
70-89
250-349
能在時間內正確撰寫23個程式,程式設計實作表現優異
50-69
150-249
能在時間內正確撰寫12個程式,程式設計實作表現佳
30-49
50-149
能在時間內正確撰寫約1個程式,具基礎程式設計實作能力
0-29
0-49
尚未能在時間內正確撰寫任1個程式

APCS暑期程式程式營,快速讓你掌握高分技巧!!!



大學資訊科系早已優先錄取程式表現優秀的學生。這樣的趨勢下,不會寫程式,升學註定輸人一大截!(你還以為到大學再學程式就好嗎?) 。因此,與其在10/27 APCS檢定過後,後悔沒早一點開始;不如現在開始準備,全力衝刺,成為APCS的贏家!

招生對象:

欲報名107年APCS檢測之考生,或對APCS課程及程式語言有興趣之考生。

報名時間:

即日起至6/30日止,年度僅此一梯,名額有限,預報從速!!!

營隊資訊:

點我立刻考取APCS檢定高分

專家教你快速獲得APCS亮眼成績 

根據<教育部扎根高中職資訊科學教育計畫>APCS檢測結果,程式設計實作題共4題,只要能寫一題以上就排到前11%,這代表會"看"程式的人多,能實際寫code的人少。因此,艾鍗邀業界工程師,用軟體工程師角度重新教你認識程式、理解程式,在150分鐘內思考問題、解決問題,完成程式。
點我快速獲得APCS亮眼成績

獨家APCS大學程式先修檢測歷屆試題解析

選擇題高分只能說是會""程式,但並不代表會""程式。所以實作題才是APCS真的挑戰。試著閱讀下列106年APCS程式設計實作題,在沒有人解釋題目與對題目進行解構前,是否已掌握到要解什麼問題嗎?你想到解法了嗎? 
點我觀看APCS歷屆考題解析


如對本次營隊有相關問題,點我洽詢,有專人為您解答


2018年5月3日 星期四

APCS大學程式設計先修檢測_歷屆試題解答


APCS大學程式設計先修檢測
歷屆試題解析

會看程式不代表會寫程式

根據<教育部扎根高中職資訊科學教育計畫>105年3月APCS檢測結果,程式設計實作題共4題,只要能寫一題以上就排到前11%,這代表會"看"程式的人多,能實際寫code的人少。因此,艾鍗特邀業界工程師Joseph,用軟體工程師角度重新教你認識程式、理解程式,用100分鐘內思考問題、解決問題,完成程式。

APCS實作題成績分級



選擇題高分只能說是會""程式,但並不代表會""程式。所以實作題才是APCS真的挑戰。試著閱讀下列106年APCS程式設計實作題,在沒有人解釋題目與對題目進行解構前,是否已掌握到要解什麼問題嗎?你想到解法了嗎? 


APCS歷屆試題解析

106年10月28日APCS程式設計實作題 Part 1


106年10月28日APCS程式設計實作題 Part 2


106年3月4日APCS程式設計實作題 Part 1



APCS高效解題技巧

1) 能理解題目到底要解什麼問題
2) 能在紙上推演邏輯求解或找到關係式

3) 能快速規劃出程式基本方塊(架構)

4) 能動手coding


<我想了解更多APCS檢定資訊>





2018年4月13日 星期五

Convolution 的意義


Convolution 的意義
The convolution of f and g is written fg, using an asterisk or star. It is defined as the integral of the product of the two functions after one is reversed and shifted. As such, it is a particular kind of integral transform:



Convolution3.svg


隨著不同的 t 值, 對f和g函數相乘的積分(求重疊時的面積)...


Convolution of box signal with itself2.gif


Convolution of spiky function with box2.gif




https://goo.gl/EcCcj7

2018年4月11日 星期三

高斯模糊

常態分配


# 一維的常態分配為, 為一個鐘型分佈曲線, 中間高, 兩旁低

常態分布normal distribution)又名 高斯分布(Gaussian distribution)


若隨機變數X服從一個位置參數為μ、尺度參數為σ的常態分布,記為:

X~N(μ,σ²)

μ決定中心點位 置, 而其變異數σ²的開平方或標準差σ決定了資料分散的程度。

「常態分配」的圖片搜尋結果


# 二維的常態分配為一個等高線圖是從中心開始呈常態分布的同心圓中間點最高而離中間點愈遠值愈低


高斯模糊

高斯模糊的原理它是一種資料平滑技術(data smoothing),它用常態分布計算圖像中每個像素的變換。適用於多個場合,影像處理恰好提供了一個直觀的應用實例。

糊方法就是讓圖像中的每一個Pixel的值, 變成取其"周圍點"的平均值。若周圍的範圍愈大,則會模糊的程度會愈強。在數值上,這是一種"平滑化"。而在圖形上,就相當於產生"模糊"效果,使原始Pixel失去細節。


如果使用簡單平均,顯然不是很合理,因為圖像都是連續的,越靠近的點關係越密切,越遠離的點關係越疏遠。因此,採用加權平均更合理,距離越近的點權重越大,距離越遠的點權重越小。那分配權重的方式是什麼? 可以採用"常態分配"來配置權重。愈近的pixel 權重愈高,愈遠的pixel 權重愈低。

高斯矩陣

這是一個計算σ = 0.84089642的高斯分布生成的範例矩陣。注意中心元素 (4,4)處有最大值,權重隨著距離中心越遠數值對稱地減小。
0.000000670.000022920.000191170.000387710.000191170.000022920.00000067
0.000022920.000786330.006559650.013303730.006559650.000786330.00002292
0.000191170.006559650.054721570.110981640.054721570.006559650.00019117
0.000387710.013303730.110981640.225083520.110981640.013303730.00038771
0.000191170.006559650.054721570.110981640.054721570.006559650.00019117
0.000022920.000786330.006559650.013303730.006559650.000786330.00002292
0.000000670.000022920.000191170.000387710.000191170.000022920.00000067
注意中心處的0.22508352比3σ外的0.00019117大1177倍。

上述矩陣總和為1,即代表各權重位置的佔比。將原始影像中每一個pixel 乘上此高斯矩陣並加總,即為新的pixel值。

如果是彩色的, 則RGB 3個channel 都做同樣的高斯模糊動作



圖1:原始圖像 圖2:經過高斯模糊處理的圖像







https://goo.gl/EcCcj7

2018年3月16日 星期五

機器學習(Machine Learning)與深度學習(Deep Learning)



什麼是機器學習(Machine Learning)?


機器學習是人工智慧的其中一個分支,簡單來說它就是讓機器可以像人一樣,可藉由閱讀大量的資料建立規則而具有知識,而機器學習就是透過演算法來分析數據、從中學習來判斷或預測現實世界裡的某些事(專家其實是訓練有素的狗,機器學習大概就是這個味道) 。閱讀已知的大量資料就是所謂訓練的過程,透過足夠多的Training Data 建立出一個 Model (最佳函式), 這個Model 就是"機器的知識",之後你可以餵未知的資料給機器,機器就能進行預測或判斷 。機器學習並非手動事先用程式撰寫好指令規則來判斷,而是使用大量的數據和演算法來「訓練」機器,自動產生規則自動判斷或預測。

什麼是類神經網路?

類神經網路是機器學習領域中的一種方法,它企圖用模擬人類大腦中的神經網路(Neural Network)的運作方式來建構機器學習的Model。例如,眼睛看到車快撞上來了,人的反應會立刻跳開,這中間可能經過大腦無數個神經元的運算及傳導,至今人類可能都還搞不清楚大腦怎麼辦到的,因為中間過程太複雜,但從頭尾結果來看卻很簡單, 就是看到車要撞到了,人會閃。Neural Network 概念,其實正是如此,一堆資料X 而每筆資料有多個特徵值(x1,x2,x3,x4),NN中每一層的權重W就可以決定出最終的 Y (y1,y2,y3)。若中間可能有很多層,很多層就叫做 MLP(Multi-Layer Perceptron)。當層級愈多網路就愈大, 所需的參數W就要愈多,因此計算Gradient 就要花更多的時間。



什麼是深度學習(Deep Learning)?

它其實就是很深的Neural Network (Deep Neural Network DNN), 就是中間Hidden Layer 有很多層級。AlexNet 達到8層級, ResNet已達到100多個層級。每建構一個Hidden Layer就代表建立同款式但有著不同花樣的過濾器(Filter)/篩子,以篩出不同的特徵。愈多的Hidden Layer 就代表用了更多款式的篩子。經過Back Propagation 計算後,求得每一個款式下不同花樣的權重W。而愈重要的篩子權重愈高,愈不重要的篩子權重就會愈低。 這些W權重較大的篩子,代表用這些篩子可以篩出 X-->Y的重要成份,也就是"特徵"。這也就是深度學習最強的地方--自動特徵擷取,而不是由人來先定義好特徵。

如何建構深度學習中的網路模型則是Deep Learning 的核心技術。 針對影像處裡的 CNN卷積神經網路(Convolution Neuron Networks) , 網路中加入Convolution及pooling 層以抽取特徵,而將能將圖片進行分類預測。RNN (Recurrent Neural Networks)主要用於文字語意處理,可以用來判斷前後文而使機器能理解一句話的意思。

機器學習或深度學習的技術可以應用在哪?

機器學習的演算法已廣泛應用於資料探勘、電腦視覺、自然語言處理、語音和手寫識別、生物特徵識別、DNA序列測、搜尋引擎、醫學診斷、金融數據分析與證券市場分析等方面。所以幾乎各行各業,包含金融業、零售業、製造業、醫療產業等,都會用到機器學習的技術。而以深度學習作為機器學習的方法,則多用在電腦視覺(Computer Vision)、ASR語音識別 (Automatic Speech Recognition)、NLP(自然語言處理),這種比較沒有因果關係或者連人類都很難解釋的邏輯推理。



===================================
深度學習的Hello World:  "MNIST" 手寫數字辨識

簡單說明Artifical Neural Network 基本流程, 當然也可以Deep Learning 的CNN (Constitutional Neural Network )實作它, 你就對CNN有更進一步的認識


step: training data 將每一個手寫數字轉成pixel vector, 作為input X , 每個pixel 作為feature 




建立Network Model (網路參數.....)


以手寫數字"6" 示意在input layer 的態度


 訓練好Model 後, 對testing data 進行predict, 能將手寫的0~9數字Label出對應的 0~9. 然後比較正確率(Accuracy) 
當正確率不足, 如何修改網路參數以提高正確率...正是學問之所在? 在kaggle 上目前有6萬多筆的手寫數字, 其正確率是100%......

https://goo.gl/EcCcj7