min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

RaspberryPi Google Custom Search API で画像収集(Python 3)

 

このサイトのとおりやってみる。

qiita.com

まずは カスタム検索 で新しい検索エンジンを作成する。

カスタム検索

・「検索するサイト」には www.google.co.jp と入れておく(この後削除する)。

・「言語」は日本語に変更する。

・「作成」をクリック。

f:id:min117:20170722182931p:plain

・「コントロールパネル」を開く。

f:id:min117:20170722183037p:plain

・「画像検索」を オン にする。

・「言語」が日本語なのを確認。

・「検索するサイト」は「追加したサイトを重視して、ウェブ全体を検索する」に。

・「www.google.co.jp」を選択して「削除」する。

f:id:min117:20170722183157p:plain

・「検索エンジンID」をクリックして、出てくる文字列を控えておく。

f:id:min117:20170722183353p:plain

ーーー

Custom Search API を獲得するために、Google Cloud Platform Cosole に行く。

Google Cloud Platform Console

f:id:min117:20170722183655p:plain

左メニュー「認証情報」から、サーバーキーを控える。

f:id:min117:20170722183730p:plain

Python スクリプトについては、冒頭のサイトどおり。

f:id:min117:20170722183752p:plain

 ソース記述。まんま写しだけど、あえてコピペでなく手書きする。

Python3 にて。

$ vim get_image.py

f:id:min117:20170722212754p:plain

実行してみる。

$ ./get_image.py

f:id:min117:20170722210608p:plain

httplib2 でエラーになった。このへん参照して解消する。

HTTPウェブサービス - Dive Into Python 3 日本語版

f:id:min117:20170722211752p:plain

なんだか分かりやすい文章。あとでじっくり読む。

f:id:min117:20170722211805p:plain

httplib2 のインストールはこのへん。

ytsuda.hateblo.jp

$ pip install httplib2

f:id:min117:20170722212009p:plain

インストール完了。再度実行してみる。

$ ./get_image.py 

f:id:min117:20170722210516p:plain

あれ?エラーだ。python3 を明示して実行してみる。

$ python3 ./get_image.py

f:id:min117:20170722212523p:plain

url は取れている。なぜかダウンロードだけ失敗しているようだ。

原因調査。31行目が間違っていた。

(誤)splittext

(正)splitext

f:id:min117:20170722214455p:plain

直したので再度実行してみる。

※ ついでなので、41行目と43行目(検索対象文字列)を変えて、スクリプト名も少し変えた。

$ python3 ./get_image_gakki.py

f:id:min117:20170722215007p:plain

うむ。うまくいった。APIの制限によるとMAXで10枚までの検索ができるらしい。今回は5枚。

f:id:min117:20170722215317p:plain

しっかりダウンロードできている(1枚は変な画像が入っているが気にしない)。あとで改造して、cgi-binから枚数指定してダウンロードできるようにしてみる。

RaspberryPi 画像収集APIを使って大量画像を一括ダウンロードする(Python3)

 

Google画像検索で都度探すのが面倒なので、APIを使って画像を一気に収集したい。このへん参照。

qiita.com

d.hatena.ne.jp

まずは

f:id:min117:20170722071555p:plain

に従って words.txt imagenet.synset.obtain_synset_list をダウンロードする。

$ wget http://image-net.org/archive/words.txt

$ wget http://www.image-net.org/api/text/imagenet.synset.obtain_synset_list

次はソースをコピペする。スクリプトはこれ。

github.com

f:id:min117:20170722070732p:plain

f:id:min117:20170722070826p:plain

Python3 で書かれている。

Python のコードは字下げTABかスペースか必ずどちらかに統一しなければいけない。このコードを書いた人はTABで統一しているようだ。 

ーーー

コードの冒頭で

import PIL from Image

している。Python3.5対応の画像処理ライブラリ Pillow(PIL)なるものをインストール必要らしい。

Python 3.5 対応画像処理ライブラリ Pillow (PIL) の使い方 - Librabuch

sudoしないで、ユーザーpiのままインストールしてよいようだ。

$ pip install pillow

f:id:min117:20170722071339p:plain

画像一括ダウンロードしてみる。冒頭サイトには

f:id:min117:20170722072014p:plain

とあるので、そのまま実行してみる。

f:id:min117:20170722072214p:plain

しっかり動いた。word.txt にある単語で画像を大量収集 するらしい。

f:id:min117:20170722072500p:plain

accompanist(伴奏者)

f:id:min117:20170722072908p:plain

素晴らしい。wordlist.txt に、欲しい単語を突っ込んでスクリプトを流しておけば、関連するのをガバっといけるわけだ。しばらく試す。

 

fedora 「.fuse_hidden…」という名の巨大ファイルの削除

 

「.fuse_hidden...」という隠しファイルが、HDDを圧迫している。

f:id:min117:20170718214145p:plain

以前も似た対応をした。

min117.hatenablog.com

このときは、fedora上の共有フォルダにネットワーク経由でmvしようとしてゴミが残ったのが原因だったけど、より詳しい解説のあるサイトを発見。

lsof や find コマンドで fuse.gvfsd-fuse の警告が出る問題について調べてみた | レンタルサーバー・自宅サーバー設定・構築のヒント

fuse」とか「gvfs」とか、漠然と見ていた文字列の意味がはっきりした。

f:id:min117:20170718212134p:plain

 

 

f:id:min117:20170718212331p:plain

原因調査に使うコマンドは4つほどらしい。順に実行してみる。

$ sudo cat /etc/mtab | grep gvfs

f:id:min117:20170718213056p:plain

$ sudo ls -l /run/user/1000/gvfs

f:id:min117:20170718213116p:plain

$ ls -dl /run/user/1000/gvfs

f:id:min117:20170718213130p:plain

$ ps aux | grep gvfsd-fuse

f:id:min117:20170718213141p:plain

対処としては「対処2」に示される方法がよさそう。

f:id:min117:20170718213203p:plain

この対処も実際に実行してみる。

$ sudoedit /etc/fuse.conf

f:id:min117:20170718213810p:plain

あれ?もともと user_allow_other の記述があった。このままにする。

f:id:min117:20170718213818p:plain

fedoraCentOS系なので「fuseグループへ追加する」は行わない。

$ fusermount -zu $XDG_RUNTIME_DIR/gvfs

f:id:min117:20170718213918p:plain

$ killall gvfsd-fuse

f:id:min117:20170718213950p:plain

$ /usr/libexec/gvfsd-fuse -o big_writes -o allow_root $XDG_RUNTIME_DIR/gvfs

f:id:min117:20170718214016p:plain

消せるかどうか確認してみる。

 

$ sudo rm -rf ¥.fuse_hidden00*

f:id:min117:20170718214523p:plain

あれ?ダメだ。消えない。もう少し試す。

 

 

シンガポール ペニンシュラのショッピングモールで買った SIMフリールータ HUAWEI-D716

シンガポールの電気関係の買い物といえば「シムリムスクエア」をよく耳にするが、最近は詐欺の巣窟のようになっていて、怪しい商売しかしていない。2017年2月に訪れたときも、やはり胡散臭かった。

ーーー

ところが、少し離れた「ペニンシュラホテル」にあるショッピングモールが、実は穴場だった。

https://www.google.co.jp/maps/place/Peninsula+Shopping+Centre+Singapore+(Peninsula+Shopping+Complex+Singapore)/@1.2918128,103.8498169,19.48z/data=!4m13!1m7!3m6!1s0x31da11238a8b9375:0x887869cf52abf5c4!2z44K344Oz44Ks44Od44O844Or!3b1!8m2!3d1.352083!4d103.819836!3m4!1s0x0:0x3e2cbc496b6fc19!8m2!3d1.29184!4d103.8503049

f:id:min117:20170716114239p:plain

Amazon だと 18,800円するSIMフリーLTEルータ「HUAWEI-D716」が、4,000円で買えた。日本では HUAWAI E5573s-606 という型番らしい。

f:id:min117:20170716115306p:plain

 

コツは「買いたそうなそぶりを見せつつ、大幅な値切り金額を提示する」こと。日本人はどうしても遠慮がちだが、へんに尻込みせずまずは言ってみるといい。

ーーー

値段が安すぎたので心配だったが、性能は最高SIMフリーなので、その後にイギリスに行った時も(VodafoneのSIMで)問題なく使えた。

f:id:min117:20170716112304p:plain

管理画面は http://192.168.8.1

IDもパスも admin で開けるようだ。

f:id:min117:20170716112315p:plain

f:id:min117:20170716112324p:plain

f:id:min117:20170716112331p:plain

f:id:min117:20170716112337p:plain

f:id:min117:20170716112343p:plain

DHCPサーバ機能まである。

f:id:min117:20170716112355p:plain

iMacから接続して確認。IPアドレスが振られている。f:id:min117:20170716112350p:plain

 

Facebook の開発者登録を行う

 

Facebook で画像取得アプリを作ってみる。まずは開発者登録する。このへん参照。

www.spiceworks.co.jp

登録ページは以下。

developers

f:id:min117:20170711221021p:plain

f:id:min117:20170711221030p:plain

f:id:min117:20170711221040p:plain

アプリ名は適当に。と思ったら、「FB」という文字列で始めることはできないらしく、エラーになった。

f:id:min117:20170711221050p:plain

f:id:min117:20170711221059p:plain

登録完了。まずはいじってみる。

f:id:min117:20170711221117p:plain

RaspberryPi ラジオ再生が途中で止まってしまう → 受信はしているが音だけが切れているらしい → ALSAデバイスを確認する

 

せっかく cron で定期的になるようにしたはずの RaspberryPi + テレビ のラジオ環境だけど、再生している途中に音が聞こえなくなってしまう。どうやら RaspberryPi が突然出力デバイスHDMI経由のテレビへの音出力)を見失うのが原因のようだ。

このへんが参考になりそう。

ameblo.jp

コマンドとしては

$ aplay -l

して、出てきたデバイス情報

f:id:min117:20170708200821p:plain

のうち

card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]

card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]

あたりの記述を見ればよいらしい。

ラジオを再生する mplayer コマンド の -ao オプション hw=cardの番号.deviceの番号 と指定する。今回は HDMI に出力したいので、hw=0.1 にする。

$ mplayer -ao alsa:device=hw=0.1 -playlist http://www.simulradio.jp/asx/fm-tachikawa.asx

(参考)

f:id:min117:20170708200549p:plain

RaspberryPi ラジオの自動再生を crontab で設定する

 

せっかく radiko Premium で全国のラジオを(テレビで)聴けるようになったので、定期的な再生を cron で仕込みたい。

やることは

毎時 0分から55 分の間で、20分ごとに、RaspberryPiを自動で再起動する

 例えば

  6:00 再起動

  6:20 再起動

  6:40 再起動

  6:55

   | 何もしない

  7:00 再起動

  7:20 再起動

  …

 といった感じ。

※ シャープ AQUOSには、HDMI機器の起動により自動でテレビの電源が入る機能がある。これが最高に良い。ラズパイに再起動を仕込めテレビの電源ON ができる

     

毎時 1分 から 56分 の間で、20分ごとにradiko によるラジオの自動再生を行う。

 つまり、ラズパイが再起動する → テレビの電源が入る → 直後にラジオが再生 されるようにする。

 ①とあわせて書く

  6:00 再起動テレビ電源ON)

  6:01 ラジオ再生

  6:20 再起動(テレビ電源ON)

  6:21 ラジオ再生

  6:40 再起動(テレビ電源ON)

  6:41 ラジオ再生

  6:56

   | 何もしない

  7:00 再起動(テレビ電源ON)

  7:01 ラジオ再生

  7:20 再起動(テレビ電源ON)

  …

ーーー

以上を、RaspberryPi の crontab に仕込む。cronの設定はこのへん参照。

crontabの設定

f:id:min117:20170708185619p:plain

$ sudo -s

# vim /etc/crontab

上記①のように、毎時 0分から55分の間20分毎に実行 するには、1列目0-55/20 と書けばいいらしい

f:id:min117:20170708192423p:plain

よし。うまく動いた。

f:id:min117:20170708193644j:plain