SikuliからMongoDBにアクセスする(その2)-画像を保存
SikuliからMongoDBにアクセスする(その1)の続きとなります。
ソフト等 | バージョン | 備考 |
---|---|---|
Windows 10 Pro | 64ビット | |
Java 8 | update 71 | |
sikuli | 1.1.1 | 20151126.001204-18(Jython2.7.0) |
Java MongoDB Driver | 3.0.4 |
まずは、mongofilesで動作確認。
色々調べてみたのですが、いまいち登録のイメージが分からなかったので、mongofiles.exeを使って、登録してみます。
スクリーンショットくらいならGridFS使う必要無いかもしれませんが、今後のことを考えてGridFSを使ってみます。
ローカルに用意したファイル(C:\mongoDB\20160207-202331.png)を、mongofiles.exeを使って、imgデータベースに登録してみた結果が次の通り。
C:\mongoDB\bin>mongofiles /v /host:S2016TP4 /db:img put c:\mongoDB\20160207-202331.png
2016-02-07T20:51:23.409+0900 using write concern: w='1', j=false, fsync=false, wtimeout=0
2016-02-07T20:51:23.414+0900 connected to: S2016TP4
2016-02-07T20:51:23.414+0900 handling mongofiles 'put' command...
added file: c:\mongoDB\20160207-202331.png
Robomongoでimgデータベースを見ると、fs.chunksとfs.filesの2つのコレクションが出来ています。
Sikuliで登録。
なんとなく登録のイメージが分かったところで、ネットを検索しまくりつつSikuliで組んでみたソースが次のもの。
# -*- coding: UTF-8 -*-
import java.io.File
import datetime
# MopngoDB JDBCドライバ
load("C:\mongoDB\mongo-java-driver\mongo-java-driver-3.0.4.jar")
import com.mongodb.MongoClient;
import com.mongodb.gridfs;
# Client,DB,GridFSの接続
cli = com.mongodb.MongoClient( "s2016tp4" );
db = cli.getDB( "img" );
gridfs = com.mongodb.gridfs.GridFS(db);
# 画面キャプチャ
filename = java.io.File(capture(SCREEN));
# GridFSにファイルを設定
gfsinputfile = gridfs.createFile(filename);
gfsinputfile.setContentType("image/png");
# ファイル名は扱いやすいよう「日-時」にしておく
now = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
gfsinputfile.setFilename("%s.png" % now);
# 登録する
gfsinputfile.save();
Sikuliは、capture(SCREEN)で画面イメージをテンポラリのpngファイルにしてファイル名を返してくれるので、それをMongoDBのGridFSを使ってimgデータベースに登録します。
実行した後のMongoDBの状況が次の通り。なんとなく登録できたっぽいです。
mongofiles.exeで取り出してみる。
今日は時間切れなので、取り出しはmongofiles.exeでやってみます。
C:\mongoDB\bin>mongofiles /v /host:s2016tp4 /db:img get 20160207-231053.png
2016-02-07T23:20:27.253+0900 using write concern: w='1', j=false, fsync=false, wtimeout=0
2016-02-07T23:20:27.261+0900 connected to: s2016tp4
2016-02-07T23:20:27.262+0900 handling mongofiles 'get' command...
finished writing to 20160207-231053.png
取り出せたようです。
以下が実際に取り出したファイルそのものになります。
なぜか、右と下に不要な黒枠がついてしまっていますが、原因究明はまた今度。。。