S小魚仔S 網誌搜尋

2017年5月23日 星期二

S小魚仔S Tesseract OCR 使用 jTessBoxEditor 應用篇 (二)

講述「jTessBoxEditor」這套「工具」, 延續「上一篇」(Tesseract OCR) 文章過來,「jTessBoxEditor」其實就是「調整」字庫工具,使用者 提供 來源「圖片」,「jTessBoxEditor」就會產生「對應」座標,達到「字串」解析,首先「瞭解」基礎功能。

jTessBoxEditor」可以直接進行「圖文解析」,主要是依賴「tesseract-ocr\tessdata」內「xxx.traineddata」字元庫。

進行「簡單」測試,使用「tesseract-ocr」內「tesseract」,解析「圖片」內容。

設定「來源」與「目的」位置
 tesseract "D:\Download\OCR\1.gif" "D:\Download\OCR\1.txt"

成功解析

接下來我們打開「jTessBoxEditor」介面

Tools」=>「Merge TIFF」可以進行「多張」TIFF 圖片檔,進行「合併」,如果您有許多「」檔,需要進行「字庫」識別,非常好用。

當我們將「多張」.TIFF 圖檔進行「合併」以後,就可以後續「配置」,使用「tesseract」產生對應「.box」文件

tesseract "D:\Download\OCR\3.tif"D:\Download\OCR\3" batch.nochop makebox

注意「*.tif」與「*.box」檔案名稱需「一致


開啟「jTessBoxEditor」=>「Box Editor」=>「Open」=>「*.tif

這邊就會看到「兩張」圖形,就可以進行「字庫」修改。

產生「*.tr」文件

tesseract "D:\Download\OCR\3.tif" "D:\Download\OCR\3" nobatch box.train


產生「3.tr

後續就是「字元庫 封存」及「合併 字元庫」產生「x.traineddata」並將「檔案」上傳 服務器 到相對應「位置請參考「S魚仔仔S - Centos 7 搭建 Tesseract OCR 圖文辨識系統 (一)

S小魚仔S Centos 7 搭建 Tesseract OCR 圖文辨識系統 (一)

光學字符識別(OCR,Optical Character Recognition)是指對圖片進行掃描,然後對圖像文件進行分析處理,獲取文字及版面信息的過程,Tesseract 的 OCR 引擎最先由 HP 實驗室於1985年開始研發,至1995年時已經成為OCR業內最準確的三款識別引擎之一。然而,HP不久便決定放棄OCR業務,Tesseract 也從此塵封,數年以後,Tesseract 由美國內華達州信息技術研究所獲得,並求諸於 Google 對 Tesseract 進行改進、消除 Bug、優化工作。

當進行「圖文」辨識,不夠精準,必須使用「jTessBoxEditor」工具 ( 需要安裝 JAVA 環境 ),進行「圖文」庫增加 並 放到「字庫」路徑。

~~ 開始進行實作 ~~

;使用「weget」下載「epel-release」資源庫。
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

;安裝「epel-release-latest-7*.rpm」資源庫。
sudo rpm -Uvh epel-release-latest-7*.rpm

#修改「電腦」名稱
hostnamectl set-hostname OCR

#搜尋「tesseract」套件
yum search tesseract

#安裝「tesseract.x86_64
yum install tesseract.x86_64

#安裝「tesseract-devel.x86_64」和「tesseract-osd.x86_64
yum install tesseract-devel.x86_64 tesseract-osd.x86_64

#安裝「tesseract-langpack-chi_sim.noarch」簡體字庫語言包
#安裝「tesseract-langpack-chi_tra.noarch」繁體字庫語言包
yum install tesseract-langpack-chi_sim.noarch tesseract-langpack-chi_tra.noarch

#檢查「tesseract」支持的语言
tesseract --list-langs

將「圖文」上傳「Tesseract」服務器,開始進行「圖文辨識


#  辨識「chin-tra.png圖片
#「chin-ocr-tra」當前目錄「輸出」.txt
#「chi_tra」(繁體) 為「字庫」位置
tesseract chin-tra.png chin-ocr-tra -l chi_tra

# 辨識「chin-sim.png圖片
#「chin-ocr-sim」當前目錄「輸出」.txt
#「chi_sim」(簡體) 為「字庫」位置
tesseract chin-sim.png chin-ocr-sim -l chi_sim

#辨識「english.png」圖片
#「eng-ocr」當前目錄「輸出」.txt
#「eng」(英文) 為「字庫」位置
tesseract english.png eng-ocr -l eng

#檢查「結果
cat eng-ocr.txt


發現「辨識率」不佳,這時候需要使用「jTessBoxEditor」進行「字源庫」增加,首先「瞭解」資料夾結構。

jTessBoxEditor」目錄有「jTessBoxEditor.jar」和「train.bat」都是「執行檔

 目錄「tesseract-ocr」=>「tesseract.exe」這是負責「進行」圖片解析專用,需配合「Windows Command」帶參數。

將源「圖片」使用「小畫家」另存「tif」格式 並 修改圖片「名稱」。
PS
tif」命名格式 [lang].[fontname].exp[num].tif
lang = 語言 
fontname = 字體
比如我們要訓練自定義字庫「mjorcen」字體名「normal」,那麼我們把圖片來源重命名「mjorcen.normal.exp0.jpg」在轉「.tif」。

使用「Windows Command」配合「tesseract.exe」帶參數,產生「*.box
tesseract mjorcen.normal.exp0.gif mjorcen.normal.exp0 -l eng batch.nochop makebox
PS
「*.box」和「*.tif」一定要在相同的目錄,否則打不开。

開啟「jTessBoxEditor」工具,進行「字庫」編輯


開啟「*.tif

打開「*.tif」來源 辨識 字元

修改「*.tif」完成 辨識 字元 並「儲存」( Ctrl+S)

進行「字元庫」封存
tesseract mjorcen.normal.exp0.gif mjorcen.normal.exp0 nobatch box.train

unicharset_extractor mjorcen.normal.exp0.box


封存完會產生「mjorcen.normal.exp0.tr」、「unicharset

建立「Font_Properties.txt」文字檔,去掉「附檔名

Font_Properties」內容寫入「normal 0 0 0 0 0」 表示預設「普通字體

輸入「Windows Command」指令

shapeclustering -F font_properties -U unicharset mjorcen.normal.exp0.tr

mftraining -F font_properties -U unicharset -O unicharset mjorcen.normal.exp0.tr

cntraining mjorcen.normal.exp0.tr

最後會生成五個文件,把目錄下的「unicharset」、「inttemp」、「pffmtable」、「shapetable」、「normproto」這五個文件前面都加上 「normal.

輸入「Windows Command」合併「normal.*」五個文件
combine_tessdata normal.

normal.traineddata」就是我們「完成」字庫來源,上傳到「Tesseract」服務器「/usr/share/tesseract/tessdata」位置
PS
/usr/share/tesseract/tessdata」字元庫

登入「Tesseract」服務器,使用「訓練好的」字庫進行「圖文」辨識,「normal 就是配對「normal.traineddata」字元庫


參考資料

2017年5月17日 星期三

S小魚仔S Grafana 設定 Alert E-mail (二)

編輯「vi /usr/share/grafana/conf/defaults.ini



############### SMTP / Emailing ############
PS「user」與「from_address」要一相同「E-mail」。

[smtp]
enabled = true
host = smtp.163.com:25
user = 123@163.com
# If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;"""
password = abc114
;cert_file =
;key_file =
;skip_verify = false
from_address = 123@163.com
from_name = Grafana

[emails]
;welcome_email_on_sign_up = false
templates_pattern = emails/*.html

##################

;重新啟動「Grafana」
sudo systemctl restart grafana-server

;檢查「LOG」E-mail 配置「訊息」
/var/log/grafana/grafana.log


接下來配置「Grafana Web UI


 點選「Alert List

點選「Configure Notifications

點選「New Channel

設定「E-mail」收件人

2017年4月25日 星期二

S小魚仔S Centos 6 搭建 L2TP/IPsec VPN

因為「工作」業務需求,需要搭建「L2TP/IPsec VPN」。
使用「strongswan」和「xl2tpd」兩組套件,透過「yum」進行「Install」,原本要使用「Centos 7」搭建,始終沒有成功...網路上「文章」太多「坑坑洞洞」學習不完全..汗。

==修改「電腦」名稱====

vi /etc/sysconfig/network 

NETWORKING=yes 
HOSTNAME=vpn

==關閉「selinux 」====

vi /etc/sysconfig/selinux

SELINUX=disabled 

==重新「啟動」設定值才會生效======

reboot 

===安裝「epel-release」資源庫===

yum install epel-release -y

==安裝「strongswan、xl2tpd」套件=

yum install strongswan xl2tpd -y

===設定「封包轉送」====

vi /etc/sysctl.conf 

net.ipv4.ip_forward = 1

#寫入「設定值
sysctl -p

===設定 「IPsec 連線」====

vi /etc/strongswan/ipsec.conf



#放到「最後面
config setup
  
conn %default
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1
  
conn l2tp
        keyexchange=ikev1 
        left=192.168.8.20  # 外網「IP」 或 內網「IP
        leftsubnet=0.0.0.0/0
        leftprotoport=17/1701
        authby=secret
        leftfirewall=no
        right=%any
        rightprotoport=17/%any
        type=transport
        auto=add

===設定「PSK 驗證」====

vi /etc/strongswan/ipsec.secrets



# PSK 共享密碼 為「vpn
: PSK "vpn"

===設定「L2TP Tunnel」通道====

#編輯「xl2tpd.conf」設定檔
vi /etc/xl2tpd/xl2tpd.conf



[global] 

listen-addr = 192.168.8.20 # 外網「IP」 或 內網「IP」

[lns default]
#設定「VPN」-「Tunnel
ip range = 172.30.10.1-172.30.10.200
local ip = 172.30.10.254
require chap = yes
unix authentication = yes      #使用pam驗證
name = LinuxVPNserver      #後面會用到
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes


#重新啟動「xl2tpd」服務,寫入「設定值
service xl2tpd restart

#檢查「xl2tpd」狀態
service xl2tpd status


===設定「pma 驗證」====

vi /etc/pam.d/ppp




     auth      required        pam_nologin.so
auth      required        pam_unix.so
account required        pam_unix.so
session required        pam_unix.so


===設定「PPP」獲取「DNS」====

vi /etc/ppp/options.xl2tpd



ipcp-accept-local
ipcp-accept-remote
ms-dns  8.8.8.8
ms-dns 168.95.1.1
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
login   #透過PAP使用系統密碼驗證

===設定「CHAP」連線「帳號、密碼」====

vi /etc/ppp/chap-secrets




#帳號「vpn」、密碼「vpn」,允許「任何」位置
# client  server      secret  IP addresses
     vpn        LinuxVPNserver    "vpn"            *


===設定「PAP」連線「帳號、密碼」====

vi /etc/ppp/pap-secrets




# client server         secret                IP     addresses
       *                   LinuxVPNserver     ""         *

===設定「Server」相關啟動服務====

#啟動「strongswan」服務
service strongswan start

#啟動「xl2tpd」服務
service xl2tpd start



PS 
若經常會遇到「xl2tpd」服務啟動失敗,請檢查「/etc/xl2tpd/xl2tpd.conf」配置檔。

#開機啟動「strongswan」服務
chkconfig strongswan on

#開機啟動「xl2tpd」服務
chkconfig xl2tpd on


#檢查「strongswan」服務
service strongswan status

#啟動「xl2tpd」服務
service xl2tpd status

===設定「Server」防火牆規則====

#開啟「防火牆」規則

iptables -A INPUT -p esp -j ACCEPT # ESP

iptables -A INPUT -p ah -j ACCEPT # AH

iptables -A INPUT -p udp --dport 500 -j ACCEPT # IKE

iptables -A INPUT -p udp --dport 4500 -j ACCEPT # NAT-T

iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT # 強制 l2tp 透過 ipsec 存取。

iptables -t nat -A POSTROUTING -s 172.30.10.0/24 -o eth1 -j MASQUERADE # 轉送「VPN」流量,送往「Interface」。

/etc/init.d/iptables save


#移除「防火牆」阻擋

iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited

/etc/init.d/iptables save

iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited

/etc/init.d/iptables save

==設定「Windows 10」撥號「L2TP/IPsec VPN」===

設定「網路設定

點選「VPN」=>「新增 VPN 連線

1. 選擇「Windows (內建)」
2. 輸入「L2TP-VPN
3. 輸入「192.168.8.20」IP 或 網域名稱
4. 選擇「L2TP /IPsec (使用預先共用金鑰)
5. 輸入「VPN
6. 選擇「使用者名稱與密碼」...以此類推

設定完以後,在「VPN」網卡介面,選擇「安全性
允許這些通訊協定 勾選「(CHAP)」、「(MS-CHAP V2)」。

撥號進行測試「OK!

參考資料
TU的雜七雜八筆記本」-「CentOS 架 L2TP/IPsec VPN

2017年4月9日 星期日

S小魚仔S 探索 Docker Bridge 相關原理。

對於「Docker」網路 與「傳統」虛擬化「網路」非常不一樣,透過示意圖來看一下。

Docker」會創建名為「Docker0」的「虛擬網路橋接器」(Virtual Network Bridge),用來連接「宿主」(Host) 與「容器」(Container),或者連接不同的「容器(Container)。

Docker」利用「veth pair」技術,在「宿主」(Host) 創建兩個虛擬網絡接口「veth0」和「veth1」( veth pair 技術的特性可以保證無論哪一個「veth」 接收到網路訊息,都會無條件地傳輸給另一方)。

橋接模式(Bridge Mode) 將「veth0」附加到「docker0」保證「宿主」(Host) 的訊息有能力發往「veth0

容器」(Container)與「外部」溝通,必須使用「NAT」,正確說法是「NATP」 (網路位址端口轉換) ,NATP 包含兩種轉換方式,「SNAT」 和「DNAT」。

參考資料

2017年4月8日 星期六

S小魚仔S CentOS 7 Install Docker 簡易配置

因為一份巧遇,使用「Docker」,Linux Kvm 和 Linux Docker「中國企業」使用最多。

~~~ Install Docker ~~~

#安裝「Docker
sudo yum install docker -y

#啟用「Docker
sudo service docker start

#開機自動「啟動」Docker
sudo chkconfig docker on

#啟用「Docker」狀態
sudo service docker status

~~~ Install Docker Web UI ~~~

# 啟用 「Docker UI
# -d 讓「Docker」容器在背景運行。
# -p 「內部」容器 使用「外部端口」(Host) IP:9000 對應「內部端口」(Images) 。
docker run -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker


#檢查「Docker UI」服務
docker ps

使用「Firefox」登入「Docker Web UI


~~~ 如何尋找「Docker」Images ~~~

輸入「docker search ntopng -s10
PS
搜尋「前10名」Ntopng 受歡迎「映像檔 (Images)」。
登入「https://hub.docker.com/」也行。

下載「sudo docker pull docker.io/lucaderi/ntpong-docker」映像檔 (Images)

透過「https://hub.docker.com/」找到「lucaderi/ntpong-docker」使用方法

輸入「docker run --net=host -t -p 3000:3000 lucaderi/ntopng-docker

安裝完成,透過「瀏覽器」就可以順利登入「ntopng


參考資料
dockone.io」-「Docker 管理工具 Web UI:DockerUI & Shipyard