はじめに
R/Knitで、bibtexのリファレンスの処理ができなくなったと思ったら、pandocが消えてるっぽい。
Pandocというのは、文書作成ツール や出版作業時に用いられるドキュメント・コンバータの1つであり、、、、
なので、pandocを再度インストールしてみた。
pandocのインストール
#インストール brew install pandoc #バージョン確認 pandoc -v
brewコマンドで、すぐにインストールできて無事に解決したので良かった。
R/Knitで、bibtexのリファレンスの処理ができなくなったと思ったら、pandocが消えてるっぽい。
Pandocというのは、文書作成ツール や出版作業時に用いられるドキュメント・コンバータの1つであり、、、、
なので、pandocを再度インストールしてみた。
#インストール brew install pandoc #バージョン確認 pandoc -v
brewコマンドで、すぐにインストールできて無事に解決したので良かった。
Amazon Web Services(AWS)とは、 Amazon.comにより提供されているクラウドコンピューティングサービスである。
今回、AWSサービスを管理するための統合ツールである、 AWS CLIのインストールとかセットアップについてまとめてみた。
まずは、ターミナルを起動して、
Homebrew
をアップデートして、awscli
をインストールする
#Homebrewのアップデート brew update #awsを検索する brew search aws #AWS CLIのインストール brew install awscli #パス確認 which aws #/usr/local/bin/aws #バージョン確認 aws --version #aws-cli/2.2.43 Python/3.9.7 Darwin/19.6.0 source/x86_64 prompt/off
次に、各種設定について示す。 ここでは、Bioconductorへの登録時に行った実行コマンドを例に示す。
#アクセスキーの設定 aws configure --profile AnnotationContributor
ここで、BioCから教えてもらった、Access KeyとSecret Keyをコピペする。
Default region nameは、「ap-northeast-1」と入力
Default output format は、「text」と入力
ちゃんと、設定されてるかの確認をする。
#config cat ~/.aws/config #credentials cat ~/.aws/credentials
ここでは、BioImageDbsパッケージのデータをAWSにアップロードした事例を紹介する。
まず、AWSにアクセスして、フォルダやファイルを確認する。
#ディレクトリ確認 aws --profile AnnotationContributor s3 ls s3://annotation-contributor/ --recursive #BioImageDbsフォルダを確認する aws --profile AnnotationContributor s3 ls s3://annotation-contributor/BioImageDbs --recursive #はじめは、何もアップされいない。
ファイルをサーバーにコピーする。その場合には、cpコマンドを使う。
ローカルのv01フォルダをBioImageDbs/v01にコピーしたときの実行したコマンドを示す。
#ファイル・コピー aws --profile AnnotationContributor s3 cp v01 s3://annotation-contributor/BioImageDbs/v01 --recursive --acl public-read #アップロードされたか確認 aws --profile AnnotationContributor s3 ls s3://annotation-contributor/BioImageDbs --recursive
AWS cliのインストールコマンドは、MacとCentOSとではやや違う。
CentOSの場合は、以下の通りである。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install #パス確認 which aws
An error occurred (RequestTimeTooSkewed) when calling the ListObjectsV2 operation: The difference between the request time and the current time is too large.
というエラーが出た時は、結構面倒だけど、以下の方法で、時計を合わせる必要がある。。
date #ntp無効 sudo timedatectl set-ntp no timedatectl status #いまの時間をセットする sudo timedatectl set-time "2021-04-19 14:45:00" #コントロール + c で終了 #ntp有効 sudo timedatectl set-ntp yes timedatectl status
手作業をできるだけ抑えて、 機械学習・ディープラーニング(DL)用の画像データを手っ取り早く取得したい!!
ふと思いたち、、今回、Google画像検索の結果をスクレイピングして、 画像データ(サムネイル)を取得して、それらをR/Keras用の4次元アレイデータに変換するプログラムを作成してみた。
実務としては、 rvestパッケージとかEBImageパッケージとかを使うことで実装した。
主な用途としては、GANとかで使うDL学習用の画像データを収集するのを想定している。
#パッケージの読み込み library(magrittr) library(EBImage) library(rvest)
rvestの使い方の基本は、以下の記事を参照のこと。
今回、GoogleImage2Array
関数とdisplay.4dArray
関数を以下の通り定義した。
GoogleImage2Array
関数のデフォルトのパラメータでは、
64x64ピクセル(wh=64)の画像に変換する。
また、画像をローカルに保存しない(Save=FALSE)。
#Google画像検索で取得した画像サムネイルから4次元アレイデータを作る関数 GoogleImage2Array <- function(Query, wh=64, Save=FALSE){ url <- URLencode(paste0("https://www.google.co.jp/search?q=", Query, "&btnG=Google+Search&tbs=0&safe=off&tbm=isch")) imgsrc <- xml2::read_html(url) %>% rvest::html_nodes(xpath = '//img') %>% rvest::html_attr('src') %>% .[startsWith(., "https://")] #アレイデータを格納する変数 Dat <- NULL for(n in 1:length(imgsrc)){ #n <- 1 #URLを取り出す imgsrc00 <- imgsrc[n] #ローカルに保存する場合には、TRUEにする if(Save){ download.file(imgsrc00, paste0("Image_", formatC(n, width = 3, flag = "0"),".jpg"), mode = "wb") } #画像読み込み Img <- EBImage::readImage(imgsrc00, type="jpg") #EBImage::display(Img, method="raster") #リサイズ ImgR <- EBImage::resize(Img, w = wh, h=wh) #str(ImgR) ImgRArray <- array(ImgR, dim=dim(ImgR)) #str(ImgRArray) Dat[[n]] <- ImgRArray } #listからアレイに変換 Tensor <- base::aperm(base::simplify2array(Dat), c(4, 1, 2, 3)) #str(Tensor) #出力 return(Tensor) }
display.4dArray
関数のQueryパラメータには、
GoogleImage2Arrayと同じ変数を入れる。
また、デフォルト設定で画像をローカル保存する(Save=TRUE)。
#アレイデータを可視化・画像保存する関数 #Queryには、GoogleImage2Arrayと同じ変数を入れる。画像をローカル保存する(Save=TRUE)。 display.4dArray <- function(x, Query=NULL, Save=TRUE){ par(mfrow=c(4,5), mar=rep(0, 4)) for(n in 1:dim(x)[1]){ #n <- 1 plot(t(as.raster(x[n,,,], max=max(x[n,,,])))) } if(!is.null(Query)){ if(Save){ quartz.save(paste0("Image_", Query, ".png"), type = "png") } } }
#クエリの準備 Query <- "ペルシャ猫" #検索&画像取得 images <- GoogleImage2Array(Query) #アレイの情報 str(images) #num [1:20, 1:64, 1:64, 1:3] 0.789 1 0.144 0.519 1 ... #可視化 display.4dArray(images, Query=Query)
#クエリの準備 Query <- "広末涼子" #検索&画像取得 images <- GoogleImage2Array(Query) #アレイの情報 str(images) #num [1:20, 1:64, 1:64, 1:3] 1 0.735 0.976 0.643 0.855 ... #可視化 display.4dArray(images, Query=Query)
Webスクレイピングの関連図書を列挙しておきます。
さくっと、画像が取得できて、素晴らしい!
Google検索の仕様が変わらない限りは、当分の間、使い続けられそうである。
ただ現状、一度に、20枚の画像しか取得できないのは課題かも。