RのWeb制作

Webサービス制作のための技術情報を。データ分析(Python、機械学習コンペ他)や自作野球ゲームMeisyoのこと中心。

Web制作 Python

手書き数字診断士(機械学習)を作り始めました

投稿日:

Python(Flask)+機械学習の勉強がてら、「手書き数字診断士」を作っています。

元ネタは2chの中小企業診断士です。
「う~ん、これは中小企業!w」

やること

1・index.html
 1. canvasに手書きで文字を書けるようにする(280×280)
 2. canvasを送信できる
 3. save.htmlで保存した間違いを殿堂入りとして表示
2・result.html
 1. canvasのデータを画像で受け取って配列データ化(280×280)
 2. MNISTの28×28に変換(Max-Pooling?)
 3. 判断→「う~ん、これは0!w」
 4. 正解かどうかチェックしてもらう or 間違えたら正解と名前を保存(save.htmlへ)
3・save.html
 1. 間違えた画像データを保管。

2’・機械学習
 1. mnistを使って予め学習。(何個かモデルを用意しとく)

できたこと

1-1まで終わった。
コード詳細は下記「現在のコード」にて。

できていないこと

1-2 canvasを送信できる、が厄介。
・canvasを画像データにすること
・Flaskでのformのやり取りが不明(wtformとは)
 → 使わなければいいじゃん・・・

解決策たち

他の人のコード見て動かすしかないですね。
・https://deep-ize.jp/hcr/
・https://icondecotter.jp/blog/2013/01/31/canvas-todataurl%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E4%BD%BF%E3%81%86/
・https://qiita.com/0829/items/a8c98c8f53b2e821ac94
・https://www.google.co.jp/search?q=canvas.toDataURL()&oq=canvas.toDataURL()&aqs=chrome..69i57j69i61&sourceid=chrome&ie=UTF-8

現在のコード

<html>
<head>
<meta charset='utf-8'>
<title>手書き数字診断士「う~ん、これは0!w」</title>
</head>
<body>
<h1>手書き数字診断士</h1>
<form method="POST">
<input type=submit value="診断!"><br />
<a href="./test.html">もう一度行う</a><br />
<input type=hidden name=text value="10">
<p id="comment">「・・・」</p>
<canvas id="canvas" name="canvas" width="280" height="280" style="border: 1px solid #eee;"></canvas><br>
</form>
<script type="text/javascript">
<!--
  // https://kigiroku.com/frontend/canvas_draw.html
	var drawing = false;
	// 前回の座標を記録する(初期値:0)
	var before_x = 0;
	var before_y = 0;

	var canvas = document.getElementById('canvas');
	var ctx = canvas.getContext('2d');

	canvas.addEventListener('mousemove', draw_canvas);
	// マウスをクリックしてる時
	canvas.addEventListener('mousedown', function(e) {
		drawing = true;
		var rect = e.target.getBoundingClientRect();
		before_x = e.clientX - rect.left;
		before_y = e.clientY - rect.top;
	});
	// マウスをクリックしてない時
	canvas.addEventListener('mouseup', function() {
		drawing = false;
	});

// 描画の処理
function draw_canvas(e) {
	// drawingがtrueじゃなかったら返す
	if (!drawing){
		return
	};
	var rect = e.target.getBoundingClientRect();
	var x = e.clientX - rect.left;
	var y = e.clientY - rect.top;

	// 描画
	ctx.lineCap = 'round';
  ctx.strokeStyle = 'black';
	ctx.lineWidth = 10;
	ctx.beginPath();
	ctx.moveTo(before_x, before_y);
	ctx.lineTo(x, y);
	ctx.stroke();
	ctx.closePath();
	// 描画最後の座標を前回の座標に代入する
	before_x = x;
	before_y = y;
}
//-->
</script>
</body>
</html>

-Web制作, Python

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

PHPのコーディング規則、PSRを学ぶ(2)

PHPのコーディング規則、PSRを学ぶ(1)の続きです。 今回は基本中の基本、文字コードと改行コードを設定します。 自宅サーバーで試します。(自宅サーバーの作り方はこちら) そのための基本設定も行いま …

Pandas DataFrameでの表示列・行をすべて表示する(表示制限を解除する)

Jupyter NotebookでPandasのDataFrameを表示する際、行数・列数が多すぎると省略されてしまう場合があります。 制限を解除しましょう。 pd.set_option(‘displ …

[Meisyo]投手交代アルゴリズムの変更

要望 投手起用と代打について現状自分は投手起用をこんな感じにしていて 代打は6回以降にしたいのですが投手の数の関係で9回以降に代打を起用された場合に野手が登板することになり困っています。代打起用を何回 …

Meisyo作者がサービスを作るにあたっての考え方

私は、以下の考え方に違和感を覚えている。 いかにそのサービスに、ゲームに集中、執着させるか。 ゲームであれば、毎日何時間も時間を使わせて、注目させて、お金を支払うように仕向けるべきである。 無課金ユー …

【教材紹介】前処理大全

前処理はデータ分析で重要な事項です。なぜなら、有用な特徴情報を上手く抽出できていなければどんなモデルであれ無用の長物です。ただ、前処理は体系だった学問としては存在せず、実務の中で学んでいくことが多いた …