ココロミにきみ

本と体とプログラミング

本 アジア辺境論

「アジア辺境論」内田樹さん、姜尚中さんの対談。

たとえば隣の家の人と仲が悪いとか、同僚で嫌いな人がいるとかよくある。隣の落ち葉が自分の庭に入ってきたとか、挨拶してこないとか。いったん嫌いなったあとは、その感情の維持が大事になって、理由を後付けで探してきたりする。

それが他人だと、そんなことで機嫌悪くしててもしょうがないでしょ?って思ったり言ったりするけど、自分が当事者だと仲良くするの絶対無理っとか思うわけで。

視点を変えて、自分が地域おこしのメンバーや、会社全体の利益を考える人だったら、「仲が悪い隣人同士や、嫌い合う同僚同士がいること」をどうしたいか。

地域として、会社としてパフォーマンスを上げたいなら、反目しあうことにエネルギーを無駄に使ってマイナス状態にさえなってるのをナントカしたいんじゃないか?

それが国単位でも。それがこの本になる。

ここらはスピンオフ的に考えたこと。

「誰かを嫌いでいること」は、自分個人のパフォーマンスも2つ大きく下げることに気づいた。

一つは、他に使うべきだったエネルギーが「嫌いでいること」無駄に使われているということ。有限のエネルギーをそんなことに使う暇あるのか自分!?

一つは、「嫌いでいること」というのは「自分の心の一部を固定」してしまい、生産性を下げたり、成長を邪魔しているということ。たとえば怪我(=固定)してる時って、そこを庇う無駄な動きになってたり、気が散って集中力が減るのと同じで。

・・・そう考えると「嫌いでいること」は自分個人にも、自分を含む社会にとっても何もいいことはないなと思う。

*  *  *  *  * 

ただ、そんな簡単なことみんな実感として知ってるのに、なぜ「嫌い続けるか」って言ったら、そのほうが「その瞬間は楽」なんだよね。

本 人生の旅をゆく

「人生の旅をゆく」吉本ばななさん著。

ばななさんのエッセイはうまい。その世界観の受け止め方はそれぞれだと思うけど、2〜3ページのエッセイで、その世界にトリップさせる技術はなんなんだろう。

個人的にはその、この世とあの世があわいで繋がっているような世界観にも共感している。そこら辺が合わない人でも、ちゃんと人と人が向き合うことができたときの幸せを信じられるかどうか、というのが共感の分かれ目なのかもしれない。

ばななさんのメッセージって、突き詰めると「その場その時に真剣に生き切ること」に集約されるんじゃないかと。

その実践がばななさんの人生であり、そうやって生きている人には、同じように生き切っている人たちが関わってくる。その姿がとてもうらやましい。それを切り取った本がこれ。 

人生の旅をゆく 3

人生の旅をゆく 3

 

 話はずれるけど、小説のばななさんの話では、いつも「生き方にはもっと選択肢がある」と教えてもらっている気がする。それを選んでもいいし、選ばなくてもいい。ただ、知らないうちに少しずつ、その生き方が入ってきているかもしれない。

さらに話がずれると、村上春樹さんの小説を読むと、泳ぎ方の矯正をされるように、感覚的に生き方を整えられる気がする。この距離感の違いも面白い。

* * * * 

自分の人生の指針となる人が同時代に生きて考えて、それをリアルタイムで追っていけることは幸せだと思う。

本 TEDトーク

「TEDトーク 世界最高のプレゼン術」

 いや別にTEDに出ないけどさ(出れないけど)。話を聞いてくれる人が一番集中するのは、最初の10〜20秒だと。(そこで心を掴めないと・・・。)そのつかみは引用や他人事じゃなくて自分の経験を語れと。できれば最近、直前に起きたことだとサイコウ。ただし、その話は全体のテーマにつながることが条件。

どんな時も笑わせれたら宝。ただし、それがジョークだったり、面白い話だったとしても、それすら一番いいたいメッセージにつながってないとダメなんだって。

TEDトーク 世界最高のプレゼン術

TEDトーク 世界最高のプレゼン術

 

つまりは、舞台上で起こることのすべては、「一つのメッセージ」を伝えるために存在するって考える。おそらく自分ですらその目的のためのシモベ。

話の中のヒーローはそのメッセージに関わる、自分を変えてくれた”誰か”に譲る。 その偉大な他人がヒーローになることで、”誰にでも起こりうる身近な話”になる。ヒーローではない自分は失敗する。その失敗をいっぱい語ることで、うんうんと頷いてもらえる。

 その共感は気持ちだけじゃなくて五感まで広がるように、ストーリーをいろいろな感覚から語る。さらに主体的に聴くことに参加してもらうためには、一緒に考えてもらわないといけない。

だから最初に「なぜそのアイデアが必要のなのか・大事なのか?」を語る。その前提を共有してもらって、同じ視点で世の中を見て初めて、何をするか・したかの具体を語る。この順番。

*  *   *  *   *  *   * * 

自分にとって自明のメッセージを語る方法論として一つの最高峰だと思う。これはこれとして身に付けたい。

同時に、方法論になるかどうかわからないけど、その時その場にきちんと存在することによってのみ起こりうる、その場で産まれる(かもしれない)考えやアイデアの生成を語っていく、という手法は形にならないんだろうか。

 

数字・文字の存在場所判別>AI前処理

AIで答案の自動採点にトライする過程で、それが人間の「認識」のあり方を考え直すことになり面白いので、思考過程とともに残しておく。

 * * *

以前、まだ赤ちゃんレベルの”AI”が食べやすいように、画像データ(食べ物)をちょうどいいサイズに切り取ってAIのお口に持っていく作業をしている、という話をした。

(手書き数字認識の機械学習を通じて学んだこと)

今度は、そのさらに一つ手前の処理が問題になり、解決策が1つできて、課題が1つできたのでそのロジックを記す。

【自動採点プロセス】

  1. テストの解答済用紙を多量にスキャン(スキャナーが活躍!)
  2. 解答画像から答えが書かれてる場所を探し出して正方形に切り取る(今回の話)
  3. 正方形画像内の無駄な余白を切り取って、読みやすくする(前回のお話)
  4. AIが正方形画像を見て「この解答は99%の確率で”3”っ!」と当ててもらう
  5. AIによる解答の認識結果と、正解を照らし合せて点数を出す(エクセルなど)

のうち、2が今回のお話。

 * * *

たとえば解答欄はたいてい横長で、そこに数字や文字を書いたときに、ノイズも含めて解答欄のどこに答えが書かれているか?の判別は意外に難しい。プログラムで処理を行う以上、プログラムでその方法論が書けなければいけない。

f:id:molingit:20171009231934j:plain

実際はこれを以下のように行列の形にして扱う。

f:id:molingit:20171009231952j:plain

いろいろ手段はあると思うんだけど、結論から言うと「重さ」と「中央値」のセットで行う。行列にする際、画像の白い部分を0、字やノイズを1とすると、なにかしら線がある部分は数字が入り、”重さ”があると言える。その重さがある列の番号を記録しておき、その番号セットの中央値付近に数字や文字の重心があるだろうと。

f:id:molingit:20171009231941j:plain

f:id:molingit:20171009231945j:plain

その重心から適当な距離で正方形に区切ったら、数字や文字のみを含む画像ができる。この方法のいいところはノイズが大きくなり過ぎない限り、ノイズの存在を全く無視して数字や文字だけを捉えられること。(って、やってきてけど、重み重心を取ったほうがいいような気がしてきた・・・)

* * *

話はとんで、これって人間が数字や文字を認識しているプロセスかと。いくつかの文字らしきもの(含む:ノイズ)の集まりを見て、まず、大きな母集団を持つ ” 線の塊 ”  の1つに注目する(重みの中央値を探す)。そして、その重みの中央値からちょっと半径を広げた円に視界を広げて、そこに映る画像を切り取り、数字や文字として変換される。

ってことを考えていたら、自分は一つの文字のなかで、中心より若干左に重心を感じているらしいことが分かった。おそらく自分が書く字は重心が少し左寄りになっているんだろうと思う。逆に字のバランスのいい人は一文字のなかで感じる重心の位置が違うのかもしれない。とすると、字の指導は重心の位置感覚の指導から始めるべきことかもしれない。

* * *

話を数字・文字認識に戻すと、当然解答は一文字であるこのほうが珍しくて、2文字以上が当たり前なわけで、二つ以上重心があるやつはどうすんじゃ!?と考えたら、すでに「クラスタリング」という複数の重心を弾き出す機械学習(≒AI)の手法がある。

ってか、一文字でもこれ使えるじゃん・・・。

 

本 考えの整頓

「考えの整頓」佐藤雅彦さん著

 この本を読んで気づいたのは、自分はアーティストの言葉や振る舞いにしか興味がない、ということだった。

著者の定義によるとアートとは「なぜ生きるか?」ということ自体から考えることで、比較してデザインとは「よりよく生きるための方法」を考えることだと。

この本は雑誌「暮しの手帖」に連載されていたものをまとめたもので、佐藤さんも最初は生活の役に立つ連載にしようと考えていたのだけど、結局そうはならなかった。

考えの整頓

考えの整頓

 

たとえば幼児が言葉を覚えるプロセスを観察していて、

それにしても、幼児はほとんどと言っていい位、2回繰り返して、覚えたての言葉を発するのだが、どうしてだろうか。(本文より)

というような話を書いている。 ・・・暮らしの役には立たない(笑)でも、言われてみるとたしかに2回ずつ発音しているイメージがある。勝手な推測だが、1回目の言葉は発音という運動機能への挑戦であり主体的な意識であり、2回目の言葉は主に聴覚機能への挑戦であり受動的な意識なんじゃないかと。与えるのが先で、もらうのは後。何かにつながりそうなんだが・・・。

閑話休題

佐藤さんはこんな感じで自分の気づいたことを、心の動きまで書いて解きほぐしていく。その作法自体がまさにアートで、その作法を学ぶこと自体が生活を豊かにしてくれると言っていいんじゃないかと。

 

本 Graphic Recorder

今週のお題「読書の秋」

「Graphic Recorder」清水淳子さん著。

会議の記録を、絵やイラストと共に作っていくGraphic Recorderのススメ。

相手と話していることのイメージを共有するために、紙に意見を書き込んでいって、グルーピングして、時系列を矢印で書いて・・・みたいなことをやっていたら、それが本格的に技法として使われていることをこの本で知った。

正直、読んでも”体系”というより”紹介”という感じだが、始めるのにきっかけが欲しいという人には向いていると思う。それか、ある程度実践したあと、もう一度見ると整理されるのかもしれない。

Graphic Recorder ―議論を可視化するグラフィックレコーディングの教科書

Graphic Recorder ―議論を可視化するグラフィックレコーディングの教科書

 

実際、文字にイラストを添えたり、関係性を矢印や絵で描いた記録は、パッと見で理解できる。記憶を紙に任せられるので、現在進行形のポイントだけを頭の中に置くことができて、考えの整理がその場でとてもしやすい。だから、みんなが発言しやすくなるのはあると思う。

個人的には講演でも何でもメモを取る習慣が染み付いていて、記憶はすべてノートに任せて頭の中は考えることのみに使うというのが癖になっている。逆にメモを取らなかった時代は、どれだけ頭を考えることに使えてたのか不安・・・。

 * * *

しかし、Graphic Recordingが良い事づくめあるならば、何でいままで、このやり方はメジャーにならなかったんだろう。記録は新人がやるものって会社が多くて、そんな改革が生まれる余地がなかったんだろうか。それとも会議は議論する場じゃない所が多かったから不要だったとか。。。

スキャン書類の傾き・回転修正ロジック

同一の多量の書類のスキャンにおいて、縦横にズレたり、回転した場合に自動的に正しい位置に戻すためのロジックを実際に作ったら上手くいった(当たり前だ)。Pythonで実装したがコードは書かずロジックだけ書く。

 

仕事で、AIで同一書類の数字(さらには文字)を読み取る際に、スキャンデータの位置ズレが普通に発生し、読み取り時のノイズが発生するのを防ぐのが目的だった。

f:id:molingit:20171002113252j:plain

↑こんな感じに修正される。

 

* * * * * * * * * * * * * * * * * * * * 

 

早速修正のロジックだが、スキャン時のズレには「横ズレ・縦ズレ・回転ズレ」があり、たいがいは複合のズレになっている。縦・横ズレの修正のほうが簡単だが、実はこれを先にやると二度手間になるので、実際の手順は

1.回転ズレ修正

2.縦横ズレ修正

で行う。説明は縦横ズレから行う。

f:id:molingit:20171002113257j:plain

こんな感じで普通にスキャン画像はずれる。なので、書類の枠組みを変更できる場合は目立たない程度に+記号などを枠外りに作り、その座標のズレを読み取ることで位置を修正する。変更できなければ書類の枠線などを使用する(と、できるんじゃないかな)

f:id:molingit:20171002113320j:plain

Pythonではcv2で読み取ってnumpyで行列にして、3cm角くらいの大きさで画像を切り取り、その中の+記号の中心をその座標とした。中心を見つけるには、切り取った3cm角の画像を行列にした際に、各行列の値0−255の中である閾値を超えたものの行列の座標を合計し、その平均を取った(実使用ではノイズがのる可能性がある)。

そして、理想の+座標と、実際の+座標のズレを引き算して、その分だけ行列全体をズラせばいい。理屈は簡単だけど落とし穴もある。

理想の+座標が意外に決まらなかったりする。元データがあるなら、それをPDFやJPGにパソコン上で変換して読みこめばいいと思いきや、その理想座標はスキャンで一番上手くいったデータとは全然違った。。。

* * * * * * * * * * * * * * * * * * * * 

さて回転修正。こっちのほうが数学的にめんどい。

f:id:molingit:20171002113302j:plain

こーゆーズレはけっこう頻繁におこる。ただし回転が5度を超えるようなズレは滅多に起こらないというか、そんなものはもう一度スキャンしてもらうほうがいいので、想定は2、3度のズレまで。(大きなズレは修正するための、指標の+が「読み取り3cm角」から外れてしまうので対応不可)

f:id:molingit:20171002113312j:plain

最初に説明した縦横ズレの際の、+記号を読み取るところまで同じで、今度は図にあるように、2つの+の座標をベクトルにする。

例えばB5用紙で、+記号を「上・真ん中」につけて、

・理想データ「上=O、真ん中=A 」

・スキャンデータ「上=O、 真ん中=B」

とすると、

 理想のスキャン時のOAベクトル=(1700,0)

 実際のスキャン時のOBベクトル=(1723,23)

みたいな値になる。単位はよくわからない。でそのベクトルがなす角θをアークサインと外積で求めることができる。アークコサインはオススメしない。

f:id:molingit:20171002113307j:plain

で、求めたこのθはラジアン表示なので、度数に直してscipyで回転させる。どうもこの処理が大変らしいので(けっこう時間がかかる)θが0.1(0.05くらい?)以下だったら回転修正させないというのもありかもしれない。

数字のイメージとして0.1は小さいけど、画像の回転としてはけっこう大きいので、B5サイズなら人間の目からしても0.1度は完全に回転ズレとして認識されてしまう(から外野が云々・・・)。あとはAIで読み取るさいにノイズがどの程度のるかで、無視すべき回転角度を実際の使用のなかで変えていく必要がある。

 

* * * * * * * * * * * * * * * * * * * * 

 

このように実際には回転修正をして、その後、縦横ズレ修正を行うと、最初に示した理想の位置にスキャン画像が整列してけっこううれしい。

ただ、実際にここに書いてあるようなことをやる人はその前に、PDFをJPGに直すところでも悩む気がする。僕は悩んだというか、ライブラリのバージョン対応などで時間をとても取られた。

まぁこれで、AIによる数字認識につなげて自動読み取りが本格的に動かせる状態になるので、ハッピーではある。みなさまの成功を祈りつつ。