The Fool In The Valleyの雑記帳

-- 好奇心いっぱいのおじいちゃんが綴るよしなし事 --

数独でPythonを1

2年前、数独の問題をカメラで撮影して自動的に解くプログラムをJava-OpenCVで作りました。それは

  1.  Webカメラでカラー画像を取り込む
  2.  白黒二値化、反転して膨張処理
  3.  輪郭抽出して四角形で近似し、コーナー座標を抽出
  4.  透視変換して文字認識用のイメージ生成
  5.  文字認識して問題を確定
  6.  数独問題を解く

のステップで処理を進めるもので、下のビデオはその実行の様子です。

www.youtube.com

先週、難問だとする数独の問題に出くわしたので久々にそのプログラムで解かせてみようとすると、環境が崩れていて実行できないのです。趣味でやっていることで、誰かに迷惑がかかるわけでもありませんが、ちょっとがっかりしてしまいました。プロジェクトが完成したらそれで満足して成果をきちんと管理していなかったのがまずかったのです。ソースコードはあるので、もう一度実行環境を構築し直せばいいのですが、これはむしろPythonで作り直すいい機会になったんじゃないか、そうせよというお告げじゃないか(笑)という気が起こってきました。

下のビデオは人気のあるプログラミング言語の推移を見せてくれますが、それを見るとPythonは2018年にはJavaを抜いて最も人気のあるプログラミング言語になったとされています。

www.youtube.com

1位ではないにしても、現在人気のあるプログラミング言語であることは間違いなく、多くの人がPythonに”改宗している”という記事も見ます。使う人が増えることによってツールやライブラリが充実し、それによってまた使う人が増えるという好循環ができているようです。AIまわりはもうPythonが前提になっているような感があります。そういう状況なので、Pythonで画像処理ができるようになっておけば今後の人生を楽しくしてくれそうです。

Pythonについては、これまで本で勉強したり、edXのコース

www.edx.org

を受講したりはしているのですが、小さなサンプル・プログラムを書いたことしかなく、ましてや画像処理のような高度な問題を扱うのに使ったことがないので、身についていません。プログラミング言語は、①明確な目標があり、②どうしてもそれを達成したいという動機づけとともに、③達成しなければならないプレッシャーがあって、④そうした状況下である程度のサイズのコーディングをすることによって使いこなせるようになる、というのがこれまで経験してきたことです。

そこで、①②「数独の画像をカメラで撮影して自動的に解くプログラムPythonで作る(作りたい)」という明確な目標で動機づけし、③ここでそれを宣言して後に引けない状態にして、④Javaで作ったちょっと大きなサイズのプログラムをPythonに移植する作業を通してPythonを勉強することにしました。

そういうわけで、ブログのテーマは「数独Pythonを」です。Python数独を解こう、ということではなくて、数独を使ってPythonを使えるようになろう、ということです。そういうテーマで書き綴ることにすれば途中で放り出さずに最後まで続きそうです。それと成果物の管理もきちんとすることになりそうです。
そうは言っても、前期高齢者の仲間入りをして、集中力が落ちているうえに、ディスプレイの開発環境の小さな文字を見るのが辛くなってきているおじいさんのやることなので、時間はかかりそうです。まあ、それもよしということで。

 

f:id:tfitv:20200724092249j:plain