Python×医療事務(×トロント)

#医療 / #医療事務 / #IT / #トロント / #歯科助手 / #のんびり / #備忘録 / #趣味

PyAutogui 模索  中途半端

https://www.itmedia.co.jp/news/spv/1903/03/news033_2.html


match_obj = hoge_region.find("foo.png")
 のようにfind()関数を用いると、foo.pngの画像に一致する物体をhoge_regionから探索し、発見できた場合はその位置・サイズ情報を持ったMatchインスタンスを返す。

数字部分に画像一致ではなくOCRをかけて(SikuliXにはOCR機能も備わっている)数字を認識し、認識した数字のうちどのマーク(スペード、ハート、ダイヤ、クラブ)なのか4回ループして認識する

類似度の設定は全て一律に変える以外にも、画像別に設定

GUIによる操作だけで完結するRPAソフトだったとしても、問題を解くに当たって試行にかかる時間や条件分岐、例外処理といったプログラミングの素養は必須

Cheatsheat
https://qiita.com/hirohiro77/items/78e26a59c2e45a0fe4e3




# B.pngが見つかるまでloop
for pos in pg.locateCenterOnScreen("B.png", grayscale=True, confidence=0.95):
pg.click(pos)

ディープラーニング 中途半端

GPU=以前はゲームなどのグラフィック分野 、近年ではディープラーニングを用いたモデルの学習マシンとして。
CPU GPUは、コンピュータの計算を処理する点では同じだが、GPUはCPUよりも多くのコアを搭載している
 
ディープラーニング(deep learning / 深層学習)=脳(神経細胞)の働きを模した学習アルゴリズム。一般的に
中間層(隠れ層/hidden layers)が2層以上のニューラルネットワーク
 
 
機械学習=特徴量(変数)の設計が難しかった
例として画像認識にて
入力データ=ピクセル値そのものではなく、「特徴量」と呼ばれる変数の集合
特徴量=色、形状、テクスチャといった様々な情報を表現した変数のセット
 
ディープラーニングは、特徴量もデータから自動的に学習することが可能
 
分類や回帰が可能
 
 

ディープラーニング(深層学習)ライブラリ

Chainer(日本 撤退)、Theano(セアノ)、
TensorFlow(テンソルフロー/Google)、Keras、Caffe、PyTorch
 
 ニューラルネットワーク (NN / Neural Network)
入力画像xがNNに渡された際に、そのまま識別結果yを出力

ディープラーニングの主な手法

 

CNN (Convolutional Neural Network)=畳み込みニューラルネットワーク、ConvNet、主力のディープニューラルネットワーク

画像認識におけるディープラーニングで一般的に使用される

畳み込み層とプーリング層と全結合層から構成されるニューラルネットワーク

 

畳込み層とプーリング層という特殊な2つの層が含まれる順伝播型ネットワーク(フィードフォワード)=多層パーセプトロン(ニューラルネットワーク)
左から右へと入力層から出力層へ一方向のみ伝播する

入力xが一旦、zへ変換される→NNに渡され最終的にyが出力通常のニューラルネットワーク(フィードフォワード)に渡される。)
zは画像から抽出された重要な特徴 

 

畳み込み演算は、入力データに対してカーネル(フィルターとも)を適応

 

入力データにフィルターをかけることで、特徴マップを作成

 

1. カーネル 

畳み込みに使用するカーネル(フィルター)に関して設定しなければならないパラメーターが4つ

1.使用するフィルタの数(K)
2.フィルタの大きさ(F)
3.フィルタの移動幅(S)
4.画像の端の領域をどれくらい埋めるのか。(パディングの設定)(P)

 


2. ストライド

カーネルをずらす際の間隔

ストライドを大きくすると、出力サイズは小さくなる

 

3. パディング

入力の幅を広げるためのパディング

 パディングを大きくすると、出力サイズは大きくなる

畳み込み演算を何度も繰り返すと、いつかは出力サイズが1に

CNNの層がカーネルと入力のサイズに依存 

 入力にゼロパディングすることでカーネル幅と出力のサイズを独立に制御できる

 

プーリング層=畳み込み層で得た特徴マップを縮小する層

基本的に活性関数にはReLU関数を利用

RNN (Recurrent Neural Network)再帰ニューラルネットワーク

アルゴリズム:可変長のデータを扱うため隠れ層に再帰的な構造をもたせたニューラルネットワークを利用

自然言語処理の分野

例)株価予測やチャットボット、音声認識

 

 

オートエンコーダー(AutoEncorder)系
アルゴリズム 情報を効率よく圧縮する構造をもたせたニューラルネットワークを利用
3層ニューラルネットワークにおいて入力層と出力層に同じデータを用いて教師あり学習させたもの   次元圧縮することを目的
エンコード=「次元圧縮」   デコード=「次元復元」
GANやAdversarial Autoencodersも合わせて学ぶことでより理解が深まる
 誤差関数を最小化することでネットワークの重み及びバイアスを決定
 
 
 
 
 

画像一致 模索   中途半端

note.nkmk.me

OpenCVで画像ファイルを読み書き

画像をNumPy配列ndarrayとして読み込めればOpenCVは必要なく、例えば、Pillowを使うことも可能

ここでは画素(ピクセル)ごとの単純な差分を考える。圧縮画像などの画質を評価したい場合はPSNR(Peak signal-to-noise ratio、ピーク信号対雑音比)といった指標が使われる

 

np.array_equal()で配列の要素、すなわち、画像の画素値がすべて等しいかを判定

差分の絶対値

cv2.imread()で読み込んだndarrayのデータ型は符号なし8ビット整数unit8なので、そのままだとマイナスの値を扱えない。astype()で符号ありの整数intに変換する。

 

f:id:chocolate22554:20210212175831p:plain

https://note.nkmk.me/python-opencv-numpy-image-difference/

 

差分を画像として保存したい場合は負の値があるとエラーになるためnp.abs()で絶対値をとる。

f:id:chocolate22554:20210212175854p:plain

https://note.nkmk.me/python-opencv-numpy-image-difference/

⇢根本的にあまりわかっていませんが人間の目で見るという感覚でなく画素数ピクセル)で判断し マイナスの値を扱うためastype()で符号ありの整数intに変換

差分を画像として保存したい場合は負の値があるとエラーになるためnp.abs()で絶対値を設定

ここではカラー画像(三次元配列)の差分を取得しているが、グレースケール画像(二次元配列)の差分もやり方は同様。

 

 

 

差分が生じている座標を取得

差分が生じている位置を、二値化の例のように画像で確認するのではなく正確な座標として取得するには、np.where()を使う。

 

 

NumPy(ndarray)での画像処理の例、

  • 画素値の取得と変更
  • 単色化と画像の結合(連結)
  • ネガポジ反転(画素値の逆転)
  • 減色処理
  • 二値化処理
  • ガンマ補正(四則演算)
  • スライスでトリミング
  • スライスや関数で分割
  • スライスで貼り付け
  • アルファブレンドとマスク処理
  • 回転と上下左右反転
  • 2枚の画像の比較

画像の読み込みや保存、リサイズや回転などの簡単な処理はPillowのみで実行可能。

 

 

色(チャンネル)の並びはRGB(赤、緑、青)の順。

OpenCVcv2.imread()で読み込んだ場合(BGR)

 

 

convert('L')で白黒(グレースケール)画像にしてから変換すると二次元のndarrayとして読み込まれる。

 

np.asarray()でも同様にndarrayが得られる

しかし、

np.array()は書き換え可能なndarrayを返す

np.asarray()は書き換え禁止のndarrayを返す

 

 

↓画像認識でできそう? opencvの精度はpyAutoGuiと比べてどうなんでしょう・・

tat-pytone.hatenablog.com

import cv2 #OpenCVのインポート
import numpy as np #numpyをnpという名前でインポート
#img1,img2の各要素を比較し、等しければ0、異なれば1の値を持つ配列comparisonを生成
comparison=np.where(img1 == img2, 0, 1)
#img1とcomparisonの要素の積、配列differenceを生成
#2つの画像の要素が等しい部分は0が掛けられるため0(黒)となり
#2つの画像の要素が等しい部分は1が掛けられるため値を持つ

 

 

 

OPENCV

www.w2solution.co.jp

 

フィルター処理

行列演算

オブジェクト追跡(Object Tracking)

領域分割(Segmentation)

カメラキャリブレーション(Calibration)

特徴点抽出

物体認識(Object recognition)

機械学習(Machine learning)

パノラマ合成(Stitching)

コンピュテーショナルフォトグラフィ(Computational Photography)

GUI(ウィンドウ表示、画像ファイル、動画ファイルの入出力、カメラキャプチャ)

dronebiz.net

 

sorabatake.jp

 

 

 

 

 

UiPath RPA について

優先順位等ブラッシュアップする

f:id:chocolate22554:20210212112736p:plain

https://academy.uipath.com/learningpath-viewer/3565/1/167150/11

 

 

結局python必要ならpython勉強してたほうが楽だなと思いました↓

f:id:chocolate22554:20210212151929p:plain

https://academy.uipath.com/learningpath-viewer/3565/1/167150/11

概要を理解するためにサラーっと見てるだけなのでいいですが やはりpythonはいいですね

 

と思ったらまた別途あるようでした

f:id:chocolate22554:20210212152814p:plain

https://academy.uipath.com/learningpath-viewer/3565/1/167150/11

 

 

f:id:chocolate22554:20210212152941p:plain

https://academy.uipath.com/learningpath-viewer/3565/1/167150/11

医療現場はUnattended ロボット が適していそうです(業務によりますが使い分けすればどちらも使えるかな?)

 

 

 

icrawlerで犬と猫の画像を収集し保存する   と日経平均株価取得  スクレイピング

 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 
 
 
問題を報告する
 

 

 

AI Academy | テキスト

スクレイピングで使うコマンド

 

==============================

icrawlerについて 犬と猫の画像を収集し保存する

Macならターミナル、Windowsならコマンドプロンプト

 
 
 

Jpyter Notebookのセルや、Colabのセル

 

 

 

Bing検索エンジンから、犬と猫の画像をそれぞれ10枚ずつダウンロード

下記コードをテキストエディタで作成 該当ディレクトリに保存

 

from icrawler.builtin import BingImageCrawler
crawler = BingImageCrawler(storage={"root_dir": "dogs"})
crawler.crawl(keyword="犬", max_num=100)

# Googleの場合、クローリングが出来ない場合があります。
# from icrawler.builtin import GoogleImageCrawler
# crawler = GoogleImageCrawler(storage={"root_dir": "cats"})
# crawler.crawl(keyword="猫", max_num=10)

from icrawler.builtin import BingImageCrawler

crawler = BingImageCrawler(storage={"root_dir": "cats"})
crawler.crawl(keyword="猫", max_num=100)

 

 catanddog.pyという名前で保存

cd  で事前に該当ディレクトリに移動する

python  catanddog.py   で実行

catsと dogsのフォルダが作成され画像が保存された

f:id:chocolate22554:20210430115331p:plain

 

=============SafariでのWebdriverについて=====================

 

 

 

qiita.com

sudo pip3 install selenium

 

from selenium import webdriver # Safariを指定して起動 browser = webdriver.Safari() browser.get('https://mainichi.jp/')

 

safariはwebdriver 必要なし

 ====================================

 

 

qiita.com

 

日経平均株価取得  スクレイピング

上記URL参照にアレンジ

#https://aiacademy.jp/media/?p=341

coding: UTF-8
import urllib.request

from bs4 import BeautifulSoup

from urllib.request import urlopen

# アクセスするURL
url = "http://www.nikkei.com/markets/kabu/"

## URLにアクセスする htmlが帰ってくる → <html><head><title>経済、株価、ビジネス、政治のニュース:日経電子版</title></head><body....

 

# ※このコードはurlopen関数に渡す引数に関しての構文です。この1行だけでは動作しません。
#urllib.urlopen(url[, data[, proxies[, context]]])
html = urlopen(url)
##data = html.read()
##decoded_data = data.decode('utf-8')

# htmlをBeautifulSoupで扱う
soup = BeautifulSoup(html, "html.parser")


# タイトルを文字列を出力
print (soup.title.string)

コマンドにて

python getNikkeiWebPageTitle.py

株式: 日経電子版 と出力された

 

日本経済新聞 のHPにて 赤枠を左クリック

f:id:chocolate22554:20210502100927p:plain

「株式」nを選択

f:id:chocolate22554:20210502102226p:plain

数値部分を右クリック→「要素の詳細を表示」

f:id:chocolate22554:20210502102337p:plain



選択部分のソースが表示される

f:id:chocolate22554:20210502102451p:plain

<span class="mkc-stock_prices">28,812.63</span>  のコピー方法

右ダブルクリック?→コピー→HTML

f:id:chocolate22554:20210502102513p:plain

span要素のclass="mkc-stock_prices   

位置を把握した

 

コードはこれ↓

# coding: UTF-8# coding: UTF-8import urllib.request
from bs4 import BeautifulSoup
from urllib.request import urlopen
# アクセスするURLurl = "http://www.nikkei.com/markets/kabu/"
## URLにアクセスする htmlが帰ってくる → <html><head><title>経済、株価、ビジネス、政治のニュース:日経電子版</title></head><body....


# ※このコードはurlopen関数に渡す引数に関しての構文です。この1行だけでは動作しません。#urllib.urlopen(url[, data[, proxies[, context]]])html = urlopen(url)##data = html.read()##decoded_data = data.decode('utf-8')
# htmlをBeautifulSoupで扱うsoup = BeautifulSoup(html, "html.parser")

# span要素全てを摘出する→全てのspan要素が配列に入ってかえされます→[<span class="m-wficon triDown"></span>, <span class="l-h...span = soup.find_all("span")
# print時のエラーとならないように最初に宣言しておきます。nikkei_heikin = ""
#<span class="economic_value_now a-fs26">28,812.63</span># for分で全てのspan要素の中からClass="mkc-stock_prices"となっている物を探しますfor tag in span: # classの設定がされていない要素は、tag.get("class").pop(0)を行うことのできないでエラーとなるため、tryでエラーを回避する    try:        # tagの中からclass="n"のnの文字列を摘出します。複数classが設定されている場合があるので        # get関数では配列で帰ってくる。そのため配列の関数pop(0)により、配列の一番最初を摘出する        # <span class="hoge" class="foo">  →   ["hoge","foo"]  →   hoge        string_ = tag.get("class").pop(0)
#<span class="economic_value_now a-fs26">28,812.63</span>        # 摘出したclassの文字列にmkc-stock_pricesと設定されているかを調べます        if string_ in "mkc-stock_prices":            # mkc-stock_pricesが設定されているのでtagで囲まれた文字列を.stringであぶり出します            nikkei_heikin = tag.string            # 摘出が完了したのでfor分を抜けます            break    except:        # パス→何も処理を行わない        pass
# 摘出した日経平均株価を出力します。print (nikkei_heikin)


# タイトルを文字列を出力#print (soup.title.string)
#https://aiacademy.jp/media/?p=341

 

ターミナルにて

python getNikkeiWebPageTitle.py

↓画像の数値が出た

28,812.63

 

参照URLにはCSVに出力される方法も記載される方法もあったが一旦ここまでで終わり

 

 

↓いつかしたい

Python Webスクレイピング テクニック集「取得できない値は無い」JavaScript対応@追記あり6/12 - Qiita