RealmでListやMapを保持

Realm for Androidでの話です

Realmではオブジェクトを利用して、データの永続化が行うことが可能です。

しかし、オブジェクト内のフィールドとして、ListやMapを保持するためにはひと工夫が必要でした。

RealmListを利用するとListの形で保持することはできます。これにより一対多の関係を作ることができます

これはこれでいいのですが、単純にListみたいにしたい場合はエラーになります

今回どうしても、Listにしたかったので、JSON形式で保存することにしました

@IgnoreでListはデータ永続化の対象外にしました。そのうえで、代入する場合、ListをJSONに変換して、itemsに代入します。取り出すときにはitemのJSONをListに変換して取り出します。永続化自体はString itemsでJSON形式の文字列で行われています。実際には細かいところでNULLチェックなどが必要になりますね

このアイディアの応用でシンプルな形式ならMapなどもなんとか行けます。

もっといいアイディアがあるはずだと思いますが、まずはこれで実現できました。

猫ちゃん判定アプリ作成への道(第1回:OpenCVで顔認識)

第1回:OpenCVで顔認識
〇開発環境
windows10
python3.6
PyCharm Community Edition 2017.1.5

〇OpenCVの導入
サイト
opencv_python‑3.2.0+contrib‑cp36‑cp36m‑win_amd64.whlをインストール

②コマンドプロントを開き 以下のコマンドを実行でインストール完

〇安倍総理とトランプ大統領、その他の人物の識別
参考

①参考サイトのソースまるまるコピー、ファイル格納場所およびラベル取得位置(安倍総理:001、トランプ大統領:002が取得できるように)修正
・トレーニング画像で安倍総理画像5枚(画像命名:aaa_001_1.jpg、aaa_001_2.jpg~aaa_001_5.jpg)、トランプ大統領画像5枚(画像命名:aaa_002_1.jpg、aaa_002_2.jpg~aaa_002_5.jpg)
計10枚を格納
・テスト画像で安倍総理画像2枚(画像命名:bbb_001_1.jpg、bbb_001_2.jpg)、トランプ大統領画像2枚(画像命名:bbb_002_1.jpg、bbb_002_2.jpg)
計4枚を格納
②動かしたがエラー。。。
error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale
③調べたところHaar-like特徴分類器を取得するPathが間違っていることが判明
cascadePath = “haarcascade_frontalface_default.xml”
→cascadePath = “C:/~/opencv/sources/data/haarcascades_cuda/haarcascade_frontalface_default.xml”
④実行→動いてくれた!!
トレーニング画像で学習した結果、テスト画像4枚をそれぞれ認識してくれた

⑤ただ現状人の顔を認識→トレーニングした画像から似た画像を返す動き
・試しに話題の稲田元防衛大臣とオバマ元大統領を入れて実施してみるとトランプと返ってくる(稲田さんに失礼かな。。。)
・小泉進次郎衆議院議員だと安倍総理と返ってきてしまう

⑥さすがに稲田さんがかわいそうなので画像のラベルから一致しない場合はそれ以外と表示するように修正。
→稲田さん、オバマさん、小泉さんはその他で表示された。現状正解率100%

次週 特徴分類機を自作にチャレンジ

最後に今回のソースを張っておきます!この行数でできるのはすごいですね!!