convertコマンドで色を置換する

ImageMagickの話ね。

fillオプションとopaqueオプションを使う。

$ convert -fill 'after' -opaque 'before' /path/to/input /path/to/output

色の指定にはredとかblackとかの表記も使える(-fill redみたいな)し、’rgb(R,G,B)’みたいにしても良い(-fill ‘rgb(255,0,0)’)。勿論-fill ‘#RRGGBB’も可。

このやり方だと指定した色と同値の色しか置換されないため、特にjpeg画像なんかは目も当てられない状態になる。その時のための-fuzzオプション。

-fuzz distance{%}みたいにつけてやると、distance分だけ離れていても同じ色として考える。何に対する割合かというと、多分RGBの最大値に対してってこと。

 

今回使ったのは、スキャンした画像から赤いはんこ部分を取り除く目的。

はんこ部分の中心付近が一番劣化で色がブレてなさそうという事で、色をKolourPaintで調べてdc3c3cくらいという事がわかった。ちなみにKolourPaintというのは、Linuxの上でmspaintみたいな操作感を実現しようというソフト。GIMPがデフォで入ってたりするけど、そんなに高度な事をやる必要が無くて、軽量動作が嬉しいみたいな場合に便利。

fuzzオプションのお陰で多くを置換出来るけど、はんこ部分の外側には赤が滲み出ているような状態で、fuzzの引数を調整する事でこれを取り除こうとすると、今度は文書本体が引っかかるようになってしまい、ダメだなぁという状態に。

小規模な赤という事で、白黒化しちゃえば消えるし、そこで調整すればうまく調整できるという訳で、白黒化も含めて一発でやっちゃう。今回使ったのはこちら。

$ convert -fuzz 25% -fill '#ffffff' -opaque '#dc3c3c' -threshold 55% input.jpg output.jpg

便利だ。

ImageMagickで画像を2値化(訂正版)

訂正版っていうか、実用的な指定方法が見つかったってだけ。

ImageMagickで画像を2値化という記事を書いたけど、-thresholdに与える値をどうするかってところが問題だった。何度も試して丁度いい値を探すのはいいけど、最初のアタリをつけたところが下手だと試行回数が増える。

実はこれ、割合指定できる。

例えば50%を与えると、各チャンネル50%を境にして、0%と100%に振られるようになる。24bitカラーなら各チャンネル8bitずつ、0〜255なので、0ないし255に割り当てられるんだろうな。

当てずっぽうにアタリを付ける必要がなくなるので捗る。どっちにしろ最初は当てずっぽうするしかないんだけどね。

bashでファイル名を一括して変更

hoge_out.pdfというファイルが沢山ある状態で、_outを削除したかった。

Windowsなら練馬とか使えば便利でいいんだけど、環境はLinuxという事で。

 

$ for f in `ls`; do mv $f ${f/_out/}; done

{f/_out/}の後の方の/の後ろに置換後文字列を入れれば置換出来る。{f/hoge/fuga}みたいな。

もしpdf以外にもファイルがあって、pdfだけを処理したいなら、`ls`を`ls | grep pdf`みたいにしてやればいいと思う(未確認だけど)。

moraでダウンロードしたみたいなデータを自分で作る

一体何を言っているんだといった感じだ…

 

moraでダウンロードしたデータは、

・トラック毎に1ファイル

・メタデータがちゃんと入ってる

・ジャケット画像もちゃんと入ってる

一方、自分でCDからリッピングしたデータは、tak+cueで保管しているので、

・ディスク単位で1ファイル

・メタデータはcueに入っている

・ジャケット画像なんてある訳ない

 

という訳で、こういうデータを自分で作ってやる。

 

今回使うのは癒やし系と名高いStylipSのChoos me♡ダーリン。

爆笑の安さである。StylipSに恨みでもあるのか。まさかゆいかおりが悪いとでも言うのかね??

 

tak+cueで保管していたけど、Walkmanにインポートする時にmp3にエンコードしていて、なんだか面倒だったのでこのmp3データを使う。ジャケットは適当に画像検索して拾ってきた。

 

ひとまず試しにやってみる。

$ ffmpeg -i cmd.mp3 -i cover.jpg -vcodec mjpeg cmd.mp4

foober2000でジャケット画像が拾えるかどうかでチェック。結果は失敗。動画プレイヤーでも再生できない。なんなんだ。

 

調べ回ったけど、なんだかffmpegじゃ出来ないみたいだ。2段階に分けて作業する。

1.音声をm4aにする

2.ジャケット画像を突っ込む

mp4じゃなくてm4aにしてるのは、これなら明示的に音声だよってアピール出来るかなーってだけ。Androidでは拡張子がかなり重視されていて(無視されるなら拡張子の存在意義が問われるところだけど)、どんなアプリで開くかの自由度が結構キツイので、音声風味な拡張子にしておきたい。

という訳で作業。

$ ffmpeg -i cmd.mp3 -acodec libfdk_aac cmd.m4a
$ AtomicParsley cmd.m4a --artwork cover.jpg

なんだかどこの情報でも「temporaryなデータが出力されます」で記述が終了していて(公式のドキュメント嫁)、最終ファイルはどう処理するんだ…って思ったけど、foobar2000ではちゃんと表示されたし、Xperia(SO-02G)のミュージックアプリでもきちんと動いた。Walkmanもあった(NW-F805)のでx-アプリを通してインポートしたけどこれも成功。iPadはあるけどiTunesを起動したくなかったので見送り。

–overWriteってオプションを追加しておけば上書きされるので変な名前のファイルが作成されて混乱する事もないでしょう。

 

AtomicParsleyはArchLinuxなら普通にパッケージがあるのでこれをインストールした。Windowsにバイナリが有るかは確認してない。

 

takからエンコードすればmp3→aacの2重エンコードの気持ち悪さもなんとかできるでしょう。

 

また内容の薄い記事になってしまった。しょうがないな。うん。

 

 

しかし中古で買ったNW-F805だけど、イヤホンジャックがガバガバ過ぎて使い物にならん。SO-02Gで聞いたりNW-F805で聞いたりノートパソコンで聞いたり、有線で聞いたりBluetoothで聞いたりと、全く安定しない状況だが、何とか出来ないものかと…

以前DAP自作を画策していた頃があったけど、これをまた考えてみるかなー。

LightDMのwebkit2なgreeterの時計表示をいじる

お客さんはみ出てますよー

お客さんはみ出てますよー

 

要はこういう事さ。いつかのバージョンから、時計表示がゴリゴリになってて、はみ出るようになってしまった…。

これがただのHTMLな感じにコーディングされてるのは知っているので(背景をいじった経験がある)、それを眺めればなんとかなるでしょうといった感じ。

 

該当ソースはこちら。

$ cat /usr/share/lightdm-webkit/themes/antergos/index.html | grep current_time
<span id="current_time" class="time text-center"></span>

スタイルを定義してるのは time というクラス。これが書かれてるのはstyle.css

$ cat /usr/share/lightdm-webkit/themes/antergos/css/style.css | grep ".time {" -A 10
.time {
font-family: "LatoLight", "Open Sans", sans-serif;
font-size: 96px;
line-height: 1em;
text-decoration: none;
color: #3D73C5;
background-color: rgb(252, 247, 247);
transition: 1s ease-out;
position: relative;
top: 11px;
}

この font-sizeをちょろっと書き換えてやればよろしい。

それらしいサイズ(てきとう)

それらしいサイズ(てきとう)

 

ちなみにこれだと96px→40px。40pxでこんな小さいんか、みたいな感じ。

 

気になってたはみ出しは解消出来たので万事おっけー。

俺々プールをさくっと構築するスクリプト

書いた。https://github.com/ottyajp/solo_mining_pool_script

 

前のmonacoinの俺々プールを作るを参考にNOMPを構築した。それの記録をもとにスクリプトにまとめたもの。全体的にめちゃくちゃてきとう。

まだこのスクリプトを使って構築した環境で掘り当てれてないから誰か試してくれてもいいのよ(まがお)

 

パスをちゃんと考えて書いていかないとイカんなぁとしみじみ思ったのだった。

 


 

12/7 17時頃追記

テスト環境を書いてなかったけど、14.04.3 LTS 64bitです。VirtualBoxの上にインストールしました。ネットワークアダプタはブリッジが良いかと

一応32bit OSなら32bit版のmonacoindを拾ってきてくれるようにはしているけど、ほかは知らないです。

ラノベデータベースを作る 〜OCR〜

手持ちのコミックスやラノベのデータベースを作りたいと思った時、全部手作業で入力するにはだいぶ厳しい分量があるので、どうせなら、背表紙が写るように並べて撮影→各本ごとの領域に切り分け→OCR→タイトル/著者くらいの情報を得て、データベースに放り込む、みたいなシステムを作りたいと思うわけだ。その準備として、まずはOCRで文字が認識出来るかどうか、取り敢えずで触ってみる。

今回触るのはtesseract。環境はantergos(ArchLinux)。

 

普通にリポジトリにあるみたいなので、素直にインストールする。

$ sudo pacma -S tesseract tesseract-data-eng tesseract-data-jpn

tesseract本体、English, Japaneseの言語データをインストールした。言語データが無いと、本体だけでは実行出来ない。

 

今回試しにOCRしてみる画像はこちら。

OCRサンプル。サクッと作った

OCRサンプル。サクッと作った

 

さて、実行してみる。tesseract input_file output_fileといった感じ。-lで使用する言語を指定できる。+で複数繋げば複数選択する事も可能。

$ tesseract test.png result.txt
$ cat result.txt
ABC123

$ tesseract test.png result.txt -l jpn
$ cat result.txt
ABCー z3
ぁいう
日本語

$ tesseract test.png result.txt -l eng
$ cat result.txt
ABC123

$ tesseract test.png result.txt -l eng+jpn
$ cat result.txt
ABC123

$ tesseract test.png result.txt -l jpn+eng
$ cat result.txt
ABC123
あいう
日本語

  • 言語を指定しないと英語が選択される
  • 日本語だけではアルファベットや数字を正しく認識できない
  • 言語複数指定の場合は指定する順序で結果が変わる
  • eng+jpnよりjpn+engの方が精度が良い?

といったところか。そう何度も試したわけではないので、それぞれの実行も1回だし実際どうなのかは不明。

 

Tesseract-OCRの学習あたりを参考にすればさらなる学習も出来そうだけど、だいぶ骨が折れそうだな。

 

サンプル画像を変形した場合にどうなるかはまた今度調べよう。

Qt Creatorの補完キーを変える

便利なのだ、補完。でも、デフォルトではCtrl+Spaceで発動するので、補完するつもりでCtrl+Spaceを押すと、fcitxのON/OFFが切り替わってしまう。

補完キーを押さなくても、場合によっては少し待つと勝手に発動したりするんだけど、その待ち時間が結構ストレスになる。

という訳で、補完キーの変更をしよう。fcitxの切り替えは変えたくないので(影響範囲が大きすぎる)、Qt Creator側の補完キーをいじる。

 

ツール(T)→オプション(O)→環境→キーボードを呼び出す。その後フィルタにcompleteと入力する。

フィルタにcompleteと入力する

フィルタにcompleteと入力する

 

するとこのようにTextEditorのCompleteThisが見える。きちんとラベルも「補完の開始」となっているし、ShortcutもCtrl+Spaceでまさしくこれっぽい。

あとはこれを下の入力枠で変更するだけだ。Recordボタンを押してから好きなキーを押すと勝手に入力される。今回はお隣さんのShiftと組み合わせてShift+Spaceにしてみた。

Shift+Spaceは、実は日本語入力中に半角スペースを入力したい時に便利に使っているのだけど、Qt Creatorの中で日本語を入力する機会というのが滅多にない事なので(コメントは頻繁に書かない方だし、日本語を表示したい部分は全部tr()して後からLinguistで日本語を設定する)さしたる問題ではないかなー、と。

 

これで暫く試してみよう。

GetGemsをLinuxで使う

Webアプリとかでなくネイティブアプリケーションを使いたい。(常にブラウザ置いておくのもアレだし、タスクトレイに放り込んでおけると嬉しい)

ところでクライアントあるの?

クライアントあるのか?

クライアントあるのか?

・Get it on Google play

・Download on the App Store

・Get the Web Client

これ明らかにWebアプリの事だし他にないじゃん。

 

と、ここでGetGemsはTelegram互換だった事を思い出す。TelegramのWebクライアントには同じアカウントとしてきちんとログインできるのだ。

 

そして、Telegramにはネイティブアプリケーションがある!!(Windows/Mac/Linux揃っている)

 

公式サイトから拾ってくる。それを展開する。

$ tar -Jxvf ./tsetup.0.9.13.tar.xz
Telegram/
Telegram/Updater
Telegram/Telegram

あとは実行する。Telegramはそのまま実行可能なのでこれを起動しても良いし、それかメニューの中に勝手に入るかもしれない。僕の環境ではメニュー→インターネット→Telegram Desktopで入っていた。

きちんと起動した。

きちんと起動した。

 

後は素直にログインしてやれば、こうだ。

きちんとログイン出来た。

きちんとログイン出来た。

 

一応モザイクしたけど、会話相手の少なさがバレるな、これは(笑)

 

refリンク貼っておきますね→http://r.getgems.org/m/WYnwYR3jEo

登録待ってまーす(

CLIからツイートするだけのプログラム書いた

書いた。

ツイートする時で、mikutterが起動している時はmikutter、Vimが起動されている時はTweetVimという感じだったんだけど、mikutterが起動してもいなくて、Vimが起動してもいないという状態では、Webを呼び出すかVimを呼び出すかだった。

TweetVimもいいんだけど、日本語入力モードのON/OFFで非常に面倒なところなので、もう日本語入力モードがどっちでもいいような感じでターミナルからサクッと呟けるプログラムを用意すればいいじゃないと思った。

どうせ探せばあるだろって思ったけれど、どうせなら自分で書いたろという事で、書きました。

https://github.com/ottyajp/cli_tweet

細かい事はそっちのREADME.mdに書いてあるので割愛。

 

書く上で参考(というか丸パクリな部分が多いけど)にしたのは以下のページ。

プログラミングメモ日記 Qtのコンソールアプリの基本構造

mole-studio C++/QtでOAuthを使ってTwitterに投稿する

 

今後やりたいと思っているのは、(README.mdに書き忘れたんだけど)oAuthを真面目に実装する事。いつになるか知らないけど。