頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


iOSでOpenCVのサンプルが動かない

OpenCVでどんなことができるんだろうなってのをみたくて、
画像処理 — OpenCV-CookBook
↑このあたりのサンプルで面白そうなのを片っ端からiPhone実機でテストしてるんだけど、たまにiOS特有の問題か(?)うまく動いてくれないことがあるのよ。

(1)UIImageからcv::Matへの変換
K-meansによるピクセル値のクラスタリング(減色)
↑この項のサンプルが動かなくてどういうことだよ?ってコードを調べるとどうもUIImageをcv::Matに変換する部分がまずいっぽい。上記チュートリアルサイトは別にiOSに限ったわけではないので、その辺りは自分で適切にする必要があったのよね。
どうやらCV_8UC3の画像が必要なのにUIImageから変換する部分でCV_8UC4でメモリ確保してる。符号無し8ビットの4チャンネルってやつ。アルファチャンネルが不要だからそこだけ削除すればいいんだろうけど、、、どうすんのよ?って調べてみたらこんなページが。
objective c - CGBitmapContextCreate for CV_8UC3 (to use in OpenCV) - Stack Overflow
これを参考に
cv::cvtColor(img , img , CV_RGBA2RGB);
としてやればちゃんと動いてくれたよ。

(2)xmlファイルを読み込む
http://opencv.jp/cookbook/opencv_img.html#id40 顔を検出する
↑なぜかリンクを設定すると正常に表示されないので文字列だけ書いておくけど、、、
ここで分類器のxmlファイルを読み込む部分があるんだけど、どうやったらいいのかよくわらかず、、、
結局読み込みたいファイルをXcodeにドラッグ&ドロップして参照するようにして、こういう流れで。
{
    NSString* resDir = [[NSBundle mainBundle] resourcePath];
    const char *cascade_name = "haarcascade_frontalface_alt.xml";
    char cascade_path[PATH_MAX];
    sprintf(cascade_path, "%s/%s", [resDir cStringUsingEncoding:NSASCIIStringEncoding], cascade_name );
    cv::CascadeClassifier cascade;
    if(!cascade.load(cascade_path)) {
        NSLog(@"loading failed");
        return;
    }
}



iPhoneの電話が使えなくなった

メッセージアプリのスクショ

↑なぜかiPhone 5sのメッセージアプリにたまに電話番号だけが残っていたのよ。
電話番号は業者や知人でいたずらではなさそう。なんなんだろうなって思ってはいたんだけど、、、

最後の三連続のは相手が折り返し電話しますって業者が言ってくれたので待っていたんだけど、一向にかかってこなくて、結局こちらがIP電話でかけて通話できたのよ。相手によるとこちらは電波が届かないか電源が切れてる、とかなんとか。
そういうことか、そういう場合にメッセージで連絡あったことを教えてくれてたのか。

メッセージの件は理解したんだけど、、、iPhoneの電話が受信できない?試しに後でiPhoneから電話をかけたら全くつながらない。
なんだ、発信も受信もできないじゃないか!ちょっと、どうしたんだよ、b-mobile、、、?
と思ったんだけど、とりあえずiPhoneを再起動したら直ったんだ。疑ってごめんなさい、b-mobile。


Blenderで物体に穴を開ける

妙に苦労したのでメモしておくわ。
Blenderでごにょごにょ作ったオブジェクトに穴を開けたくなったんだけど、その方法がわからなかったんだよね。最初から穴の開いた面を作って、押し出して、、、って方法もあるみたいだけど、すでにそこそこ作ってあっていまさら!って状態なのよ。
どうしたらいいのかな、と散々試行錯誤や調べたりした結果たどり着いたのがこちら。
Blender入門講座|実践編|ブール演算 - YouTube
ModifierにBooleanなんてのがあるのか。これで解決したよ。

Boolean Modifier

↑無事に穴を開けられた図。


Xcode 5.1でiPhone 5sにビルドできなくなった

Xcode 5.1にしたら今までiPhone 5sで動いてたコードがビルドできなくなったのよ。
OpenCVやらBulletなんかを使っているのが。64bitうんぬんの話なんだろうな、と思いつつどうしたらいいんだろう?って調べてたらこういう記事が。

ios - Xcode 5.1 build opencv failed on 64 bit simulator - Stack Overflow

これを参考にarchitectureからarm64を外そうとしたんだよ。
ArchitecturesでOtherを選択して自分でarmv7,armv7sって入力したら、、、幸か不幸かうまく動いたプロジェクトがあったんだ。よっしゃーと思って他のも試したらうまくいかなくてさ。
えー、なんでだよ?って泣きそうになったんだけど

iOS7.1 - Xcode5.1でarm64を外す方法 - Qiita

↑こちらを参考に
$(ARCHS_STANDARD_32_BIT)
って指定したら動いてくれたよ。

64bit対応真面目にしないとダメだなこりゃ。


MavericksでPHPが動かない

久々にMac上でPHPを動かそうとしたら、あまりにも久しぶりでいろいろと忘れていたり、設定が変わっていたのかまともに動かなかったのよ。
もしかしたらMavericksにして初めてかもしれない。


ターミナルから sudo apachectl start でスタートするはずなんだけど、ういうわけかPHPで記述したページが表示されず、
Forbidden
You don't have permission to access
みたいなエラーメッセージが。スタートさせる前だと「サーバに接続できません」と表示されるからapacheは動いてるんだろうな。

調べてみるとOSアップデート時になにやら設定が変更されることがあるようで、、、

MacのMountain LionでApacheを設定する - くじらはんど★ブログ

↑ここなどを参考にやってみたことが二つ。
一つ目が
Macintosh HD/etc/apache2/users/(USERNAME).conf
ってファイルの作成。
多分etcってフォルダーは普段隠れているんだろうけど、最近は表示させっぱなしだな、何かと便利なので。
ターミナルから
defaults write com.apple.finder AppleShowAllFiles true
killall Finder
で隠れてるのは表示してくれる。

これでForbiddenは表示されなくなったんだけど、どういうわけかまともにページが起動してくれず、フォルダ内のファイルリストが表示されるだけ、みたいな状態に。indexファイルがないわけじゃないし、ファイル名を指定するとソースが表示されちゃうという状態。
PHPが動くようになっていない?ってことでもう一つやったのが、
Macintosh HD/etc/apache2/httpd.conf
の修正。
#LoadModule php5_module libexec/apache2/libphp5.so
のコメントを外す。外すだけなんだけど、Macが修正させてくれなかったので複製したファイルを修正、それを元のフォルダーに置くようにした。元のファイルは一応renameして置いてる。小心者だねえ。

とりあえずこれで動いてくれるようになったよ。


、、、ごめん!ウソ書いたかも。
動かないってところのスクショをブログ用に撮ろうとUSERNAME.confをrenameしてapacheをスタートさせたんだけど普通に動いてる。users/Guest.confってファイルをなくしてapacheリスタートしても動いてるということはコメントアウトだけでいいのかも?




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad