nosFilterサポートページ

2016-03-31

GoogleのCloud Vision APIを試してみた

17:46

Googleの画像認識&分類APIを試してみました。

http://jp.techcrunch.com/2016/02/19/20160218google-opens-its-cloud-vision-api-to-all-developers/

 

まずは登録

https://cloud.google.com/vision/

 

登録後、ドキュメンテーション読む

https://cloud.google.com/vision/reference/rest/v1/images/annotate?hl=ja

 

で、ドキュメンテーションの下方にTry it!と入力フォームが用意されているのでそれを使って試す。

フォーム入力の場合はURIの入力が不要だが、フォーム以外の入力の場合はAPI Keyが必要。

 

POST https://vision.googleapis.com/v1/images:annotate?key={YOUR_API_KEY}

{
	"requests": [{
		"image": {
			"source": {
				"gcsImageUri": "gs://[BUCKET_NAME]/fuga.jpg"
			}
		},
		"features": [{
			"type": "TYPE_UNSPECIFIED",
			"maxResults": 3
		}, {
			"type": "LANDMARK_DETECTION",
			"maxResults": 3
		}]
	}]
}

 

gcsImageUriはGoogle Cloud Storageに事前にアップロードされたファイルを指定し使用する。

直接アップする方法もあるようだが今回は省略。

 

入力フォームの場合、これでExecuteボタンを押すと実行される。

この例ではランドマークを解析。

 

で結果

やはり万能ではない様子。だが特徴的な建物などは高精度で認識された。

自然風景は無理か?ウユニ塩湖は認識されなかった。

顔認識はなかなか高精度。ただサンプル画像では手にりんごを持っていたがりんごは認識されなかった。

2016-03-23

iOS9.3でobserveValueForKeyPathが2度呼ばれる話

18:11

昨日公開されたiOS9.3の話。まずはコードを。

- (void)buttonTapped:(id)sender {
    NSLog(@"buttonTapped");
    
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"1" forKey:@"hogehogehoge"];
    [defaults synchronize];
}

- (void)viewDidLoad {
    [super viewDidLoad];   
    // Do any additional setup after loading the view, typically from a nib.
    UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn1 addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
    [btn1 setFrame:CGRectMake(0, 20, 100, 44)];
    [btn1 setTitle:@"test" forState:UIControlStateNormal];
    [self.view addSubview:btn1];
    
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    [defaults addObserver:self forKeyPath:@"hogehogehoge" options:0 context:nil];    
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{    
    if ([keyPath isEqualToString:@"hogehogehoge"]) {
        NSLog(@"observeValueForKeyPath object = %@ change = %@ context = %@", object, change, context);
    }
}

で実行結果

iOS9.2

016-03-23 17:54:44.916 ios93Test[11457:4534369] buttonTapped
2016-03-23 17:54:44.920 ios93Test[11457:4534369] observeValueForKeyPath object = <NSUserDefaults: 0x13ed06d90> change = {
    kind = 1;
} context = (null)
2016-03-23 17:55:00.574 ios93Test[11457:4534369] buttonTapped
2016-03-23 17:55:00.575 ios93Test[11457:4534369] observeValueForKeyPath object = <NSUserDefaults: 0x13ed06d90> change = {
    kind = 1;
} context = (null)

iOS9.3

2016-03-23 18:07:19.694 ios93Test[1467:322189] buttonTapped
2016-03-23 18:07:19.697 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = {
    kind = 1;
} context = (null)
2016-03-23 18:07:19.698 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = {
    kind = 1;
} context = (null)
2016-03-23 18:07:23.509 ios93Test[1467:322189] buttonTapped
2016-03-23 18:07:23.509 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = {
    kind = 1;
} context = (null)
2016-03-23 18:07:23.509 ios93Test[1467:322189] observeValueForKeyPath object = <NSUserDefaults: 0x13d608c20> change = {
    kind = 1;
} context = (null)

なーぜか、2回呼ばれる。

UnityのPlayerPrefsから来る時も2回。

さてググっても全くヒットしないのですが、僕だけでしょうか・・

2014-07-04

画面のロック、アンロックを検知する方法

| 10:02

厳密には画面のロック状態が変更されたことを検知する方法、になります。

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
                                        NULL, // observer
                                        displayStatusChanged, // callback
                                        CFSTR("com.apple.springboard.lockcomplete"), // event name
                                        NULL, // object
                                        CFNotificationSuspensionBehaviorDeliverImmediately);
        
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
                                        NULL, // observer
                                        displayStatusChanged, // callback
                                        CFSTR("com.apple.springboard.lockstate"), // event name
                                        NULL, // object
                                        CFNotificationSuspensionBehaviorDeliverImmediately);

----

static void displayStatusChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
}

参考

http://stackoverflow.com/questions/14229955/is-there-a-way-to-check-if-the-ios-device-is-locked-unlocked

ゆどうふゆどうふ 2014/07/08 00:01 ありがとうございます。
まだじっくり読んでいませんが、ひとまずお礼を。
参考にさせていただきます。

ゆどうふゆどうふ 2014/07/14 23:59 検知方法を書いていただき、ありがとうございます。

新たに質問をお願いしたいのですが、
「mosimo」では、アプリがバックグラウンドで動作中でも
ロック判定を行い、瞬時に処理を行っているように見えますが、
どのような方法を使っているのでしょうか?
私の知識が足りていないとは思うのですが、
アプリがメインで実行されている時にロックのオンオフ検知は
出来たのですが、バックグラウンドタスク状態での
ロック検知が出来なかったので質問させていただきます。

続いての質問で申し訳ないです。

nosfilternosfilter 2014/07/15 09:50 ゆどうふさん
おはようございます。
ええと、これは普通にやっているとしか回答しようがないです^^;
特別な事は何もしてないですよ。

詳細な状況は不明ですが、まずはタイマー動かすなどしてオンオフ検知以外の動作が正常に稼働しているか調べるのは如何でしょうか。
すでに行っていたらごめんなさい。

ゆどうふゆどうふ 2014/07/15 19:35 早速の返信、ありがとうございます。
一つ一つ確認していきたいと思います。

ゆどうふゆどうふ 2014/07/27 23:42 報告が遅くなってしまい、すいません。
無事、ロック検出は実現出来ました。ありがとうございます。

ただ、「mosimo」ですと、アプリ起動後に即ロック状態にしても
問題なく動作しますが、現在こちらが作っているものでは
一度バックグラウンド処理が動いてからでないと、ほぼ検出してくれません。
こちらも、何か特別なことを実施されているのでしょうか?

nosfilternosfilter 2014/07/28 10:23 ゆどうふさん、おはようございます。
こちらも特別な事は何もしていないですね。
確認ですが、以前の投稿ではフォアグラウンドでは正常に動作しバックグラウンドで動作しなかったのが、今度はバックグラウンドで動作しフォアグラウンドで動作しなくなったという事でしょうか。

ゆどうふゆどうふ 2014/07/30 23:09 こんばんは。
返信、ありがとうございます。

いえ、バックグラウンドでもフォアグラウンドでも
ロック検出が動作してくれています。

ただ、アプリ起動直後にロックをしてもロック検出がされないようで、
エミュレータや実機での動作を見る限り、一度バックグラウンドタスクが
動いた場合のみ、検出をしてくれるようになっているようなので。

application didFinishLaunchingWithOptionsイベントで
CFNotificationCenterAddObserverの記述をしている状態です。

nosfilternosfilter 2014/08/01 09:58 なるほど。場所的には妥当に見えますが・・・
あとは記述する場所を変えて試してみるくらいですかね。。

2014-04-19

新アプリ「もしも」をリリースしました

| 21:19

アプリ「もしも」をリリースしました。

長時間ロック状態が続くとメールを送ってくれる、もしもの時に活躍するかもしれないアプリです。

もともとは一人暮らし向けの、急病で寝るしかなくて

スマホにまで気が回らない時にあると助かるアプリとして考えたのですが、

小中高生のお子様にスマホを持たせている親御さんが

お子様のスマホインストールしてあげても使えるかもしれません。

いや使われないに越したことはないのですが。

f:id:nosfilter:20140419211553p:image:w360

設定画面。画面はこれだけ。

位置情報の送信やFacebook, Twitterへの送信もここで有効、無効にできます。

f:id:nosfilter:20140419211554p:image:w360

常時バックグラウンドで稼働し、画面がロックされるとONになります。

f:id:nosfilter:20140419211555p:image:w360

画面がロック解除されるとOFFになります。

ダウンロードはこちら

https://itunes.apple.com/jp/app/moshimo-zhang-shi-jianrokku/id847342417?mt=8

ゆどうふゆどうふ 2014/07/03 23:38 突然のコメント、失礼致します。

私もXcodeを使ってアプリを開発し始めた初心者なのですが、
どうしてもロック状態/解除の判定を使いたいと思っていまして、
調べている時に、このアプリの存在を知り、DLさせて頂きました。

もし宜しければ、お手数ですがどのような方法を使っているのか
教えていただくことは出来ないでしょうか?

勝手なご連絡ですが、よろしくお願い致します。

nosfilternosfilter 2014/07/04 09:52 ゆどうふさん
おはようございます。コメントありがとうございます。
やり方ですが全然いいですよ。記事書きますね。

BTFLY_MisterBTFLY_Mister 2015/09/27 15:35 突然失礼致します。mosimoアプリ、もしもの時用に常用させて頂いています。初版リリースされてからインストールしたっきりで、動作確認もしていませんでした。今日になって、一応設定確認をしようと設定画面をみたところ、新たに「定時報告を行う」という設定が追加されていました。この機能はどのような動作を行うのでしょうか?
お忙しいところ、恐れ入りますが、教えてください。

nosfilternosfilter 2015/10/30 20:33 BTFLY_Misterさん、返信遅れてしまいごめんなさい。「定時報告を行う」は1時間に1回、「定時巡回 : 最後のロックは3時間50分前です。 : 35.123456, 139.345678」のような形で定時報告を行います。末尾の数字は緯度経度です。

森 2016/06/08 03:25 さきほどアプリをダウンロードさせていただきました
アプリを起動後、ホームボタンでホームに戻ってから電源ボタンを押してもONの通知がこないのは仕様でしょうか?

森 2016/06/08 03:25 さきほどアプリをダウンロードさせていただきました
アプリを起動後、ホームボタンでホームに戻ってから電源ボタンを押してもONの通知がこないのは仕様でしょうか?

森 2016/06/08 03:25 さきほどアプリをダウンロードさせていただきました
アプリを起動後、ホームボタンでホームに戻ってから電源ボタンを押してもONの通知がこないのは仕様でしょうか?

2014-01-07

mmView 1.1.0アップデート申請

23:18

f:id:nosfilter:20140107231248p:image

プライベート制作の時間がなかなか取れない今日このごろ。

皆様如何お過ごしでしょうか。


さてmmViewのアップデートです。

正月休みで少し時間が出来たので一気にやりました。

・ソース作り直し。UIは同じだけど中身は一新。

・ARC対応

・iOS7対応。ようやくできた。

 普段は画像パーツをふんだんに使ったものを作っているので

 ここはあえて基本的なUIKitの部材のみを使ったもので継続。

・アルバム編集後に落ちる、アルバム編集時にチェックボックスが違う画像に付くなどのバグを修正。


です。