LoginSignup
5
7

More than 5 years have passed since last update.

SikuliからMongoDBにアクセスする(その2)-画像を保存

Last updated at Posted at 2016-02-07

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つのコレクションが出来ています。

chunks.png

files.png

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の状況が次の通り。なんとなく登録できたっぽいです。

chunks2.png

files2.png

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

取り出せたようです。

local.png

以下が実際に取り出したファイルそのものになります。

20160207-231053.png

なぜか、右と下に不要な黒枠がついてしまっていますが、原因究明はまた今度。。。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7