自作プログラムで自分で書いた任意の手書き数字認識を試みました。ほとんどの手書き数字では認識がうまくできていたものの、学習が遅く、あまり精度は良いとは言えませんでした。そこで、本記事では既存の優秀な機械学習フレームワーク「Keras(ケラス)」を使って性能の良いネットワークを作成します。使いやすいように「Kivy(キビー)」というフレームワークを用いてGUIアプリケーション化しようと思います。最終的に作れるアプリケーションこの記事を読んで最終的に完成するのは、「手書きで数字を書くと、その数字を認識するというアプリ」です。最終的に作れるアプリケーション】それでは、作成していきましょう!準備するものまずは、環境整備です。以上のフレームワークがまだインストールされていなければ、次に紹介する方法でインストールしてください。インストール済みの方は、読み飛ばしてください。インストールされているか確認する方法は、ご存知のコレですね。listKeras(ケラス)のインストールKerasは、機械学習の有名なフレームワークの一つで、「Tensorflow(テンソルフロー)」などの有名な機械学習フレームワークを扱いやすく、シンプルにコードが書けるようになっています。インストール方法Kerasは、Tensorflowに依存しているので、Tensorflowもインストールしておきましょう。最新のものにしておきましょう。kerasKivy(キビー)のインストールKivyは、GUIフレームワークの一つで、オープンソースで開発されています。扱いやすく、さまざまなOSで動作するためKivyを使うことにしました。Kivyは、Pythonファイルの他に「*.kv」ファイルで簡単にGUIをデザインすることができます。インストールできます。kivyこれで、もし動かなかったら、追加で以下のモジュールもインストールしてください。pygamePillow(PIL)のインストールPillowは、とても使い勝手が良い画像処理系のモジュールです。これも先のモジュールと同じようにインストールできます。pillowいざ開発!それでは、お楽しみの開発に移ります。開発の流れとしては、以下の通りです。」を実装コードとともに解説していきますが、冗長になるため一行ずつ全て解説することはせず、重要な部分を中心に解説をしていきますのでご了承ください。(GUI)部分についてまずは、キャンバス機能とペイント機能を作ります。いう2つのファイルを作って、これらにKivyを用いたGUIを管理するコードを書いていきます。ここで、「*.kv」の名前は重要になってくるので、必ず同じ名前にしてください。コードとりあえず、コードは以下のようになります。実行してみてください。黒いキャンパスに白い線で文字や数字が書けると思います。「Clear」でキャンパスがリセットできることも確認できます。この時点で「Predict」は未実装なので押してもなにも起こりません。*.pyと*.kvそれでは、コードを簡単に解説していきます。「この2種類のファイルの関係」について説明します。「MyPaint.kv」でボタンのデザインを作っていることは、コードを見るとなんとなく理解できると思います。肝心の「main.py」では、「MyPaint.kv」を参照しているらしきコードは見つかりません。名前から勝手に参照してくれる機能があるからです。いうクラスが定義されているので、Kivyが勝手に「MyPaint.kv」を探し参照してくれています。そのため、Kivyでは、「ファイル名が重要」なのです。キャンバスレイアウトウィンドウとキャンバスのレイアウトは、主にKivy.ConfigというモジュールとWindowモジュールで行われています。ウィンドウサイズ以下のコード冒頭で、ウィンドウサイズを決めています。以下コードのmain関数でコメントしてあるように、ウィンドウの背景色を指定してます。ウィンドウの色を黒色に変更するキャンバス全体の管理ちなみにキャンバス全体の管理は、以下コードで行なっており、ここではキャンバスを初期化する関数だけ定義しておきます。いうクラスが担っています。持つべき機能としては「クリックしてドラッグしたら線を引く」ことです。線の太さこのクラスでは、それに必要な「線の色」「線の太さ」をメンバ変数として保持しています。get_color_from_hex('#ffffff')そして、マウスクリックダウン時とマウスドラッグ時の機能を以下の関数で実現しています。touch.y]やっていることは、取得した座標に線を追加しているだけです。キャンバスをクリアした時に色情報を再度セットするための関数があって、ペイント機能は完成です。set_color(self):self.canvas.add(Color(*self.color))ボタン類ボタン類はすべて「MyPaint.kv」が担っています。どのウィジェットに配置したいかを指定し、その中に(Pythonと同じようにインデントを下げて)ボタン類を記述していきます。中に記述していきます。レイアウトの調整が可能です。上下に分割したいので、以下のように記述します。'vertical'さらに今回は、ボタンを2つ配置するので、下部のブロックを左右に1:1で分割します。左右の分割は、以下のように指定します。今回は、0.8と0.1にしました。関数を指定してあげます。」を実装したところで終わりにしたいと思います。後編では、Kerasで「機械学習部」を実装していき、アプリを完成させたいと思っております。社長と一杯飲みながらお話してみたい方はこちらミツオカフリーランスエンジニア様の募集はこちらにゃんこ師匠その他、お問い合わせはこちらミツオカお気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!一緒に働いてくれる仲間を募集しております!ライトコードでは、仲間を募集しております!当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。「好きなことを仕事にするエンジニア集団」の(株)ライトコードのメディア編集部が書いている記事です。rightcodeエンジニア大募集中!私たちライトコードでは、エンジニアを募集しております。私服大歓迎のカジュアルな職場なので、お気軽にご応募ください!また、フリーエンジニアの方も募集しております。