Hatena::ブログ(Diary)

Over&Out その後 このページをアンテナに追加 RSSフィード Twitter

2012-09-30

vImageで領域分割/セグメント化/輪郭抽出/ラベリング

人間から見て"納得感"のある画像処理をしようと思うと、領域分割(セグメント化)をしたくなる場合が多々あります。


たとえば、人物と背景とを別々に処理したい、とか、人の肌の部分だけに処理をしたい、とか。


OpenCVではそういった「領域分割」を行ってくれる関数が何種類か用意されていますが、vImageでもそういう機能があるのかないのか、調べてみました。


OpenCVにある領域分割系の関数

vImageのドキュメントを調べる前に、メソッド名とか説明にあるキーワードを見逃さないように、まずOpenCVでの画像領域分割系関数を洗い出してみました。

  • 画像ピラミッドを用いた領域分割: cvPyrSegmentation
  • 平均値シフト法による領域分割: cvPyrMeanShiftFiltering
  • Watershedアルゴリズムによる画像の領域分割: cvWatershed
  • 輪郭の検出と描画: cvFindContours

ざっと調べてみてひっかかったOpenCVの機能はこの辺り。


結論

ここからリンクしてあるAppleのvImage関連ドキュメントを全部(9本!)漁りましたが、結論として、今のところvImageには領域分割系の機能はないようです。(勘違いしてたらすいません!)


ローレベルの機能を組み合わせて自前で処理を実装するか、おとなしくOpenCVを使うか。。



2012-09-29

インストールされているアプリの一覧をログ出力する "iOSInstalledApps"

以前、『デバイスにインストールされているアプリ一覧を取得する』という記事を書いたのですが、ここに書いた

  1. アプリのプロセス名一覧を持っておいて、そのプロセスが存在すればインストールされていると判断する
  2. アプリのカスタムURLスキーム一覧を持っておいて、そのカスタムURLスキームが使用可能であればインストールされていると判断する

この2つの方法を実装しているOSSがありました。


(リポジトリURL)

https://github.com/arg0s/iOSInstalledApps


ビルドして実機で実行すると、コンソールにわらわらとログが出てきます。



自分の実機で試してみた結果がこちら。

2012-09-28 17:25:53.668 iOSInstalledApps[837:907] Process List: (

"kernel_task",

launchd,

UserEventAgent,

wifid,

timed,

syslogd,

powerd,

lockdownd,

installd,

deleted,

mediaserverd,

mDNSResponder,

locationd,

imagent,

iaptransportd,

fseventsd,

"fairplayd.N94",

AppleIDAuthAgent,

configd,

backboardd,

kbd,

CommCenter,

BTServer,

notifyd,

itunesstored,

(以下略)

)

2012-09-28 17:25:53.704 iOSInstalledApps[837:907] Installed apps: {

"fb:" = 1;

instagram = 0;

"mailto:" = 1;

"sms:" = 1;

"tel:" = 1;

"twitter:" = 0;

}


このログをみると、"Process List" の方は、アプリではないプロセス名がたくさん見受けられます。どうやら、プロセス名一覧を出力してるだけで、アプリのプロセスかどうか、の判断はしてないようです。


また、"Installed apps" の方は、"fb:", "twitter:" 他、6行しか出てきていません。

おや?と思いコードをみると、

NSArray* schemes = @[ @"tel:", @"sms:", @"mailto:",@"mailto:",@"fb:",@"twitter:",@"instagram"];

となっていて、上記配列で定義されたカスタムURLスキームを持つアプリがあるかどうか判定してるだけのようです。


プロセス名とアプリ名、スキームとアプリ名の対応リストが plist 形式か何かでリポジトリに入ってることを期待したのですが・・・



LLInstalledApps クラス

前述した通り判定用のデータはあまり充実してなかったのですが、そちらはあくまでデモプロジェクトで、本体は LLInstalledApps クラス、という位置づけのようです。


で、このクラスは、この用途において使い回しやすいようにつくられていて、

+ (NSArray *) runningApps;
- (BOOL) appsInstalledWithScheme:(NSString *)applicationScheme;
+ (NSDictionary *) appsInstalledWithSchemes:(NSArray *)applicationSchemes;

こんな感じでプロセス一覧を返してくれたり、スキーム一覧の配列を渡せばインストールされてるかどうかの判定結果をNSDictionary型で返してくれたりするメソッドを備えています。



(参考記事)

iOSに何がインストールされているのか調べる「iOSInstalledApps」



2012-09-28

シンプルで使いまわしやすいトゥイーンライブラリ "AHEasing"

以前 gihyo.jp に『様々なアニメーションを実現するiOSアプリ用トゥイーンライブラリ3種を比較!』という記事を書かせていただいたのですが、そこで紹介した3つよりも良さげなトゥイーンライブラリがあったので、紹介します。


warrenm / AHEasing


まだデモ動かしてソースをざっと見ただけなのですが、どこが良いと思ったかというと、


  • 本体は CAKeyframeAnimation+AHEasing カテゴリのみ
  • easing.h / easing.c は、イージング関数の定義だけが切り出してあるので、カスタムイージング関数が作りやすい
  • ソースが非常にシンプル
    • CAKeyframeAnimation+AHEasing.m はコメント含め100行もない
    • APIもシンプル。
  • デモがわかりやすい
    • タップした場所に指定イージングでアニメーション移動する
    • イージングカーブをグラフで表示してくれる
    • できることを一通り網羅してある

f:id:shu223:20120928192242p:image:w320

  • デモについている EasingFunctionGraphView というクラスが便利そう
    • イージング関数を渡せばグラフ描画してくれる
    • 依存ライブラリとかもなく、このクラス(と easing.h)だけで完結する

といったところ。



あとはキーパス名を enum で定義しておいたりすればもっと気軽に使えそうです。

(githubにそういう定義ファイルが落ちてそう)

CALayer でアニメーションさせられるプロパティ一覧



2012-09-27

iPhoneアプリ開発(iPhone SDK)の解説本、一挙14冊レビュー

昔書いてたブログからの転載です。


書いた日時が「2010年1月23日」ととても古く(iOS 3 時代!)、さらにiOSアプリ開発者としてもプログラマとしても初心者の頃に書いたものなので、あまり参考にならないかもしれませんが、一番の人気記事でもあったので、iOS開発者の方々からのアクセスのある当ブログに転載することにしました。


なお、改訂版の出ているものはタイトルを更新しています。



(以下、転載記事)



家にiPhoneアプリ開発関係の本が増えてきたので、

ちょこっとずつ感想を書いてみます。



基礎からのiOS SDK

基礎からのiOS SDK
基礎からのiOS SDK
posted with amazlet at 12.09.27
鶴薗 賢吾 松浦 健一郎 司 ゆき
ソフトバンククリエイティブ
売り上げランキング: 333923


この本が秀逸なのは、

序盤のサンプルがいきなりウェブブラウザ

ってところです。


ウェブブラウザなんて、

作るのめっちゃ難しそうですよね。


でもiPhone SDKだと、意外に簡単にできてしまいます。


この本の手順通りに数行程度のコードを打ち込んでビルドすると、

シミュレーターが起動してWebページが表示される!


僕のスタートはまさにここからでした。



iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
赤松 正行
秀和システム
売り上げランキング: 24980


「これにしか載ってない情報」ってのがあまりなくて、

しかも手にしたのが入門時じゃなかったので、

僕はほとんど開く機会がありませんでした。


サンプルアプリが充実してます。

初めて作った余命電卓というアプリは、

この本のAgeというアプリを参考に作成しました。



ライトウェイト・プログラマのためのiPhoneアプリ開発ガイド

ライトウェイト・プログラマのためのiPhoneアプリ開発ガイド
百瀬 健太 古渡 晋也 プロモバイル株式会社
翔泳社
売り上げランキング: 451103


これは・・・一度も役に立ったことがないw

  • 薄い本なので、初心者には解説が不十分
  • サンプルにいろんな応用要素が入り交じってて初心者には解読不可
  • 「これにしか載ってない情報」もないので開発に慣れてきても出番なし

装丁がポップなので買っちゃう人多そうだなー



はじめてのiPhone3プログラミング

はじめてのiPhone3プログラミング
Dave Mark Jeff LaMarche
ソフトバンククリエイティブ
売り上げランキング: 207491


一番お世話になってるのはこの本かも。


TabBarアプリを初めて作ったときも、

TableViewアプリを初めて作ったときも

参考にしたのはこの本のチュートリアル。


翻訳本独特のノリとか読みにくさはあるけど、

プロジェクト作成から丁寧に手順が書いてあります。


さらにこの本のいいところは、

SQLite(CoreData)とか検索機能とか、

他の本には載ってないかちょっとしか触れられてないことも

詳細なチュートリアルが載ってたりして、

入門以降も使える点!


改訂版もでてるようです。

オススメ。



iPhone SDK Programming Manual

iPhone SDK Programming Manual
iPhone SDK Programming Manual
posted with amazlet at 12.09.27
株式会社テクノロジックアート
ソーテック社
売り上げランキング: 509550


クラス図とか載っててわかりやすそうと思い購入。


でも結局他の解説本の方がわかりやすくて

ほとんど開く機会がありませんでした・・・

情報の網羅性も低いです。


あ、XMLパースはこの本で勉強したかも。



詳解 Objective-C 2.0 第3版

詳解 Objective-C 2.0 第3版
荻原 剛志
ソフトバンククリエイティブ
売り上げランキング: 3540


UIKitとかの解説は当然なし。

かといってNS系クラスの個別の解説が充実してるわけでもなく、

プログラミング言語としての解説が中心なので、

あまり僕は開く機会がなかったです。

(細かいところだと、NSNullの解説に助けられたことはあります)


プログラマ思考(志向)の人にはいいかもしれません。



iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)

iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)
木下 誠
アスキー・メディアワークス
売り上げランキング: 398736


StoreKitについてちゃんと解説してくれてるのは

僕の所有してる中ではこの本だけ。


あとCoreDataのチュートリアルもわかりやすかったです。


情報の網羅性高し。

解説もわかりやすい。



iPhone デベロッパーズ クックブック

iPhone デベロッパーズ クックブック
Erica Sadun
ソフトバンククリエイティブ
売り上げランキング: 291869


iPhoneアプリの技術書としては比較的初期に出た方だけど、

実践で使えて、他にあまり載ってないようなレシピがいろいろあって

意外と役立ちます。



Open GL ES 2.0 プログラミングガイド

Open GL ES 2.0 プログラミングガイド
Aaftab Munshi Dan Ginsburg Dave Shreiner アフタブ・ムンシ ダン・ギンズバーグ デーブ・シュライナー
ピアソン桐原
売り上げランキング: 50115


3Dアプリの見積もり依頼がきたことがあって、

ちょうどその頃に発売されて即購入。


失注したのでその後開いてませんw



iPhoneアプリネットワーク+GPSプログラミング

iPhoneアプリネットワーク+GPSプログラミング
橋本 佳幸
秀和システム
売り上げランキング: 228529


入門書ではありませんが、

Instruments使ったメモリリークの調べかたとか、

Shark使ったパフォーマンスチューニングとか、

セカイカメラっぽい空間マッピングARとか、

他に載ってない有用な情報が盛りだくさん!



iPhone SDK アプリケーション開発ガイド

iPhone SDK アプリケーション開発ガイド
Jonathan Zdziarski
オライリージャパン
売り上げランキング: 38381


情報の網羅性が高く、

リファレンスとして有用度が高いです。


なんかiphone開発してる人はみんな持ってるイメージがある。

とりあえず買っときましょうw



iPhoneプログラミングUIKit詳解リファレンス


ついこないだ出たばかりの本。

もっと早く出て欲しかった!

今となってはこの辺はXcodeで定義見た方が早いので・・・



ユメみるiPhone ―クリエイターのためのiPhone SDKプログラミング

ユメみるiPhone ―クリエイターのためのiPhone SDKプログラミング
徳井 直生
ワークスコーポレーション
売り上げランキング: 322075


技術書としては読んでません。

巻末のfladdictさんも参加してる座談会がおもしろかった。



iPhoneアプリ成功の法則

iPhoneアプリ成功の法則
日経BP社出版局
日経BP社
売り上げランキング: 214326


技術書じゃないけど、

TiltShift Generatorを実装した森さんの項が

技術的に大変参考になりました。




まとめ

個人的なおすすめをまとめると、

こんな感じになります。


「まずはちょっとだけSDKを触ってみたい」という方には

基礎からのiPhone SDK










これからしっかりアプリ開発をやっていきたい方には

はじめてのiPhoneプログラミング










アプリリリースの目処がついたら

もしくはARアプリなどに興味があれば

iPhoneアプリネットワーク+GPSプログラミング










リファレンスとして持っておきたい

iPhone SDK アプリケーション開発ガイド

iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)

iPhoneプログラミングUIKit詳解リファレンス













 

2012-09-23

iOS 6 新機能のサンプルコード/ライブラリのまとめ33個

「英語のリファレンスだけじゃよくわからん、動くサンプルが欲しい!」という僕のために、NDA解禁されたてほやほやの iOS 6 関連のサンプルコード/オープンソースライブラリ等を集めてみました。


UICollectionView

1. iOS6-Playground

iTunesから取得したムービーのカバー画像を、UICollectionView を用いて様々なレイアウトで表示するサンプルコードです。


f:id:shu223:20120923042659p:image:w460


UICollectionViewController, UICollectionViewCell, UICollectionViewLayout, UICollectionViewFlowLayout 等、UICollectionView 関連の新クラスは一通り使われています。


StoreKit に新たに追加された SKStoreProductViewController も使われていて、参考になります。


2. CircleLayout / LineLayout / PinchIt

WWDC 2012 の

  • Introducing Collection Views
  • Advanced Collection Views and Building Custom Layouts

というセッションのサンプルコード一式。


f:id:shu223:20120923043819p:image:w420

(※Xcode4.5でビルドしようとするとエラーになりましたが、QuartzCoreのインポートで解決しました)


3. Collection View 基本的な使い方

タイトルからもわかる通り、日本語で、Collection View の使い方について書かれた解説記事です。

スクリーンショット付きで、とてもわかりやすいです。


f:id:shu223:20120923065524p:image:w160


上記のようなサンプルコードを github からDLできます。


4. GridPhotoViewer

UICollectionViewを用いたフォトビューア。

(写真へのアクセスが求められるので、写真の入っている実機で動作させてみてください)


5. colorview

Collection View を用いたサンプル。セルをタップするとニュッとアニメーションします。


f:id:shu223:20120923163904p:image:w160


6. UICollectionView-NSFetchedResultsController

タイトルの通り UICollectionView と NSFetchedResultsController を一緒に使うサンプルです。(が、デモプロジェクトがついてないのですぐに試せません。。)



MapKit

1. GoogleMapsOverlayiOS

あまり評判の宜しくない iOS6 のマップに、Google Map をオーバーレイするライブラリです。


f:id:shu223:20120923120707p:image:w160


こうやってスクリーンショットでみると見慣れた Google Map なのであまりありがたみが感じられませんが、iOS 6 の実機で動かすとなかなか嬉しいものがあります。


2. YAMapKit

MapKitの置き換えフレームワーク

前述の GoogleMapsOverlayiOSと同じく Google Maps API を利用していますが、こちらは MapKit.framework と置き換えてそのまま使える、というコンセプトで開発されています。


(9/23現在 "under construction" とありますが、リポジトリにあるデモプロジェクトを動かしてみたところ、もう地図表示やズーム、スクロールなどの基本機能はできていました)


3. iOS 6 でマップアプリの経路を開く

MapKit に新たに追加された MKMapItem クラスを使用してマップアプリの経路を開くサンプルコードです。


4. RegionDefiner / WWDCTransit

WWDC 2012 の "Getting Around Using Map Kit" セッションのサンプルコードです。


f:id:shu223:20120923092742p:image:w160


5. GRouting

MapKit に追加された MKDirectionsRequest クラスと Google Maps API を用いてルーティングを行うデモ。


f:id:shu223:20120923163633p:image:w160


Google Maps API に問い合わせを行う部分は ServiceManager クラスとして切り出されていて、

- (void)findRouteFromLocation:(CLLocation*)fromLocation toLocation:(CLLocation*)toLocation;

こんな感じのわかりやすいメソッドで呼び出せるので、ライブラリとしても使いやすそうです。



Social Framework

1. iOS6で追加されたSocial Framework、SLComposeViewControllerのサンプルコード
2. social frameworkをつかってFacebookとTwitterへの投稿ボタンを作ってみる

SLComposeViewController を使用して Facebook に投稿するチュートリアル。

どちらの記事もスクリーンショットつきでとてもわかりやすいです。


f:id:shu223:20120923173719p:image:w160


3. Mac OSでも楽チン ツイート その2 Social.framework

SLComposeViewController ではなく SLRequest を使うサンプルコード。

(Mac OSのコードですが、iOSでも参考になると思います。)

Twitter フレームワークのときも、TWRequest や ACAccountStore を使う方法についての記事は少なかったので、大変ありがたいです。


4. Twitter---Facebook-integration-for-iOS6

TwitterとFacebookへ投稿するサンプルプロジェクト


f:id:shu223:20120923063619p:image:w160


5. Social-Framework-iOS6

Social.framework の SLComposeViewController の serviceType 引数を用いて Facebook / Twitter / Weibo へ投稿するサンプル。


f:id:shu223:20120923163526p:image:w160


Show all ボタンを押すと UIActivityViewController が立ち上がります。



UIActivity

1. buffer-uiactivity

UIActivity, UIActivityViewController を用いたサンプルコード。


f:id:shu223:20120923052239p:image:w160


2. DMActivityInstagram

UIActivity を用いた、Instagram への投稿機能をアプリに付加できるライブラリです。


f:id:shu223:20120923063805p:image:w130


リポジトリにはデモプロジェクトが入っており、Instagram がインストールされているデバイスで実行すると、上記のように UIActivityViewController に Instagram へのシェアボタンが現れます。

(ただし9/23現在ではデモの実行には少々ソースの修正が必要です)



PassKit

1. passslot-ios-sdk

"Objective-C Framework (SDK) for easy Passbook integration" とのこと。


http://www.passslot.com/


詳細は上記URLにて。


2. PassbookWWDC2012Materials

WWDC 2012 の

  • Introducing Passbook, Part 1
  • Introducing Passbook, Part 2

というセッションのサンプル一式。


3. Lucardio

"An app for putting cards in the Passbook App" とのこと。


f:id:shu223:20120923163743p:image:w160


4. iOS6-passbook-helper

passbook用ヘルパースクリプト。(試していないので詳細不明)



MediaToolbox

1. AudioTapProcessor

WWDC 2012 の "Real-Time Media Effects and Processing during Playback" セッションのサンプルで、MediaToolbox フレームワークに追加された MTAudioProcessingTap クラスを用いたデモとなっています。


f:id:shu223:20120923075006p:image:w340


(デモの実行には、デバイスにムービーが入っている必要があります)



CoreBluetooth

1. CBPeripheralManager-Demo

CoreBluetooth フレームワークに新たに追加された CBPeripheralManager クラスを用いたデモ。

Mac 用の "Scan" というプロジェクトと、iOS 6 デバイス用の "PeripheralModeTest" というプロジェクトが入っていて、両者を Bluetooth で通信させることができます。


f:id:shu223:20120923120827p:image:w300



iPhone 5 対応(4インチ画面対応)

1. 4インチのiPhone5(1,136 x 640ピクセル)画面対応
2. Supporting the iPhone 5


画面回転

1. iOS 6 UINavigationControllerのAutorotate
2. iOS6でUITabBarControler+UINavigationControllerのアプリに画面回転を実装する


その他

1. iOS-6-Cookbook

erica 氏によるクックブックのサンプルコードがアップされています。


iOS 6 新機能にだけフォーカスしているわけではなく、iOS 開発の主なトピックを網羅的に扱っているので、目的の新機能に関連するコードを探すのはちょっと大変かもしれません。(とりあえず UICollectionView のサンプルはありました)


ちなみに iOS-6-Advanced-Cookbook というリポジトリも用意されていますが、今のところ完全にからっぽです。


2. RHAddressBook

AddressBook のラッパーライブラリ(?)。

ABAddressBookGetAuthorizationStatus() とか、AddressBook に追加された認証まわりの機能が用いられています。


3. Using attributed strings in iOS6

UILabel, UITextField, UITextView に追加された attributedText プロパティ(NSAttributedString 型)についてのサンプルコードつき解説記事です。


HTMLのように、一部テキストに色をつけたりといった属性を持たせられるようになります。(以前から CoreText を使えばできたのですが、これによりかなり敷居が低くなったと思います)


4. iOS Viewライフサイクルまとめ、iOS6での変更点

iOS 6 では viewDidUnload が deprecated になってメモリ警告発生時に呼ばれなくなりましたが、じゃあどうすればよいか、という話が解説されています。


5. EXC_BAD_ACCESS in iOS 6 but not in iOS 5

iOS 5 では問題なく動作していた CoreGraphics での画像処理で EXC_BAD_ACCESS が発生する、という話。



2009 | 08 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2018 | 02 |