tesseract を使用したOCR向けに学習データを画像・フォント(テキスト)から作成する
jTessBoxEditor をインストール。(要JRE)
1.テキストから作成する場合
TIFF Generator タブから任意のテキストを入力し、フォントを選択してGenerateを押す。
#Output でディレクトリを確認または選択しておく。
#隣の小さいボックスに任意の3文字を入力。
## 後ほどTesseractで言語を指定するキーとなる。通常は eng とか jpn とか対応した言語の文字を入力?
Tiffファイルが作成されるので必要があればBox EditorタブでTiffを読み込んで修正。
Trainerタブで Training Data の所で作成したTiffを読み込んで Train with Existing Box を選択し Run。
すると Output ディレクトリに" tessdata" 内に学習データができるので
デフォルトの場合 /usr/shere/tesseract/4.00/tessdata 以下にコピー
2.画像から作成の場合(1のデータに画像から追加学習)
#画像をもとにイチから作るのは今回の目的でなかったのでやってませんのですみませんが他を参照ください。
# 1を飛ばすか適当なデータを作ってからやればできるかも?
1で指定した出力ディレクトリに同じような名前の png など画像を用意。
tesseract eng.test.exp*.png eng.test.exp* -l eng batch.nochop makebox
* は同じ数字
実行するとBoxデータが作成される。
jTessBoxEditorで読み込んで修正。
そのまま Trainer タブで同じくRunすると勝手にさっきのデータに追加で学習されるみたい。
# ググったところもっと良さそうな最新のやりかたもあるようですが
動きがよくわからないのでなるべく手動で実施してみました。
# 細かいところは面倒なので"あとで"追記するかもしれません。
noip2 service daemon
no-ip というDDNSサービスがあり、それがIP自動更新ツール (noip2) を提供しているが
サービスに設定できず起動時に自動的に起動できなかった。
その問題を解決したので記す。
というよりは、最近の Linux で採用されているバックグラウンドプロセス管理システムである systemd の使い方と、自前スクリプトをそれに登録する方法のまとめ。
自動更新ツールの README には init.d に登録するように書かれているが
旧式であるため、説明の方法には従わず下記の手順で systemd に登録する。
<設定ファイル作成>
/etc/systemd/system/noip2.service として下記の内容でファイルを作成。
[Unit]
Description=noip2 service
[Install]
WantedBy=default.target
[Service]
Type=forking
ExecStart=/usr/local/bin/noip2
Restart=always
実際には上記ディレクトリにファイルは作成せず /usr/local/lib 以下に作成し
リンクを貼ることとした。
<systemd へ登録>
1.設定ファイルをリロードする。
sudo systemctl daemon-reload
2.設定を有効にする。
sudo systemctl enable noip2.service
3.サービスを開始
sudo systemctl start noip2.service
4.状態を確認
sudo systemctl status noip2.service
<ハマりかけたところ>
設定ファイルの Type=forking の記述がないとサービスがうまくスタートしなかった。
WiFi 暗号化APに接続
Distribution を更新したところ WiFi接続に Wicd とか云う謎のツールを使うしかなく
更に暗号化が WPA2 と認識されているが、設定してもパスワードが違うと言われ続けるので別の設定で接続する。
1.WPA パスフレーズを生成
$ wpa_passphrase "SSID" "KEY" > /etc/wpa_supplicant/wpa_supplicant.conf
2.生成したファイルに情報を追記
ssid="SSID"
key_mgmt=WPA-PSK
proto=WPA WPA2
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
#psk=~~~~
3.Access Point に接続できるか確認
# wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlp2s0 -Dwext
4.DHCP でIPを取得
# dhclient -d wlp2s0
Google Map にて座標で検索する
<したいこと>
度分秒 (DMS) 形式で書かれている座標を Google Maps に入力したいが
度記号の入力がわからんので度分 (DMM) 形式に変換して入力する。
度記号を一々変換するより、DMM形式に計算して入れた方が楽そうだったのでやってみた。
・度分秒 (DMS) 形式
41°24'12.2"N 2°10'26.5"E
・度分 (DMM) 形式
41 24.2028, 2 10.4418
変換したい座標: 41°24'12.2"N 2°10'26.5"W
分まではそのままの数値で度記号の代わりにスペースで区切り、
緯度、経度の区切りにカンマを使用する。
41 24,2 10
秒を60で割って分に足す。
41 24.203333,2 10.441666
ここで困ったことに Google Maps に入力する座標は東経でないといけないらしいので
変換元座標が西経(末尾W)になってしまっているが、計算値にマイナスをつければ
東経になる
(というより経度を表す常識として東は+で西は-なのかな?)
結果
41 24.203333,-2 10.441666
※座標は Google Maps のヘルプにあった座標で特に意味はありません。
Debian jessie 上で JACK と pulseaudio を共存する
<目的>
Debian jessie 上で JACK と pulseaudio を共存し
JACK 経由でサウンドを再生しながらブラウザなどの音声は pulseaudio 経由で再生する。
JACK と QjackCtkl をインストールする。
QjackCtl の設定->オプション->スクリプトのスタートアップ/シャットダウン、前/後それぞれ4つに
以下のスクリプトを作成し指定する。
スタートアップ時に実行
~/.jack/pulse_before_start.sh
#!/bin/bash
pulseaudio --start
pacmd suspend true
スタートアップ後に実行
~/.jack/pulse_after_start.sh
#!/bin/bash
pactl load-module module-jack-sink channels=2
pactl load-module module-jack-source channels=2
pacmd set-default-sink jack_out
シャットダウン時に実行
~/.jack/pulse_before_stop.sh
#!/bin/bash
SINKID=$(pactl list | grep -B 1 "Name: module-jack-sink" | grep Module | sed 's/[^0-9]//g')
SOURCEID=$(pactl list | grep -B 1 "Name: module-jack-source" | grep Module | sed 's/[^0-9]//g')
pactl unload-module $SINKID
pactl unload-module $SOURCEID
sleep 5
シャットダウン後に実行
~/.jack/pulse_after_stop.sh
#!/bin/bash
pacmd suspend false
以上の設定をすることで QjackCtl を起動し開始するだけで
目的の動作がされる模様。
QjackCtl 起動時に読み込むように指定したため
/etc/pulse/default.pa に以下を追記する必要はない。
また、最近のバージョンでは D-bus 経由で自動的に読み込むらしいので
スタートアップ時のスクリプトにも書く必要ないかも?
load-module module-jack-sink
load-module module-jack-source
Debianのファイヤーウォールを設定する
<目的>
Debianjessieで iptables を編集して望み通りのファイヤーウォールに設定する。
<手順>
1.管理ツールインストール
apt-get install iptables-persistence
2.設定ファイル(ルール)を vi などで編集
vi /etc/iptables/rules.v4
3.ルールを再読み込みさせる <重要>
sudo netfilter-persistent reload
4.以下のコマンドで読み込んだルールの構文をチェックしてくれる。
check syntax
5.適用させるんだっけ?
sudo iptables-restore < rules.v4