質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.45%

  • Python 3.x

    10337questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • 機械学習

    989questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

【Python】数字文字認識の正答率をあげるには

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 98

okusann

score 2

前提・実現したいこと

前提として
・インターネットから既存の手書きデータは取れない。
・手書きのみ
・キャンバスに描画した数字を画像⇨文字列に変換して学習モデルと比較
・scikit-learn で教師あり学習モデルを作成

現在キャンバス上に描画した数字を判定して予測結果を出力するプログラムを作成してしています。
この予測結果の正解率が40%ほどで90%にあげたいと考えています。

発生している問題・エラーメッセージ

### 該当のソースコード
g


コード

module.py
————————————
from tkinter import *
from PIL improt Image ,ImageGrab
import tkinter.filedialog as fd
import sklearn.svm import SVC
import numpy
class Drawing:
   #コンストラクタ
   def __init__(self):
      self.__window = self.__create_window()
   #画面を構成
   def __create_window(self):
      window = Tk()
      window.geometry(‘400x400’)
      window.tilte(‘数字判断アプリ’)
      self.__label = Label(text = ‘判断結果:?’)
      self.__label = Label.pack()
      self.__canvas = Canvas(width = 200, bg = ‘white’)
      self.__canvas.bind(‘<ButtonPress-1>’,self__.on_pressed)
      self.__canvas.bind(‘<B1-Motion>’,self.__on_dragged
      self.__canvas.pack()
      judge_button= Button(text =‘判定’, command = self.__judge_digit)
      judge_button.pack()
      clear_button = Button(text =‘消去’, command = self.__clear)
      return window

   #実行
   def run(self):
      self.__window.mainloop()
   #マウスを押す
   def __on_pressed(self,e):
      x = e.x
      y = e.y
      self.__canvas.create_oval(x-15,y-15,x+15,y+15,fill=‘black’
   #画像データを数値リストに変換
   def __convert_image(self,img):
      gray_image = img.convert(‘L’)
      gray_imgae = gray_image.resize((8,8),Image.ANTIALIAS)
      img_array = numpy.asarray(gray_image,dtype = float)
      img_array = numpy.floor(16-16*(img_array/256))
      img_array = img_array.flatten()
      return img_array
   #数字判定予測
   def __predict_digits(self,target_data):
      digits = ds.load_digits()
      learn_data = digits.data #学習データ
      result_data = digits.target #結果データ
      model =SVC(gamma = 0.001)
      model.fit(learn_data,result_data)
      n = model.predict([target_data])
      self.__label.config(text = ‘判定結果: ‘ +str(n[0]))
      print(n)
   #判定
   def __judge_digits(self):
      x1 = self.__window.winfo_riootx() + self.__canvas.winfo_x()
      y1 = self.__window.winfo_riooty() + self.__canvas.winfo_y()
      x2 = x1 + self.__canvas.winfo_width()
      y2 = y1 + self.__canvas.winfo_height()
      img = ImageGrap.grap()
      img = img.crop((x1,y1,x2,y2))
      target_data = self.__convert_image(img)
      self.__predict_digits(target_data)
   #消去
   def __clear(self):
      x1= 0
      y1= 0
      x2= x1 + self.__canvas.winfo_width()
      y2= y1 + self.__canvas.winfo_height()
      self.__canvas.create_rectangle(x1,y1,x2,y2,fill=‘white’,width=0)
self.__label.config(text=‘判定結果: ?’)
————————————
start_up.py
————————————
from module import Drawing
draw = Drawing()
draw.run()

試したこと

・学習モデルに使用する手書き数字画像(0〜9)を各70枚ほど用意
・画像を8×8ピクセルにリサイズ

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tiitoi

    2019/06/12 18:25

    質問の情報が少ないため、なにかアドバイスするのは困難です。
    学習データの画像、使用してるモデル、作ったコードといった情報が必要です。

    キャンセル

  • okusann

    2019/06/12 19:10

    ご回答ありがとうございます。
    ソースコードに着きましては、もう少々お待ちください。

    キャンセル

  • hayataka2049

    2019/06/13 09:12

    コードはマークダウン(<code>ボタンで挿入できる)を使って綺麗にしておいてください。できれば実行可能な状態にしておいてもらえると嬉しいです。

    キャンセル

回答 1

+1

https://qiita.com/yhyhyhjp/items/ebda34f46369b7d3ac8e

そんなに難しいことを考えなくても、単一の数字の認識はもっと精度がいいです

とりあえず、解像度を落としてみるとかでしょうか

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/12 19:55

    ご回答ありがとうございます。
    URL先の記事を確認しました。
    SVMの使用、ハイパーパラメータの設定をしてみようと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python 3.x

    10337questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • 機械学習

    989questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。