くずし字OCRと江戸料理

「安い、早い、うまい」

が好まれるせっかちな江戸っ子のように、今回もサクッとご紹介いたします。

codh.rois.ac.jp

こちらのサイトで「くずし字」がデータセットで提供されております。

さて、今回は、この「くずし字」をCNNに学習させて、現代の日本語文字に変換するアプリケーションを構築してみます。

古文書がAIによりスラスラ読めるようになれば素敵ですね。

GitHub - rois-codh/kmnist: Repository for Kuzushiji-MNIST, Kuzushiji-49, and Kuzushiji-Kanji

こちらで公開されているbenchmarksのコード

kuzushiji_mnist_cnn.py

の最後に以下の2行を加えて、学習したモデルと重みファイルを保存します。

open('k_mnist_cnn_model.json','w').write(model.to_json())
model.save_weights('k_mnist_cnn_weights.h5')

その学習結果を、PythonのWebフレームワーク「Flask」を使ったアプリケーションから呼び出します。(コードは後日公開予定です)

f:id:KenjiU:20210531183544p:plain
くずし字OCRアプリケーション

上図のように「くずし字」の画像をアップして実行すると、現代の文字に変換されます!
今回は「くずし字」でしたが、データセットがあれば同じようなことが実現できます。

余談ですが...
江戸時代に「豆腐百珍」という、100種の豆腐料理を解説したベストセラー料理書がありました。

codh.rois.ac.jp

「くずし字」で記載された本のデジタル画像も提供されています。

その「豆腐百珍」の58番目に、奇品として掲載されている「玲瓏(こおり)豆腐」というのが気になったので実際に作ってみました。

f:id:KenjiU:20210531131633j:plain
玲瓏(こおり)豆腐

まさに氷のようにも見え、夏にふさわしい一品でした。

江戸時代のロボット

からくり人形は江戸時代の庶民を熱狂させたものの一つです。

からくり人形師 九代 玉屋庄兵衛展―伝統の技と挑戦―(予告動画)|高島屋 - YouTube

こちらは「からくり人形師 九代 玉屋庄兵衛展」の動画ですが、まさに人間の動きそのもの。電気を全く使用せず、木でできた歯車と、ぜんまい(江戸時代はくじらのひげを利用)仕掛けで実現しており、驚きです。まさに江戸時代のロボットですね。

現代のロボットは、作業効率化・自動化のために用いられることが多いですが、江戸時代のからくり人形は、人を驚かせ感動させるためのものでした。約260年間にわたる天下泰平の世にあった江戸時代ならではの文化です。

また、からくりの技術を技術者から大衆へも共有すべく「機巧図彙(からくりずい)」という本が1796年に刊行されてベストセラーになりました。

ja.wikipedia.org

この「機巧図彙」には以下のような補足文があります。

此書の如き、実に児戯に等しけれとも、見る人の斟酌に依ては、起見生心の一助とも成なんかし

この本に書いてあることは、子供の遊びのようなものだけど、見る人の理解によっては、何か新しい発想を得て、それが発明のヒントになるでしょう。

現代にも通じる素敵な思想です。

さて、今回はロボットということで

Bullet Real-Time Physics Simulation | Home of Bullet and PyBullet: physics simulation for games, visual effects, robotics and reinforcement learning.

こちらのPyBulletというオープンソースの3D物理シミュレーションツールで人型のロボットを動かしてみます。赤い球を走って追いかけるという動作を学習済みです。

f:id:KenjiU:20210430113252g:plain
動作結果

少々のことではへこたれず、やり遂げていこうと思います。

RPAの本命 Power Automate

こんにちは。ブリスウェルの id:yamagoochi です。

4月に入り、第4波が広がり始めていますね。 ブリスウェルは在宅勤務体制を始めて1年以上が経過してしまいました。 まだまだ続きそうですが、感染対策を徹底していきたいと思います。

今回はRPAに変革をもたらしそうなMicrosoftPower Automateというサービスに関する記事を書きたいと思います。

https://flow.microsoft.com/ja-jp/

RPAサービスの比較調査

ブリスウェルではRPAについて数年前からいくつかのサービスの調査をしておりました。 具体的にはWin ActorやUI pathです。

ビジネスアプリケーションのソフトウェア開発事業が主力事業のブリスウェルとしては、RPAをソフトウェア開発の対象外となる業務を支援するツールという位置づけで積極的に導入検討を進めようと考えていました。

例えば以下のような業務などはRPAが力を発揮すると考えています。

・システムを構築するまでも無いが、定期的に定型業務を行っている

・既存システムへデータ連携ができないので、手動でデータ入力を行っている

・メールで受信したテキストの内容をシステムに手動で入力している

しかし、いざ調査を行ってみると、初期導入費用やライセンス費用が高額であるため、お客様に積極的に提案しづらいという壁にぶち当たってしまいました。システム予算が潤沢な会社であれば問題ないのかもしれませんが、中堅中小企業やベンチャー企業にとっては、そこそこ高いなという価格設定の印象です。

<WinActor>

フル機能版 : 1台当たり90万8000円/年


実行版   : 1台当たり15万円/年

※実行版では自動化シナリオの作成ができず、実行のみ

<UiPath> 約50万円/年から

Power Automateとの出会い

そんな中、半年ほど前からMicrosoftのPower Automateというサービスに目を付けて調査を進めることにしました。 初期費用がかからずライセンス料金も低額なので、まさにこういうRPAサービスを求めていた!というサービスでした。

価格(https://flow.microsoft.com/ja-jp/pricing/

かなり価格体系が分かりづらいです・・・

License by user ¥1,630 : クラウドフローのみ(ユーザー単位課金)

License by user ¥4,350 : クラウドフローとデスクトップフローとAI(ユーザー単位課金)

License by flow ¥54,350 : ユーザー無制限(フロー単位課金)

通常はユーザー単位での課金ですね。ブリスウェルでは真ん中のプランで自社の業務改善を行っています。

フロー単位のライセンスは使ったことが無いので、詳細は分かりません。

ページ中盤にあるマトリクスがとても分かりづらいです。

Active attended RPA bots : 1 bot

Active unattended RPA bots : ¥ ボットごと

クラウドフローからデスクトップフローを呼び出して実行する場合に、PC側でアクティブなユーザアカウントを使ってデスクトップフローを実行するのが 「Active attended RPA bots : 1 bot」のプランです。

ブリスウェルではこのプランでデスクトップフローを実行しています。

逆にPC側でアクティブなユーザアカウントが存在しなくても強制的にログインを実行してデスクトップフローを実行できるのが「Active unattended RPA bots : ¥ ボットごと」のプランです。

このプランは使ったことが無いのですが、実行するアカウント毎に非アテンド型RPAアドオンとして¥16,310/月のライセンス費用がかかるため、結構な費用負担が発生するようです。

詳細についてはこちらを参照することをお勧めします。

https://go.microsoft.com/fwlink/?LinkId=2085130&clcid=0x411

ここまで低額でRPAを利用できるメリットについて話を進めてきましたが、その他にも普及しそうな理由があります。

ブリスウェルのお客様はWindowsPCやOffice365を使っていることが多く、3月からWindows10ユーザーは無料でPower Automate Desktopを使えるようになるというリリースも出たので、ユーザー層がかなり拡大するのではないかと考えています。

https://flow.microsoft.com/ja-jp/desktop/

まずは使ってみよう!

数ヶ月かけてシステム運用業務の効率化を目的としたPower Automateの導入を進めてみて、色々とサービスの特徴や気をつけるべきことなどを含めた知見が溜まってきたので、定期的に情報発新を行おうと思っています。

まずはセットアップです。 参考にしたYouTubeの情報は以下のとおりです。ITに詳しく無い方はここで諦めたくなるかもしれませんが、頑張って環境を構築していきましょう!

STEP1:サインアップ

https://www.youtube.com/watch?v=CUsPjZnuUPI

Office365 E3 試用版へサインアップ

Power Apps Community Planへサインアップ

STEP2:環境構築

https://www.youtube.com/watch?v=kyxNLUCA-mQ&t=200s

Power Automate Desktopの導入

 Power Platform管理センターへログインして新しい環境を構築する

 UIフローの作成からPower Automate Desktopを選択

 アプリを入手してPCへインストールを実行

STEP3:クラウドとローカルPCをつなぐ

https://www.youtube.com/watch?v=-blPo-zErQg&t=19s

 オンプレミスデータゲートウェイの設定

ここまでできたら、Power Automate DesktopでUIフローを構築したり、クラウドフローで定期実行フローを構築したりできるようになります。 次回以降、具体的な構築ノウハウなどについてご紹介していこうと思ってます。

Good Luck !!

AIによる奥行きの推定

眼に投影される像は2次元の平面画像なのに、人間は3次元構造を知覚することができます。自動運転で車間距離を計測するために利用されるステレオカメラのように二つの目だけでなく、人間は単眼でも奥行きを認知できるのはすごいですね。

github.com

今回は、ディープラーニングにより一枚の画像から奥行きを推定して3Dを生成する「3d-photo-inpainting」を試してみました。

いつもユーモア溢れるトークで周囲を明るくする弊社の取締役(陽治郎さん)の写真を使用させていただきます。いつの日かAIもユーモアを理解し人を笑わすことができるようになるのでしょうか。

f:id:KenjiU:20210328191851j:plain
オリジナル陽治郎さん

f:id:KenjiU:20210328191959p:plain
奥行き陽治郎さん

f:id:KenjiU:20210328192137g:plain
ぐりぐり陽治郎さん

f:id:KenjiU:20210328223100g:plain
3D陽治郎さん

すごいですね。写真から3D化できています。

また、写真だけでなくイラストに対しても3Dを生成することができます。

tech.briswell.com

以前登場したお侍くんの画像を使用します。

f:id:KenjiU:20210328200851j:plain
オリジナルお侍くん

f:id:KenjiU:20210328201123p:plain
奥行きお侍くん

f:id:KenjiU:20210329094659g:plain
ぐりぐりお侍くん

f:id:KenjiU:20210328223214g:plain
3Dお侍くん

ディープラーニングがもたらした機械の「目」。ますます進化しています。

計測アプリからAR技術を知る

こんにちは、駆け出し社員kobaです。
2回目の緊急事態宣言中はみなさんどうお過ごしでしょうか?
私は最近引っ越しを検討していて
空き時間や休日は物件サイトをネットサーフィンする日々を送っています笑
引っ越しを考える中で家具などのサイズを測る必要が出てきました。
しかし、この必要な時にサイズ測定するメジャーが見当たらない。。。

iPhoneの標準アプリで計測できる

調べてみたらなんとiPhoneの標準アプリで計測できるらしいです。
自分のiPhone内探してみたら計測アプリが入ってました。

iOS12の時に追加されたので2年前からあったみたいです

f:id:briswellyuki:20210215174824p:plain:w400
今までその存在さえ知らなかった。。
AR技術によってカメラに写った物体のサイズ長さを測定することが可能らしい。。
ここでAR技術ってなんだろうと思い、計測アプリを使いつつさらに調べてみることに

AR技術とは

ARとは「Augmented Reality」の略で拡張現実のことを指すようです。
実際にある画像や映像にCGを加えることで現実を拡張することから
「拡張現実」と表現されているみたいです。
まだ完全にピンときていないのでアプリを使いながら
AR技術の一部を体験してみたいと思います。

iPhoneの計測アプリ使ってみる

1.計測アプリを起動します(上記画像参照)

2.アプリ起動時にiPhoneを動かせば計測画面に遷移します

f:id:briswellyuki:20210216095917p:plain:w400
起動時画面

3.計測画面中央に④のポインターが表示されるので計測したい物の始まりと終わりをポインターに合わせて⑤の+で押下すれば計測出来ます。
今回は私が以前使用していたiPhone6を計測してみました

f:id:briswellyuki:20210222162048p:plain
①1つ前の動作に戻る②起動時の画面に戻る③始点
ポインター⑤計測開始/終了⑥スクリーンショット

計測する対象が四角の物体の場合、白い点線で物体が囲まれる場合があります。
その時に⑤の+押下すれば自動で計測してくれる機能もありました。

f:id:briswellyuki:20210222162017p:plain
iPhone6の縦横の長さは高さ138.1mm、幅67.0mmとなっているので大体あってますね
(※面積も計算してくれました)

測定が1センチ単位になってしまうことや計測対象の距離が遠かったりすると誤差が生じることを除けばとても便利な機能だと思いました。

まとめ

今回iPhoneの計測アプリからAR技術の一部を体験してみました。
今回の体験した大きさの計測の他にも
カメラで空間を認識し、撮影画面上に3Dの物体など置くことが可能になったり
撮影画面上に情報を表示させたりAR技術は幅広いです。

ただ撮影環境や計測する対象によって正しく動作しない時もあるのでまだ発展途上の段階でもあると感じましたが、
これから精度も向上して普及していく技術の1つと感じました。
これからAR技術が発展していけばサイズ測定する必要なメジャーも不要になって
スマホで全てのものが計測できる時代になるかもしれません

「業務のアイカタであり続けたい」
中小企業様向けERPソリューション

ai-cata.com

ミッション・バリュー

こんばんは、加藤です。 ご多分に漏れず、弊社ブリスウェルにもミッション、バリューがあります。

数年前に、そろそろメンバーも増えてきたし、ミッション・バリューがあったほうが意識のすり合わせがしやすいよねということで、 マネージャ陣でうんうん言いながら心のうちを絞り出し、内外にStatementしました。

ただ、今までバリューは日本語で書かれており、 僕は、恥ずかしながら、バリューの方向性と5個くらいあるなということくらいは覚えていたものの、一言一句は記憶に残っていませんでした。

「GO BOLD」とか「ライブドア事件を忘れるな。」とか、覚えやすいですよね。。。。

ところが、今日、全社MTGでバリューに対して代表の山口が短い英語を充てて出したのです。

おお!わかりやすい!

ということで、ブリスウェルのミッション・バリューをご紹介です。

特に”Leadership"が良いですね。

f:id:brix:20210305194844p:plain
Mission

Mission - 果たすべき使命

テクノロジーで新しい価値を創造し、より良い社会の実現に貢献する

f:id:brix:20210305194931p:plain
Values

Values - 価値観

  1. Create New Value 新しいことに情熱を持って挑戦し、創造的な価値を生み出す

  2. Customer First
    お客様に喜ばれ、必要とされるサービスをプロ意識を持って提供し続ける

  3. Quality and Speed
    サービスの品質向上とスピードアップを徹底的に追及する

  4. Team Spirit
    目標を共有し、相互理解を深め、チームの力で成果を上げる

  5. Leadership
    お客様や取引先、メンバー同士の信頼関係を大切にしながらリーダーシップを発揮する

江戸言葉変換ツール

f:id:KenjiU:20210227211050j:plain

今回は江戸言葉です。

「するってえと何かい!」

このような勢いがある「べらんめえ口調」の言葉です。落語や時代劇で良く使われるので、聞き覚えがある人も多いのではないでしょうか。100万都市の江戸には、武士、職人、商人など様々な身分の多くの人が行き交っていました。テンポよくユーモアもある言葉使いがコミュニケーションの潤滑油にもなっていたようです。

「味噌汁で顔洗って出直してこいってんだ!」

相手があまりにふざけている時に使うフレーズですが、つい笑ってしまいますね。現代に生きる私たちも粋な江戸の会話術、参考になるのではないでしょうか。

さて、江戸ブログではなく、テックブログなので...
現代の言葉を江戸言葉に変換するツールを作ってみましょう。

PythonGUIを構築できるライブラリ「tkinter」を使用します。

import tkinter
from tkinter import messagebox

#辞書を定義
edo_dict = {
'ありがとうございます':'ありがとうございやす', 
'ください':'くれっ',
'すごい':'すげぇ',
'そうですか':'そうかよ', 
'たいした':'てぇした',
'ですか':'かよ',
'ですね':'だぁね', 
'ですよ':'だぜ',
'とても':'えれぇ',
'ない':'ねぇ',
'はい':'おぅ'}

#ボタンをクリック時に実行
def button_click():
    input_value = input_text.get("1.0",'end') #テキストボックスの文字の最初から最後まで読み取る
    dict_list = [] #変換リスト
    for i, one_dic in enumerate(edo_dict.items()): #辞書を読み込む
        input_value = input_value.replace(one_dic[0], '{'+str(i)+'}') #入力値に変換対象があれば変換されるようにセット
        dict_list.append(one_dic[1]) #変換リストに追加
    input_value = input_value.format(*dict_list) #変換実施
    messagebox.showinfo("クリックイベント",input_value) #画面に変換結果を表示

#ウインドウの作成
root = tkinter.Tk()
root.title("江戸言葉変換ツール")
root.geometry("360x450")

#テキストボックスの作成
input_text = tkinter.Text(width=40)
input_text.place(x=10, y=50)

#ラベルの作成
input_label = tkinter.Label(text="粋でいなせな言葉に変換しやす")
input_label.place(x=10, y=20)

#ボタンの作成
button = tkinter.Button(text="江戸言葉に変換",command=button_click)
button.place(x=10, y=390)

#アプリの待機
root.mainloop()

コードを実行し、何か言葉を入力します。

f:id:KenjiU:20210227205918p:plain
変換前

変換ボタンをクリックすると、粋でいなせな江戸言葉に変換されます。

f:id:KenjiU:20210227212311p:plain
変換後

とーんときたね!

江戸画像合成API

はじめに

厳しい寒さが続いておりますが、時折見せる青空や日差しの心地良さに、ふと春を感じる瞬間も多くなってきましたね!

江戸時代は、地球はミニ氷河期の時代でもあり、江戸は今と比べて積雪量が多く隅田川も凍ることがあるぐらいとても寒かったそうです。

さて今回は、Pythonフレームワーク「Flask」による画像処理APIを紹介します。「Pythonによる機械学習をサービスとして導入したい」といった方々のご参考になれば幸いです。

API情報

名称:(江戸)画像合成API
メソッド: POST
エンドポイント: /image_mix/

API処理概要

2つの画像をBase64エンコードされた形式で受け取り、Flask側でデコードして画像を復元します。その復元した画像を合成し、その合成画像をBase64エンコードして返却します。

リクエスJSON

[
    {
        id : 1
        image : iVBORw0KGgoAAAANSUhEUgAABk...(base64でエンコードされた画像)
    },
    {
        id : 2
        image : iVBORw0KGgoAAAANSUhEUgAAAK...(base64でエンコードされた画像)
    }
]

f:id:KenjiU:20210127221826p:plain
id : 1(背景画像)
f:id:KenjiU:20210127221908p:plain
id : 2(貼り付ける画像)

ソース

from flask import Flask, jsonify, request
import cv2
import numpy as np
import base64
from PIL import Image

app = Flask(__name__)

@app.route("/image_mix/", methods=["POST"])
def post():

    layer1_flg = False
    layer2_flg = False

    for json in request.json:
        # リクエストのjsonのidをセット
        id = json['id']

        # リクエストのjsonのimageをデコード
        img_stream = base64.b64decode(json['image'])

        # 配列に変換
        img_array = np.asarray(bytearray(img_stream), dtype=np.uint8)

        # 画像として読み込む
        img_trans = cv2.imdecode(img_array, cv2.IMREAD_UNCHANGED)

        # 画像を書き込む
        if id == "1": # 背景画像
            cv2.imwrite(id+'_result.png', img_trans)
            layer1 = Image.open(id+'_result.png')
            layer1_flg = True
        elif id == "2": # 貼り付ける画像
            cv2.imwrite(id+'_result.png', img_trans)
            layer2 = Image.open(id+'_result.png')
            layer2_flg = True
        else:
            pass

    # 背景画像(layer1)と貼り付ける画像(layer2)が存在する場合
    if layer1_flg and layer2_flg:
        # layer1と同じサイズの画像を透過(A=0)で作成
        c = Image.new('RGBA', layer1.size, (255, 255,255, 0))

        # layer2を指定した座標位置にペースト
        c.paste(layer2, (780,570), layer2)

        # 重ね合わせる
        result = Image.alpha_composite(layer1, c)

        # 画像を書き込む
        result.save('mix_result.png')

        # 画像をBase64文字列にエンコードする
        with open('mix_result.png', "rb") as f:
            img_base64 = base64.b64encode(f.read()).decode('utf-8')
        
        # レスポンスのjsonにセット
        return jsonify({'result' : img_base64})

    # 対象画像が存在しない場合
    else:
        return jsonify({'result' : "対象の画像なし"})

if __name__ == '__main__':
    app.run()

結果

f:id:KenjiU:20210127222250p:plain
合成結果
きれいにお侍くんが合成されました!(キラッ)

OYO LIFEはじめました〜Part2〜

あけましておめでとうございます。
駆け出し社員のkobaです。
とうとう年が明けてしまいましたね。。。

またまた私事になってしまいますが、
去年の11月から2ヶ月半OYO LIFEを使って都内に引っ越していました。
※前回のブログ記事に物件予約〜支払〜賃貸契約の詳細書いてます。
よろしければご覧ください。

tech.briswell.com

今回はOYO LIFEを使って
賃貸契約締結後の入居〜退去するまでの流れ・感想を記載したいと思います。

契約締結後〜入居まで

賃貸契約締結して入居まであと5日となっていました。
入居日があと3日....2日に迫ってきましたが
入居方法がわからない....(どこかに説明の記載等あったかもしれませんが)
メールで問い合わせすると
入居日前日に入居案内のメールでお知らせするとのことでした。

そして入居日前日に入居案内メール届きました。
指定の時間に行けば部屋の鍵が空いているとのこと
これで入居に関して不安がなくなりました!

とうとう入居

ちょっと迷いましたが、なんとか辿り着きました。
指定時間ちょっと過ぎてしまいましたが、
入居案内のメールの部屋番号の部屋に無事入居できました!
鍵も部屋の指定の場所に置いてありました
(入居案内のメールの添付PDFファイルに記載してありました)

f:id:briswellyuki:20201211194527j:plain:h500
観葉植物も備え付けてあってお洒落でした笑

家具付きの物件を選んでいましたが、
掃除機やアイロン&アイロン台等の生活日用品も備え付けてありました。
服とタオルだけ持っていけば生活できる状態でした笑

f:id:briswellyuki:20201211200511j:plain:h500
ドライヤーや電気ポッドも付いているとは驚き!

入居して感じたのは賃貸物件ではありますが、
ホテルのように生活用品の提供や生活補助してくれると感じました

f:id:briswellyuki:20201211200506j:plain:h500
生活用品の提供や生活補助の料金表

とうとう退去

退去2日前にOYO LIFEから退去の案内メールがきました。
指定時間前に退去してエントランスで鍵を返せばいいとのことでした。
(退去立ち会いしなくていいのは楽ですね)
当初は長いように感じた2ヶ月半.....あっという間に退去日です
とても離れがたく新年早々悲しい気持ちになりました笑

まとめ

都内に住むのが恐怖心を抱いていた私には
OYO LIFEを使って都内の物件を借りて住むことは
ハードルが低くなり簡単かつ楽でした。
よかったらみなさまもOYO LIFE始めてみてはどうでしょうか?