今日も微速転進

ここではないどこかへ

プログラミングの自習系学習サイト比較

人間が授業スタイルではなく自習系のやつ。

ドットインストール

ドットインストール - 3分動画でマスターする初心者向けプログラミング学習サイト

老舗。

プレーンテキストの文法チェックツール(textlint)の講座とかDocker入門とか意外に幅広い。

初心者向けのWeb系講座ばっかりだろうと思ってたら地味に講座が増えている。

Progate

prog-8.com

転職サイトの会社が運営元:ITエンジニアの転職なら | プロエンジニア

結構評判がいい。

HTMLの教材だけみたけどスライドの説明の図が充実している。演習もその場で回答がチェックできるシステム。

ヒントがあるのは大きいと思う。マイペースで進められるので基礎を固めるにはいいのでは。

paiza learning

paiza.jp

  • オンライン学習環境(paiza cloud)との連携が最大の強み
  • スキルチェックと求人サイトとの親和性が高い
  • オタクよりで時々痛い
  • 炎上マーケティング
  • Progateに比べると粒度がまちまち

Cloud9というクラウド開発環境もあるけどあまり使いやすくない。教材と実行環境がシームレスに統合されている点はすごくいい。

演習問題の問題文がおかしいとか、内容があまりにしょぼいとか詰めが甘い。

音声つきの動画教材とか、かなり手の混んだ教材を用意しているんだけどそこまで評価されている感じではない。 ビギナーが求めているのとはちょとズレている?

PyQ

pyq.jp

Python 専門らしい。実物は見ていない。

運営会社がPythonスペシャリスト揃いなのでクオリティはすごいと思う。

Udemy

www.udemy.com

プログラミングに限らない。

  • 英語の教材が中心(字幕あり)
  • 個人がつくった教材をアップロードしているので玉石混交
  • 基本的に有料
  • 一定期間内なら返金可能

採点とかそういうのはない。

時々セールで大幅割引やっている。

まとめ

数年前に比べるとすごい時代の変化。ちょっとプログラムが書けるレベルならすぐにオンラインスクールにお金を払う必要ないのでは。

とっつきやすさ、はものすごい重要なファクター。

プログラミングを学ぶ障壁の一つである環境構築の問題を回避する手段が増えた(Progate、paiza、cloud9、ほか)のと、懇切丁寧な教材が一気に増えた。

まあエラーに遭遇したときに自力で対処できるか、とか英語の1次資料を読んで対応できるか、ってのは別の能力だろうけど。

そういう訳で、(私の代わりはごろごろいるはずなので)そろそろ労働を免除してベーシックインカム下さい。

MacBook Air (mid 2012)のFaceTimeカメラの明るさ問題

もう少しの間は持ちこたえてほしい。

症状

ビデオチャットで画面に映る自分の顔がちょっと暗い。手動調整はできないらしい。

対策

ロジクール HDウェブカム C525r

ロジクール HDウェブカム C525r

いつの間にかC525rという新しいモデルになっている……買い換えるかな。

画面が真っ黒で映らなとき

再起動してダメならSMCのリセットなどメンテナンス系の手順を試す。

Mac の SMC (システム管理コントローラ) をリセットする方法 - Apple サポート

発売年度で手順が変わっているらしい。

macOS Sierra: コンピュータの NVRAM または PRAM をリセットする

最悪、OSを再インストール。

まとめ

買い換えるのが確実かな。

ロジクール HDウェブカム C525r

ロジクール HDウェブカム C525r

ヘッドセットマイクも新しいの買いたい。

PythonとPmodのマイクモジュールで玄関のチャイムの音を検知する

ラズパイコンテストの応募ネタです。しょぼいけど動いたので。

背景

難聴による聴力低下が進むと玄関のチャイムの音が鳴っても聞こえない、または聞こえづらいという問題が発生する。

補聴器というソリューションも存在するが、一日中補聴器を装用しているわけではない。玄関のチャイムそのものをワイヤレスタイプや光で通知するタイプに交換するということも考えられるが、借家等の事情により必ずしも適切とは言えない。

玄関のチャイムそのものを改造せず、玄関のチャイムの音を検知するプログラムにより難聴者のQoLを改善することを目指す。

なお、健常者に置いてもなにかに没頭していて玄関のチャイムが鳴ったことに気づかないということは充分あるので健常者にとっても有益なはずである。

前提

f:id:atuyosi:20180910220631j:plain:w480

過去記事で紹介しているマイクモジュールを使う。

a244.hateblo.jp

ラズパイはRaspberry Pi 3 model B+。別にGPIOピンヘッダがハンダ付けされていればPi Zero Wでも問題ない。

ただし、マイクは安いUSBマイクでは感度が良くないのでMEMSタイプか、設置位置を考慮する必要がある。

事前調査

USBのマイクで玄関のチャイムの音を録音してAudacityで分析してみる。

arecordコマンドで録音する。さすがにデフォルトの8,000Hzはどうかと思うので、CD音質で録音してみます。音質を下げるのは難しくないので。

$ arecord -D plughw:1,0 -f cd  mic.wav

-f cdで録音フォーマット(サンプリング周波数、ビット数)を指定しています。このオプションを省略すると8,000Hz、8bit。ステレオである必要性はないです……。

f:id:atuyosi:20180910195404j:plain:w480

ローパスとハイパスフィルタでノイズ除去、正規化を施す。

f:id:atuyosi:20180910194231j:plain:w480

ものすごくざっくりだが2,000Hzあたりの周波数の成分を検出すれば良いという仮定でやってみる。

方針

残念ながらマイクモジュールの信号をWAV形式に落とし込む方法がわからないのでマイクからの信号値変動幅で判定する。

一定時間内にしきい値を一定回数超えたら玄関のチャイムがなったとみなす。

2,000Hzということなので0.5ミリ秒以下でサンプリングすればいいはず。

準備

SlackのIncomming Webhockを使えるようにする。

  1. WorkspaceのApp管理ページへ移動する(もしくはhttps://slack.com/appsから遷移する)。
  2. 上段にある検索ボックスに"incoming"と入力して検索
  3. 「設定を追加」をクリックする
  4. 画面の表示に従って必要なパラメータを入力
  5. 投稿用のURLをコピーしておく

api.slack.com

環境変数Pythonスクリプトと同じディレクトリの.envというファイルに書き込む。

SLACK_HOCK_URL=https://(省略)

各種モジュール

プログラム側に環境変数経由で投稿用のURLを渡すのでdotenvをインストール。

$ pip install python-dotenv
$ pip install slackweb
$ pip install designspark.pmod

なお、Pythonのバージョンは3.5.3。

Pythonスクリプト

マイクモジュールからの入力値が一定時間内にしきい値を超えたら通知するスクリプト

こんなので動くのかって感じだけど動きました。

大きな音に反応したり、センサ本体が物理的に揺れたりしたときも電圧値が変化します。

センサの接続部がゆるいのも不安定な要因の一つっぽいです。

実行した様子

Slackのおかげで超お手軽。

$ python3 detect_sound_and_notify.py > /dev/null 2>&1

実際は実行し続ける必要があるのでtmux上で起動してセッションをdetach。

通知

f:id:atuyosi:20180910215159j:plain:w480

メッセージ

f:id:atuyosi:20180910215222j:plain:w480

課題など

  • パラメータの調整が不十分
  • 設置位置とマイク感度に応じた調整
  • Slack以外の通知手段
  • 部品がむき出し……

チャイムの音を人工知能に学習させればよかったのでは……。

ALSA経由で使えるマイクモジュールの方が良かったかも。

感想

少しばかり難しく考えて途方に暮れましたが、センサから値で音がなったかは検知できているので妥協しました。

理想を言えば、チャイムの音の周波数成分を分析して人工知能でいい感じにできると誤検知が減るはずです。 しかしながら、そもそもセンサの入力値をPCM形式のような音として扱える形式にする方法がわかりませんでした。

alsa - How to recording audio file with PMod mic3 on Raspberry PI? - Stack Overflow

動いたので良しとしましょう。

何より提供いただいたPmod HATの返却義務を回避できたはずなので。

Google Cloud Vison API関連メモ(ただし文字認識に関する話のみ)

過去記事でも解説しているけど改めて再整理。自分の興味ないことに無関心というオタク気質のにじみ出た記事はこちらです。

ドキュメント

Google Cloud Vision API ドキュメント  |  Google Cloud Vision API ドキュメント  |  Google Cloud

REST APIとgRPC APIの2系統存在していることに注意する。

プログラミング言語用のライブラリのドキュメントはまた独立している。

公式ドキュメントの翻訳は遅れているようなので原則的に英語のページをチェックする。

ページを下までスクロールすると左下に言語の切り替えメニューがある。

リリースノート(全体)

Release Notes  |  Cloud Vision API  |  Google Cloud

日本語の方は更新されていない。

データの扱いについて

データ使用に関するよくある質問  |  Google Cloud Vision API ドキュメント  |  Google Cloud

文字数制限

「TEXT_DETECTION」には"Character Limit"があるとのこと。日本語ドキュメントは「文字数の制限」という訳になっている。

一方、「"premium" DOCUMENT_TEXT_DETECTION」には制限がないと記載されている。文字数なのか、文字種なのかちょっと疑問。

"premium"とは一体?

ドキュメントのページからフィードバックは送ったけど不明なまま。

認識できる文字・できない文字

情報なし。

日本のセールスチームに問い合わせてみたが、公開されている情報がすべてという回答。

対応画像形式とサイズ

PDFとTIFFは非同期APIを使う必要がある。

  • JPEG
  • PNG8
  • PNG24
  • GIF
  • Animated GIF (最初のフレームのみ)
  • BMP
  • WebP
  • RAW
  • ICO
  • PDF(非同期処理方式のみ)
  • TIFF(非同期処理方式のみ)

APIの使用料金など

プロダクトのページを下にするクロール。

cloud.google.com

そのほか

要望などはGoogle公式のトラッカーへ。

公開バグトラッカー:公開バグトラッカーを用いたバグ報告と機能リクエスト  |  サポート  |  Google Cloud

Stack Overflow

stackoverflow.com

Python関連

stackoverflow.com

権限管理

サービスアカウントの作成時のロール選択。

  • オーナー (roles/owner)
  • 編集者 (roles/editor)
  • 閲覧者 (roles/viewer)
  • 参照者 (roles/browser) ←beta機能

オーナーか編集者の権限があれば動作するはず。

「参照者」というロールは日本語のドキュメントには記載がない。 英語のドキュメントにはbetaという扱いで記載があるがよくわからない。

プロジェクト内部の階層構造やリソースのリストは参照できるが、プロジェクト内のリソースそのものへの読み取りアクセスはない?

Understanding Roles  |  Cloud Identity and Access Management Documentation  |  Google Cloud

まとめ

随時更新します(たぶん)。

Python とビルド済みのOpenCVバイナリパッケージ

ビルド済みのOpenCVバイナリパッケージについてメモ書き。 あくまでもPython向けにOpenCV 3.xをインストールする方法の1つです。

macOSPython本体を使う場合の一番ズボラな方式。

非力なマシンに最適。

背景

そもそもOpenCVソースコード自体にPython用のバインディングは含まれています。ただソースからビルドするか、OpenCVのバイナリをインストール後に必要なファイルを所定の場所にコピー((すればPythonからOpenCVを使用できます。

この場合の難点はOpenCVのビルド時に検出されたPythonバージョンでしか使用できないという問題があります。

環境によっては有効化されていないモジュールがある可能性がありますがそこまでは調査していません。あしからず。

前提

github.com

前提条件は次のとおり。

この記事を書いている時点で最新版は3.4.2.17。バージョン番号はOpenCVバージョンに対応します。

現時点でOpenCVの最新版は3.4.3。このライブラリ(というかビルド済みバイナリ)は3.4.2に対応しています。

PythonバージョンとCPUアーキテクチャ別のビルド済みパッケージというのがこの記事で紹介しているPythonモジュール。

あくまでも非公式パッケージです。

メリット

このパッケージのメリットは導入が楽な点。特に別途OpenCVのインストールが不要。

デメリット

デメリットはパッケージをインストールするたびにOpenCV一式をインストールするのでディスク容量を消費する点。

ある程度汎用的な環境向けにビルドされているのであまり最適化はされていない。新しいバージョンがリリースされてから若干のタイムラグがある点にも注意が必要です。

なお、インストールに成功したからと言って動作するとは限らず、追加で依存しているライブラリのインストールが必要な場合があります。

パッケージ名

本体のみとcontribあり、GUI関連機能(highuiモジュール)ありとなしで合計4つのパッケージがある。

以下の4つのパッケージのうちどれか1つを選んでインストールする。

本体のみ

headlessの方はGUI関連機能を無効にしたパッケージ。サーバー環境向け。

contribあり

opencv_contribリポジトリを組み合わせてビルドしたパッケージ。headlessについては本体のみのパッケージと同じ。

Linux環境でcontribつきのパッケージの利用は不要な機能のための依存パッケージをインストールする必要があるので逆に面倒な可能性があります。

インストール時の注意

環境によっては追加のパッケージをインストールする必要があります。エラーメッセージから該当のファイルを含むパッケージを特定してインストールします。

macOSの場合はHomebrewでopencvパッケージが依存しているパッケージ一式をインストールすればOpenCV本体は動くはずです。具体的にはbrew info opencvを実行しRequired:という行に列挙されているパッケージのうち、python本体以外をインストール*1

参考:Raspbian Liteでビルド済みのOpenCVパッケージを使うための依存パッケージいろいろ

具体例

Python 3.7、opencv-pythonバージョンは3.4.2.17。

作業ディレクトリを作成。contribにある二値化処理アルゴリズムを試したいのでopencv-contrib-pythonをインストール。

$ mkdir work
$ cd work

pyenvなどを使う場合はこのタイミングで使用するPythonバージョンに切り替え。

venvモジュールで仮想環境を作成して有効化。

$ python3 -m venv venv
$ source venv/bin/activate

この状態でpipコマンドはpip3コマンドへのリンクになっています。

contribありのパッケージをインストールします。

$ pip install opencv-contrib-python-headless

大抵の場合はNumPyとmatplotlibも使うのでついでにインストール。

$ pip install numpy matplotlib

まとめ

他のインストール手段でインストールされるモジュール類とのconflictに注意。

こういう記事が意外なところで役に立つと思っていたりします。まあ気休めですけど。

おしまい。

詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識

詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識

*1:まあ楽ができればそれが正義

広告