Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Python@AWS LambdaとDjangoを使ってアスキーアート自動生成Webアプリを作...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Takahiro Yano
April 24, 2017
Programming
2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Python@AWS LambdaとDjangoを使ってアスキーアート自動生成Webアプリを作ってみた
アスキーアート自動生成Webアプリはこちら
http://asciiart.me/
Takahiro Yano
April 24, 2017
More Decks by Takahiro Yano
See All by Takahiro Yano
第3回 ゼロから作るオトナのDeep Learning
yano_123
0
420
第2回 ゼロから作るオトナのDeep Learning
yano_123
0
1.2k
第1回 ゼロから作るオトナのDeep Learning
yano_123
0
350
Differentiable Neural Computers 文献読み会
yano_123
3
1.2k
Other Decks in Programming
See All in Programming
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.2k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
270
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
11
6k
A2UI という光を覗いてみる
satohjohn
1
140
Agentic UI
manfredsteyer
PRO
0
180
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
160
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
720
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
5.7k
1B+ /day規模のログを管理する技術
broadleaf
0
100
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
870
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
890
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.4k
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
740
We Have a Design System, Now What?
morganepeng
55
8.2k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
Designing for Performance
lara
611
70k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
870
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
Building the Perfect Custom Keyboard
takai
2
800
Raft: Consensus for Rubyists
vanstee
141
7.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
400
First, design no harm
axbom
PRO
2
1.2k
Transcript
Python@AWS Lambdaと Djangoを使ってアスキーアート 自動生成Webアプリを作ってみた PyCon mini Kumamoto 2017/04/23 矢野高宏
はじめに • PyConに向けて作ってみたサイト asciiart.me に ついて喋ります • 初心者向けの発表です アスキーアートの自動生成
アジェンダ • 自己紹介 • AWS上での開発 • アスキーアート(AA)自動生成 • Pythonコーディングで大事だなと思ったところ •
Djangoのこと • AWS Lambdaのこと
お前誰よ • 矢野高宏 • プログラマー • 画像処理、画像認識 • 最近、自然言語処理 •
DeepLearning • ゲーム制作@Unity3d • ウェブアプリ作成(勉強中) • Python歴2年くらい
作ろうと思った動機 • 5年前にC#で作ったAA自動生成ソフトをいつか Webアプリ化したかった • PyConあるしネタとしてAWS Lambda@Python への移植を決意 – コードがめちゃくちゃ短くなった(400行くらい)
– AWS Lambdaでマルチスレッドが使えなくなったので処 理時間は増えた(1分程度なのでOK)
京アニ • 京アニも注目するPythonとアスキーアート 「小林さんちのメイドラゴン」より
アジェンダ • 自己紹介 • AWS上での開発 • アスキーアート(AA)自動生成 • Pythonコーディングで大事だなと思ったところ •
Djangoのこと • AWS Lambdaのこと
AWSの構成 AA作りたい人
AWSの構成 djangoのForm経由で S3に画像アップロード アップロード と同時に Lamda起動 AA化処理後の HTMLを 静的ホスティング しているS3へ保存
AA作りたい人
AWSの構成 AA作りたい人 5分後にCutyCaptで AAのキャプチャ画像取得 djangoのForm経由で S3に画像アップロード アップロード と同時に Lamda起動 AA化処理後の
HTMLを 静的ホスティング しているS3へ保存
AA見たい人 AngularJSで REST Frameworkに S3のリソースのアドレス 問い合わせ、表示 Djangoで Webホスティング
一通り体験できて満足 • Django – Webホスティング – REST Framework – AngularJS連携
• AWS Lambda • S3静的ホスティング • Javascript – AngularJS/Bootstrap/Masonry/Infinite Scroll
開発環境 PyCharm(コード編集に) ssh workspace (EC2システム管理に) ssh同期 (たくさんのファイルは同期できない。 プロジェクト内のコードのみ) AWS マネジメントコンソール
S3 lamba
アジェンダ • 自己紹介 • AWS上での開発 • アスキーアート(AA)自動生成 • Pythonコーディングで大事だなと思ったところ •
Djangoのこと • AWS Lambdaのこと
アスキーアート(AA)って? • 文字で絵を描いていくアート • ルール – フォントはMS Pゴシックまたは モナーフォント –
フォントサイズ16ポイント、高 さ18pixel – 文字幅は3ピクセル~16ピク セルまで様々 – 半角スペース連続で使えない – バックスラッシュ使えない
None
• 文字をラスタ画像化 – 画像として取り扱う あ →
AA自動生成のアプローチ(1) 線画化 画像化した文字と 線画化した画像間で 似ているかを調べる あ ラスタ画像化
AA自動生成のアプローチ(2) • AAを1行ごとの最短経路探索問題ととらえる – AA一行の書き方の解空間をグラフ構造で表す – グラフ構造ができたらダイクストラ法で解く • ダイクストラ法は最短経路探索が可能 スタート
ゴール
AAの解空間のグラフ構造化 • 画像を短冊状に切る • AA一行の書き方の解空間をグラフ構造で表す • ノード数は「画像の位置」×「文字の種類」 • コスト(エッジ)は線画化した画像と画像化した文字間で Mean
Squared Errorを算出したもの ... ... ... スタートノード (画像の左端) ゴールノード (画像の左端) ... ... ... あ v / A
これでAA1行のノード・エッジのグラフ構造ができる v あ v v あ あ … 全文字分 全文字
とのリンク 1画素ずつ ずらして文字を配置。 (文字がエッジになる) 画像と比較(コスト) v v / あ A … 全文字分 詳しく書くと 全文字 とのリンク
ダイクストラ法で解く • ノード・エッジのグラフ構造ができ たらそれをダイクストラ法で解く • スタートノードからゴールノードま での最短経路を見つけるための 古典的アルゴリズム • 内部的にどう最短経路を見つけ
るかは割愛 • ノードとノード間のコスト(エッジ) が定義できれば解ける スタート ゴール
githubにコードある • 詳しくはgithubにコードある – https://github.com/ya-no/asciiart.me • 画像を食わせるとHTMLが出力されるPython プログラム
アジェンダ • 自己紹介 • AWS上での開発 • アスキーアート(AA)自動生成 • Pythonコーディングで大事だなと思ったところ •
Djangoのこと • AWS Lambdaのこと
文字列はUnicodeに変換 • Python2の話(AWS LambdaはPython2) • 文字コードはテキスト処理のはまりどころ • 外部から文字列を読み込んだら python内部では unicode
で取り扱う – Unicode以外はバイト列として扱われる
Python高速化(numpy) • 行列演算できるところでfor文はダメ絶対 – 例)numpyのMean Squared Error計算 – 行列演算を使うと5~10倍速くなった 一緒だね
for文 行列演算
Matlab • だいぶんオワ(ry – 個人の感想です • まだまだ必要なことがある! – 海外アカデミックのデモコード 実行
• ホームエディションで個人で も扱える – 本体15000円、ツールボ ックス5000円 安い! – 家で趣味で動かすのに どうぞ
None
アジェンダ • 自己紹介 • AWS上での開発 • アスキーアート(AA)自動生成 • Pythonコーディングで大事だなと思ったところ •
Djangoのこと • AWS Lambdaのこと
django+angularJSの共存 • angularJS側で対応 – $interpolateProviderを使う • django側で対応 – djangoのverbatimタグでdjangoのテンプレートエンジン 処理を無効にする
django+angularJSの共存方針 • djangoに任せる – DB、ルーティング、テンプレート、認証関係、 REST API • angularJSに任せる –
テンプレート内の細かいViewとビジネスロジック
djangoの勉強 • CodingForEntrepreneurs.com – Djangoの動画学習サイト – 無料でもdjangoの基礎講座は全部見れるのでオススメ – サブスクリプションするとみたい動画が全部ダウンロード できるので短期間サブスクリプションするのもあり
• DVDのバイリンガルキャプション • Netflix Subtitles Extender for Japanese • コメディがいい
– 弾丸トーク(フレンズ、ビッグバンセオリー) 英語の勉強
アジェンダ • 自己紹介 • AWS上での開発 • アスキーアート(AA)自動生成 • Pythonコーディングで大事だなと思ったところ •
Djangoのこと • AWS Lambdaのこと
AWS Lambda@Python • はじめはローカルでテスト – Lambdaはステートレスな1関数なので簡単 • 大体できたらLambda上でテスト – エラーログも十分見れる(CloudWatch)
– デプロイはコマンド一発で5~10秒程度でできる
Lambda関数@Pythonの作成 • AmazonLinux@EC2上で作業 1. yumで各種ライブラリインストール(blas, lapackなど) 2. スワップファイル作る 3. virtualenv作る
4. virtualenv内でpip、pythonライブラリインストール – numpy, pillow, scipyなど 5. lambda関数デプロイ用のフォルダ作成、site-package/dist- packageの中身をフォルダにコピー 6. lambda関数を .py で作成してフォルダにコピー 7. LambdaUploadでAWSにアップロードする • 参考: – https://medium.com/@maebert/machine-learning-on-aws-lambda- 5dc57127aee1
LambdaUpload • コマンド一発でライブラリと自作スクリプトをZIPで固めて AWSにデプロイしてくれる – 使ってみたらとても便利だった • AWS Lambdaの関数アップロードをお手軽に -
銀の弾丸 – http://takamints.hatenablog.jp/entry/2016/03/09/launcher-script- for-the-aws-lambda-function • (※発表後追記:AWS公式にも便利なデプロイツールがある そうです)
ご清聴ありがとうございました • ちゃんとデプロイする(nginx) • AAがでかいのでもっと小さく、よいものを – GraphCut/DeepLearningを使う – InterestPointの考慮(眼の周りの検知など) •
画像の線画化を高性能化 • LamdaでTensorflow(Keras)を動かす – aws lambda + serverless • ウェブアプリの勉強 – SNSシェア、ログイン機能、コメント、いいねラン キング、・・・