「画像認識するRPA」を作って、「毎月1,000件の手入力」を自動化された事例

ガラパゴスタディーの小川です。
https://forum.pc5bai.com/company/#ogawaprofile

「RPAは、RPA製品でしか作れない」と思われている方も多いのではないでしょうか。
実は、 Python を習得すると、Python だけで RPA を作ることができます。

RPA製品独特の操作とかクセとかを覚えなくてもすぐに使えます。
RPA製品はライセンスが高額になることも多く、1ライセンスあたり年間100万円を超える予算が必要になることも珍しくありません。
一方、同じように RPA を作るとしても、 Python で作るならば無料です。コストパフォーマンス的にも最強です。

今日は、ガラパゴスの Python 講座受講半年で「画像認識するRPA」を作って実務で活用されたIさんの声を紹介します。
「手入力しかできないシステムに毎月1,000件のデータを入力していた作業を自動化した」という事例です。

年末の読み物として、ぜひ楽みながらお読みください (^^

以下は、去年のいまごろ、「Pythonウェブプログラミングゼミ」が開始して半年経とうかというころにIさんがされた投稿です。

画像認識するRPAをテストしてみました
会社のサーバーで動いている基幹システムの日々のマウスポチポチ定型作業から解放されたいと思い、pythonで画像認識してマウスポチポチさせようと思い立ち、トライしてみました。

手順
1. 画面の中から探したいボタンとかのスクショを保存
2. pythonスクリプト実行

必要なライブラリ

pip install pyautogui
pip install pillow
pip install opencv-python

from time import sleep  
import pyautogui  

# 画面の中にこのパスの画像があるか検索する。  
button = './btn.png'  

def find_image_coordinate(image_path, time_out, confidence):  
    """  
    プライマリスクリーンから任意の画像の座標を検索する  
    :param image_path: 画面から見つけたい画像のパス。  
    :param time_out: 画像検索待ち時間(秒)。  
    :param confidence: 信頼感。数値が高いほど信頼できるが、見つからない確率も上がる。(0~1?)  
    :return: 画像の座標。  
    """  
    for _ in range(time_out):  
        locate = pyautogui.locateOnScreen(image_path, confidence=confidence)  
        if locate is not None:  
            return locate  
        else:  
            sleep(1)  

if __name__ == '__main__':  
    try:  
        button_locate = find_image_coordinate(image_path=button, time_out=10, confidence=0.9)  
        x, y = pyautogui.center(button_locate)  
        pyautogui.moveTo(x, y)  
    except TypeError:  
        print('Image not found')


ちゃんと任意のボタンを探してそこにマウスカーソルを移動してくれました。

はじめはPower Automate Desktopでやろうかとも思ったのですが、サーバーのOSはWindows server 2019なので要件を満たしておりません。

なのでpythonでやってみたのですが、Power Automate Desktopよりはるかに簡単に実装できました。

RPAソフトは、そこそこスキルがある人にとっては、「かえって使いにくい」

「Power Automate Desktop」も比較検討対象ではあったということです。
僕もRPAを作ったことがありますが、ベンダー製RPAというのはPower Automate Desktopを含めて、そこそこ技術のある人からすると、「かえって使いにくい」というのが共通の感想です。

  • 独自に覚えなければならないことが多すぎる(ほかで使えない知識、独自の挙動のクセなど)
  • 細かい挙動を制御しようとすると、結局プログラムを書かなくてはならない

RPAソフトは、「価格が高い」

ほか、ベンダー製RPAをだと、「開発ライセンス」がないとRPAを作れないのだが、開発ライセンスが高額なため、ほとんど誰も作る機会を持たせてもらえない等々。

ベンダー製RPAについて調べてみるとびっくりしますが、「開発ライセンス」などがついた基本パッケージで月額10万円-(もちろん初期費用別、サポートが手厚くなったらさらに追加料金)といった価格体系のものが普通です。
一方、Pythonなら0円でRPAを作れます。
(ですので、特に法人で会社の支出に頭を悩まされている担当者の方は、ぜひご相談ください)

RPAを作るにしても、Pythonのほうが簡単。かつ、Pythonスキルはほかのことにも活用できる

一方、上に紹介したコードを見ていただいても分かると思いますが、RPAぽいことをやるのに必要なコードの量はそんなでもありません。
しかも、Pythonならば学習したことがあらゆる領域で使えます。
大量データをエクセル的に処理するにしても、書類未提出のスタッフに督促の一斉メールを送るにしても、覚えたPythonの延長ですべてできます。
https://forum.pc5bai.com/ のようなログイン機能つきの本格的なウェブサイトも作れます。

その後の活発なディスカッション

Iさんのこの投稿には、ゼミ生、僕を含めて、1月のあいだに、29件のコメントがつきました。
その間Iさんの試行錯誤や、僕からのサポートなども含めてです。

その後も:

さっきまで基幹システムの操作をpythonにやらせていたのですが、かなりの部分がAltキーとの組み合わせでなんとかなっています。
どうやらテキストボックスに日本語が入力できないようなのでクリップボードに入れてからctrl+vで貼り付ける必要があるみたいです。

日本語の件は、どうしようもないですね。
というより、「IMEで変換して確定」とかまでロボットに操作させるよりは、どうせ入力しようとしている文字列を Python プログラムは知っているのだから、コピペで貼りつけたほうが簡単だろうと。

自分のPCで開発を行い、ある程度意図したとおりに動くプログラムができたのでサーバーにgit cloneしてテストしてみたところ問題が、、、
ひとまず現象のご報告まで。
[以下略]

OSの問題だとしても、accessの問題だとしても、ソフトやさんに聞くよりない感じですかね。

試す価値がありそうなこととしては、 mouse move → click というプログラムではなく、マウスポインタは動かさずにただ click だけするPythonプログラムを書いたとして、はたして、マウスポインタをボタンの上に置いた状態で実行したら、クリックできるかどうかですかね。
それで動くようなら、所望の場所にマウスポインタが移動してから sleep して、それから click 、であれば動くかもしれないです。
あとは、 click の前に print で(あるいは alert で)ポインタの座標はいちおう出力したいです。

それから、そもそものところですが、同じOS内の別のアプリに対しては click イベント発動するんでしょうか。

結論から。
管理者権限でスクリプトを実行したところ、期待通りの挙動になりました。

なお、マウスポインタを動かさず、実行してみましたが反応なし、座標は正しい位置を出力している様子です。

やりたいことは7割くらい実装できているので薄氷を踏むような心境ですがひとまずpyautoguiで様子つつ、RPA-Python への以降も視野に入れてみます。

サポートありがとうございます!

それから、サーバーでのpyautoguiの実行ですが、pythonの問題ではなくOSの? そもそもの? 問題のような気がしますが1つつまずいたことがありますので共有させていただきます。

サーバー上でタスクスケジューラで定期実行させようとして気がついたのですが、...[以下略]

...と、さらに活発な議論が。

そして、最終報告!「1,000件の手入力」の自動化に成功!

最終的に、以下のような成果につながったそうです。

例えば以下のようなものをバッチ処理できるようになりました。
- 他社が開発したAccessのを自動操作
- 取引先とのデータ連係に必要なデータをDBから抽出し、TSVファイルに整形
- 取引先システムにデータアップロード
- ファイルサーバー上の不要になったファイルを定期的に掃除
- APIが存在しない、さらにデータ入力を全て手入力しないとならない取引先指定のEDIを自動操作。データ入力件数が毎月1000レコード以上あり、CSVアップロードもできないという悲惨なシステムでしたが自動化。

「データ入力件数が毎月1000レコード以上あり、CSVアップロードもできないという悲惨なシステムでしたが自動化できました」て、すばらしい業績ですね。

このメールを読まれているあなたも、「取引先指定のフォームに1,000件のデータを手作業で入力」ということをしている自分の姿を想像してみてください...。
かかる時間、すり減る集中力、...キツそうです。

こういう作業も自動化できる。
これが、Pythonを習得することで得られるあなたの新しい強みです。

実は、このIさんは、 Pycon, DjangoCongress といった Python 関係のカンファレンスのコアメンバーからも「登壇して発表できるレベルだから、多くの人の前で発表してほしい」と依頼されているレベルです。

一般事務職の方が Python で学習で成果を出すためのポイント

今回紹介したIさんについても、前回紹介したTさん同様、成功のポイントは以下のとおりかなと思います。

  1. 教材と指導者に恵まれたこと
  2. 対話型の「直接指導」を受ける機会が多かったこと
  3. いっしょに学ぶ仲間がいたこと

1. 教材と指導者に恵まれたこと

「Pythonを使えばなんでもできる」というのはそうなのですが、ただやみくもにPythonに首を突っ込むのではだめ。

「体系的な知識」を身につけることが大切です。
体系的な知識があれば、新らしいことを学ぶのも簡単になります。

Iさんは、こうもおっしゃっています↓

基礎からしっかり理解できたことが良かったです。
自己流で学んでいたPythonでしたが、なんとなくしか理解していませんでした。
まあ、VBAもそこそこ書けるからだいじょぶっしょ。みたいな。
しかし、基礎からみっちり学ぶことでものすごい腹落ち感がありました。
とくにPythonicな考え方、コーディングスタイルを身につける事ができました。

僕は、受講生のみなさんが「根本的なところをしっかり理解して、応用力をつけられるように」ということを意識して教材を作っています。
実際、Iさんも、参加されたのは「Pythonウェブプログラミングゼミ」でしたが、ここでの成功例はRPAです。

異分野のようでも、ベースになる技術が同じであれば、どんどん応用できる。

実務直結ということはもちろん重要ですが、同時に、「体系的であること」は、教材作りでいつも意識しています。

2. 対話型の「直接指導」を受ける機会が多かったこと

この投稿へのやりとりでは僕もかなりアドバイスさせてもらいました。
対話になる場があることはとても大切です。

掲示板での投稿/コメントだけではありません。
Iさんはウェブプログラミングでも成果を出されていますが、これについては、オンラインのライブゼミ等でも直接アドバイスさせてもらいました。
ウェブプログラミングでもすごい成果を出されていますので、それについても追って紹介したいと思っています。

実務経験がある人からのアドバイスがあるのとないのとでは、雲泥の差です。

具体的な実装方針について意見を聞く、学習方針への助言を受ける、等々。
対話の機会があることはとても重要です。

3. いっしょに学ぶ仲間がいたこと

最初に紹介した投稿へのコメントも29件あったと書きました。
この投稿にも、多くの受講生からのフィードバックがありました。称賛、Power Automate Desktopへのグチ等々です。

たとえば、Power Automate Desktop について言及されている以下のコメントもありました。

乗り遅れた感がありますが私も動かしてみました。
キャプチャーした画像と同じところにマウスが動いたのには驚きました。
すごいですね!

Power Automate Desktopは出始めたころ(2021年の春くらい)にちょこっと使いました。
(Adobe AcrobatでPDFをOCRをするフローを作りました)
本当にUIを取るのが大変でPower Automate Desktopよりはるかに簡単というのはよくわかります。
・同じソフトなのにとれるUIととれないUIがある
・UIをうまくとれない
・とったUIが削除できずにどんどんたまる(どれが本物かわからない)
・うまくいくときといかないときがある
・他のPCにフローを移行するのが大変
作ったのが2年前なので今は違うのかもしれませんが、UIを使うフローは作るのをやめようと思ったことを思い出しました(^^;
ちなみに、そのあともう1つフローを作ったっきりでそれ以降は作っていません💦

こちらは基幹ソフトの操作に使えそうですね。
面倒だと思う処理がなのが何個かあるので私も仕事で使ってみようと思います。
教えていただきありがとうございました!

こういうやりとりをしながらみんなでさらに学んでいけるというのが、仲間がいることのメリットですね。

どんな環境に身を置くか

学びへの意欲が高いみなさんが集まる場に参加することは、それだけで、スキル獲得への大きな一歩です。

自分が投稿すると、さらに学べし、やる気もでてくる。
人が投稿しているのを見ると、学べるし、やる気もでてくる。

そんな場に身を置くことが大切です。

それはまるで、成功という目標に向かって流れる川の上に船を浮かべるようなものです。
あるいは、クルーズ船に乗っての旅のようなものでしょうか。
もちろん船内で参加すべきアクティビティはありますか、自分でそれほど船を漕がなくても、みんなで楽しくワイワイやっているうちには、ある程度のところまでは自動的に到達できます。

その点、ひとりで学ぶというのは、逆流の中で消耗しながら学ぶようなものです。「逆流」とは言わなくても、ゴールまで、孤独を感じながらひとりで船を漕ぎ続けなければなりません。

今回のまとめ

今回のまとめです。

  • Pythonの用途は広い

    • Pythonスキルは汎用性が高い
    • データ分析でも使えるし、ウェブプログラミングでも使える。
    • 「画像認識するRPA」だって作れる!
  • RPAを作るのにもPythonが有利

    • RPAを作るのに「RPAソフト」はいらない。Pythonひとつで十分
    • Pythonがあれば「無料」でRPAを作れる
    • ベンダー製RPAと比較して、1ライセンスあたり120万円-の節約になることも普通

学習を成功させるためのポイントは、以下の3つ。

  1. 教材と指導者に恵まれたこと
  2. 対話型の「直接指導」を受ける機会が多かったこと
  3. いっしょに学ぶ仲間がいたこと

より詳細には、以下のとおりです。

  1. 教材と指導者に恵まれたこと

    • 体系的に学べること
    • 実践的で、実務での活用を意識してつくられた教材であること
  2. 対話型の「直接指導」を受ける機会が多かったこと

    • 実務でPythonを使っている人からの直接のアドバイスは宝
    • 学習方針に悩んだときの相談も遠慮なくできます
  3. いっしょに学ぶ仲間がいたこと

    • 成果報告をするとみんながさらに支援してくれる
    • 仲間からの成果報告から学ぶことができる

今後のあなたの学びの参考にしてください。

今回のメルマガ、いかがだったでしょうか。

ぜひ、フィードバックをお寄せください。
「Pythonを学ぶのにどんな準備が必要ですか」、「自分にもできますか」、「こんなことも聞いてみたい」、等々、何でもお気軽にどうぞ (^^*

新らしい学びの場として、今、「Pythonデータ分析スペシャリスト養成ゼミ」を準備しています。
去年-今年にかけて実施した「Pythonウェブプログラミングゼミ」同様、手厚いサポートであなたをはじめとした多くのみなさんを成功に導きたいと思っています。

まもなく募集開始しますので、楽しみにしていてください (^^*
(一部の方には、もう説明会等行っています。「待ちきれない」、「どんな講座か知りたい」という方は、本メールへの返信にてご連絡ください)

前回:
なぜ、「文系出身、PC,IT知識ほとんどなし」の彼は「Pythonデータサイエンティスト」への道を自信を持って歩めるようになったのか
https://forum.pc5bai.com/article/how_to_be_a_data_scientist/

前々回:
「DX人材」として社内で口コミされる人とは
https://forum.pc5bai.com/article/known_as_a_dx_expert_in_your_company/

公開日時: 2023/12/31 17:00