--- tags: 實習日記 --- # 實習日記11/7~11/11 [TOC] ## 進度 1. 確認車牌正確率 ![](https://i.imgur.com/H24TuYa.png) 2. 研究OCR 3. 研究類神經網路 4. Learn How to Preprocess Images for Text OCR in Python 5. 玩一下ocrmypdf 6. 參考資料: - https://b98606021.medium.com/%E5%AF%A6%E7%94%A8%E5%BF%83%E5%BE%97-tesseract-ocr-eef4fcd425f0 - https://aws.amazon.com/tw/what-is/ocr/ - https://www.youtube.com/watch?v=tQGgGY8mTP0&list=PL2VXyKi-KpYuTAZz__9KVl1jQz74bDG7i ## 類神經網路筆記 - 模擬大腦神經細胞的運作方式 - 由一些高度連結的處理單元(稱做節點或是神經元,neuron )組成一動態的運算系統。 - 透過不斷地自我調整 - 使得輸入的資訊在經過神經元的運算之後能得到預設的輸出結果。 - 具有部分容錯的功能 ![](https://i.imgur.com/AI2k2TA.png) - Sigmoid Function(激活函數):為避免輸出訊號過強造成神經 元的傷害,類神經網路選取兼具正向收斂與負向 收斂(把數值收斂至0~1之間)的S型函數 ![](https://i.imgur.com/vQ9YFDz.png) ⇨ 當輸入變數趨近於正無限大時,則輸出值會趨近 於1,當輸入變數趨近於負無限大時,輸出值會趨 近於0。 - 類神經網路架構與學習 ![](https://i.imgur.com/OV4zVyp.png) 目前來說使用的最普遍的是倒傳遞類神經網路 <font color="#f00">(Back-propagation Network)</font> a. 輸入層(Input layer),眾多神經元(Neuron)接受大量非線形輸入 訊息。輸入的訊息稱為輸入向量。 b. 輸出層(Output layer),訊息在神經元鏈接中傳輸、分析、權衡,形 成輸出結果。輸出的訊息稱為輸出向量。 c. 隱藏層(Hidden layer),是輸入層和輸出層之間眾多神經元和鏈接組 成的各個層面。隱層可以有一層或多層。隱層的節點(神經元)數目 不定,但數目越多神經網路的非線性越顯著,從而神經網路的魯棒性 (robustness)更顯著。 - 類神經網路訓練:在學習階段中,類神經網路學習調整聯結上的權 重值以能夠正確預測輸入值組的類別標籤 - 訓練的最終目的:獲得一組權重值,使得幾乎每筆訓練資料都能被正確分類。 - 步驟: 1.預設或是以亂數值初始權重。 2.一筆一筆的將輸入每組訓練資料。 3.進行回授 (feedback) 調整權重值,使得輸出與目標值吻合。 4.反覆進行同樣步驟,直到每筆訓練樣本均可得到目標輸出值為止 。 - 倒傳遞類神經網路的學習過程 1. 計算整批樣本的輸出值與實際值的差異,我們通常使用均方和 誤差(MSE, Means Squared Error) 來表示一個學習循環的誤差程度 2. 自動調整權重大小以及學習速 率,目前最常使用的方式是最陡 坡降法(The Gradient Steepest Descent Method),就是將誤差以 可微分函數表示,透過微分斜率 的梯度來產生權重的修正量。 3. 正向傳導指的是輸入訊號從輸入層神經元進入到隱藏 層然後傳遞至輸出層,每個神經元只負責將訊號傳播至下 游的神經元,以產生最終訊號(預測結果)。 4. 反向傳導則是當輸出值(預測結果)與實際結果有落差時, 則將可以計算出單筆案例的誤差訊號。 ![](https://i.imgur.com/YhTIDPn.png) ⇨ 所謂的倒傳導,指的是要將此誤差項從輸出層反饋至隱藏 層,此時輸出層誤差項會跟據神經連結將誤差依照權重分 配至隱藏層神經元。 ![](https://i.imgur.com/2ge9EJm.png) - 隱藏層與輸出層的連結權重調整: ![](https://i.imgur.com/Gd8DNRx.png) ![](https://i.imgur.com/e5YoCuK.png) - 優點: 1. 輸出值連續,應用範圍廣 2. 學習精確度高 3. 回想速度快 - 缺點: 1. 學習速度慢 2. 有局部最小值困擾 3. 網路架構和動態的決定仍缺乏系統化的方法 ## OCR筆記 - 什麼是 OCR (光學字元辨識)? 光學字元辨識 (OCR) 是將文字影像轉換為機器可讀文字格式的程序。ex:PDF轉換、車牌轉換 - OCR 如何運作? step 1 影像採集: 掃描儀讀取文件並將其轉換為二進位資料。OCR 軟體分析掃描影像並將淺色全域分類為背景,將深色區域分類為文字。 step 2 預先處理: OCR 軟體首先會清除影像並移除錯誤以準備讀取。下面是採用的一些清除技術: - 偏移校正或傾斜掃描文件,以解決掃描期間的對齊問題。 - 去除斑點或移除任何數位影像斑點,或平滑文字影像的邊緣。 - 清除影像中的邊框和線條。 - 多語言 OCR 技術的指令碼辨識 step 3 文字辨識: OCR 軟體用於文字辨識的兩大類 OCR 演算法或軟體程序,稱為模式比對和特徵擷取。 step 4 模式比對: 模式比對的運作方式為,隔離稱為字符的字元影像,並將其與類似儲存的字符作比較。僅當存放的字符具有與輸入字符相似的字型和比例時,模式辨識才有效。此方法適用於以已知字型鍵入文件的掃描影像 step 5 特徵擷取: 特徵擷取將字符進行細分或分解為特徵,如線條、閉環、線條方向和線條交叉點。然後,使用這些特徵在其存放的各種字符中找到最相符或最近的芳鄰。 step 6 後期處理: 經過分析之後,系統會將擷取的文字資料轉換為電腦化檔案。某些 OCR 系統可以建立帶註釋的 PDF 檔案,其中包括掃描文件的前後版本。 - OC的類型 - 簡單的光學字元辨識軟體:簡單的 OCR 引擎透過將多種不同的字型和文字影像模式儲存為範本來運作。OCR 軟體使用模式比對演算法,將文字影像逐字元與其內部資料庫作比較。 - 智慧字元辨識軟體:現代 OCR 系統使用智慧字元辨識 (ICR) 技術,從而以與人類相同的方式來閱讀文字。這些系統藉助機器學習軟體,運用進階方法,訓練機器表現得像人類一樣。 - 智慧文字辨識:智慧文字辨識系統的運作方式與 ICR 相同,但處理的是整個文字影像,而不是將影像預先處理為字元 - 光學標記辨識:光學標記辨識可識別文件中的標誌、水印和其他文字符號。 ## Preprocess Images for Text OCR in Python ### 0. Opening an Image ![](https://i.imgur.com/h9CgbjA.jpg) ### 1. Inverted Images : 黑轉白,白轉黑 ![](https://i.imgur.com/IKUbyf1.jpg) ### 2. Binarization : 把圖片轉成黑白,先用灰階(讓過程更輕鬆) 灰階: ![](https://i.imgur.com/ojAdMYX.jpg) 黑白: ![](https://i.imgur.com/OSHd4aL.png) ### 3. Noise Removal : ![](https://i.imgur.com/LHFECH3.png) ### 4. Dilation and Erosion : 調整front size erode(thin): ![](https://i.imgur.com/us30qEA.png) dilate(thick): ![](https://i.imgur.com/bpfN52N.png) ### 5. Rotation / Deskewing : 旋轉前: ![](https://i.imgur.com/9DC81bb.jpg) 旋轉後: ![](https://i.imgur.com/O22gMKV.jpg) ### 6. Removing Borders : 移除前: ![](https://i.imgur.com/9llbzcA.png) 移除後: ![](https://i.imgur.com/Mfl6H6j.png) ### 7. Missing Borders : ![](https://i.imgur.com/eQK80a4.png) ## ocrmypdf 原本: ![](https://i.imgur.com/mvDpPE7.png) 經過ocrmypdf: ![](https://i.imgur.com/hhTO60c.png)