http://atnd.org/events/18798
そこで、mt_uenoさんにOpenCVのハンズオンをしてもらいました。
最新版はバイナリで配布されているとのことです。以下のサイトに最新版があります。
"Open Computer Vision Library - Browse /opencv-android/2.3.1 at SourceForge.net":http://bit.ly/qgBOtO
資料とOpenCVの最新版をUSBメモリで配布していただき、
各人でOpenCVをEclipseにインポートしてサンプルが動くか確認しました。
が、しかし動きません!
Nexus S(2.3.4)で強制終了エラー |
OpenCVの2011年8月の最新バージョンは、Ver.2.31beta2ということで、JavaAPIが大幅に拡張されたそうです。ただし、API Levelが8以上なので2.2以降のAndroid端末しか適用されません。
私のAndroidは2.3.4のNexus Sなので、そのままうまく動くかな?と思いましたが、サンプルプログラムを実行させるとエラーがでました。
チュートリアル用の2つのプログラムを試しました。
- 0. Android Camera(カメラ画像取得・表示するもの)
- 1. Add OpenCV(カメラ画像を簡単に画像処理するもの)
「1. Add OpenCV」はOpenCVを使いカメラ機能を使う物で、これは起動時に即、異常終了します。
バイナリで提供されるライブラリという事で、プラットフォームの違いによる問題も考えられそうですが、ライブラリは(AndroidのCPUである)ARMをターゲットとしてビルドされているので、MacでもWindowsでもLinuxでもEclipse上では変わりないとこことでした。
以下に異常終了が起きたときのLogCatを入れておきます。
気になるWARNINGやERRORにハイライトを入れています。
08-21 23:11:13.785: INFO/ActivityManager(109): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=org.opencv.samples.tutorial1/.Sample1Java } from pid 194 08-21 23:11:13.847: INFO/ActivityManager(109): Start proc org.opencv.samples.tutorial1 for activity org.opencv.samples.tutorial1/.Sample1Java: pid=10985 uid=10075 gids={1006} 08-21 23:11:13.890: INFO/WindowManager(109): Setting rotation to 1, animFlags=1 08-21 23:11:13.894: INFO/ActivityManager(109): Config changed: { scale=1.0 imsi=0/0 loc=ja_JP touch=3 keys=1/1/2 nav=1/1 orien=2 layout=34 uiMode=17 seq=43} 08-21 23:11:13.914: VERBOSE/RenderScript_jni(194): surfaceDestroyed 08-21 23:11:13.960: INFO/Sample::Activity(10985): Instantiated new class org.opencv.samples.tutorial1.Sample1Java 08-21 23:11:13.960: INFO/Sample::Activity(10985): onCreate 08-21 23:11:13.964: INFO/Sample::SurfaceView(10985): Instantiated new class org.opencv.samples.tutorial1.Sample1View 08-21 23:11:13.992: INFO/ActivityManager(109): Displayed org.opencv.samples.tutorial1/.Sample1Java: +147ms 08-21 23:11:14.058: INFO/Sample::SurfaceView(10985): surfaceCreated 08-21 23:11:14.070: ERROR/SecCamera(75): initCamera: m_cam_fd(15), m_jpeg_fd(0) 08-21 23:11:14.070: INFO/SecCamera(75): Name of input channel[0] is S5K4ECGX 08-21 23:11:14.078: ERROR/SecCamera(75): initCamera: m_cam_fd2(21) 08-21 23:11:14.078: INFO/SecCamera(75): Name of input channel[0] is S5K4ECGX 08-21 23:11:14.078: INFO/SecCamera(75): Name of input channel[0] is S5K4ECGX 08-21 23:11:14.078: INFO/StagefrightPlayer(75): setDataSource('/system/media/audio/ui/camera_click.ogg') 08-21 23:11:14.082: INFO/CameraHardwareSec(75): int android::CameraHardwareSec::previewThreadWrapper(): starting 08-21 23:11:14.082: INFO/CameraHardwareSec(75): int android::CameraHardwareSec::previewThreadWrapper(): calling mSecCamera->stopPreview() and waiting 08-21 23:11:14.082: WARN/SecCamera(75): int android::SecCamera::stopPreview(): doing nothing because m_flag_camera_start is zero 08-21 23:11:14.085: INFO/StagefrightPlayer(75): setDataSource('/system/media/audio/ui/VideoRecord.ogg') 08-21 23:11:14.093: INFO/Sample::SurfaceView(10985): surfaceCreated 08-21 23:11:14.097: DEBUG/Camera(10985): app passed NULL surface 08-21 23:11:14.171: INFO/Sample::SurfaceView(10985): Starting processing thread 08-21 23:11:14.835: DEBUG/CameraHardwareSec(75): MemoryHeapBase(fd(15), size(5702576), width(720), height(480)) 08-21 23:11:14.839: INFO/CameraHardwareSec(75): int android::CameraHardwareSec::previewThreadWrapper(): return from wait 08-21 23:11:14.851: WARN/dalvikvm(10985): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/opencv/core/Mat; 08-21 23:11:14.890: DEBUG/AndroidRuntime(10985): Shutting down VM 08-21 23:11:14.890: WARN/dalvikvm(10985): threadid=1: thread exiting with uncaught exception (group=0x40015560) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): FATAL EXCEPTION: main 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): java.lang.ExceptionInInitializerError 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at org.opencv.samples.tutorial1.Sample1View.surfaceChanged(Sample1View.java:31) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.SurfaceView.updateWindow(SurfaceView.java:549) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.SurfaceView.dispatchDraw(SurfaceView.java:348) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.View.draw(View.java:6883) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.widget.FrameLayout.draw(FrameLayout.java:357) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.View.draw(View.java:6883) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.widget.FrameLayout.draw(FrameLayout.java:357) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.ViewRoot.draw(ViewRoot.java:1522) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.ViewRoot.performTraversals(ViewRoot.java:1258) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.os.Handler.dispatchMessage(Handler.java:99) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.os.Looper.loop(Looper.java:130) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at android.app.ActivityThread.main(ActivityThread.java:3683) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at java.lang.reflect.Method.invokeNative(Native Method) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at java.lang.reflect.Method.invoke(Method.java:507) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at dalvik.system.NativeStart.main(Native Method) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load opencv_java: findLibrary returned null 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at java.lang.Runtime.loadLibrary(Runtime.java:429) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at java.lang.System.loadLibrary(System.java:554) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): at org.opencv.core.Mat.<clinit>(Mat.java:2065) 08-21 23:11:14.894: ERROR/AndroidRuntime(10985): ... 23 more 08-21 23:11:14.898: WARN/ActivityManager(109): Force finishing activity org.opencv.samples.tutorial1/.Sample1Java 08-21 23:11:14.957: DEBUG/dalvikvm(109): GC_EXPLICIT freed 124K, 54% free 6304K/13447K, external 3355K/3708K, paused 48ms 08-21 23:11:14.960: INFO/WindowManager(109): Setting rotation to 0, animFlags=1 08-21 23:11:14.976: INFO/ActivityManager(109): Config changed: { scale=1.0 imsi=0/0 loc=ja_JP touch=3 keys=1/1/2 nav=1/1 orien=1 layout=34 uiMode=17 seq=44} 08-21 23:11:15.097: DEBUG/dalvikvm(109): GC_EXTERNAL_ALLOC freed 23K, 54% free 6300K/13447K, external 3394K/3708K, paused 49ms 08-21 23:11:15.480: WARN/ActivityManager(109): Activity pause timeout for HistoryRecord{40694918 org.opencv.samples.tutorial1/.Sample1Java} 08-21 23:11:15.523: VERBOSE/RenderScript_jni(194): surfaceCreated 08-21 23:11:15.523: VERBOSE/RenderScript_jni(194): surfaceChanged 08-21 23:11:17.195: DEBUG/dalvikvm(109): GC_EXPLICIT freed 29K, 53% free 6321K/13447K, external 3750K/4672K, paused 98ms 08-21 23:11:25.945: WARN/ActivityManager(109): Activity destroy timeout for HistoryRecord{40694918 org.opencv.samples.tutorial1/.Sample1Java} 08-21 23:12:07.996: DEBUG/dalvikvm(3554): GC_EXPLICIT freed 198K, 67% free 4146K/12423K, external 1625K/2137K, paused 71ms 08-21 23:13:56.535: DEBUG/dalvikvm(3554): GC_EXPLICIT freed 241K, 67% free 4165K/12423K, external 1625K/2137K, paused 39ms//TODO LogCatテキストのハイライトはできないかな。
以下、上記LogCatの画像です。
(クリックして拡大) |
このコメントは投稿者によって削除されました。
返信削除Eclipseの、プロジェクトのプロパティで、Androidタブのところで、ライブラリの指定が多分うまくできてないんではないでしょうか?(パスがおかしい)
返信削除私も最初起動直後動作しませんでしたが、そこを直したら、動作しました。Garaxy Tabです。
上記、
返信削除08-21 23:11:14.894: ERROR/AndroidRuntime(10985): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load opencv_java: findLibrary returned null
とあるので、ライブラリがリンクされてないということかと思います。プロジェクトのプロパティを確認してみてください。ライブラリのところで×印がついていると思います。
adachi_cさん
返信削除ご指摘の部分を見直し、正常に動作しました!
プロジェクトのプロパティからライブラリの部分を見ると
ご指摘の通り×がついていました。
ライブラリを選択し直しサンプルが動作するようになりました。
手順によってなぜ×がつくのかもわかりましたので、
あらためてブログで記事にしたいと思います。
ありがとうございましたーm(_ _)m
yoshikenさん
返信削除正常動作するようになったとのことで,おめでとうございます。
> 手順によってなぜ×がつくのかもわかりましたので、
> あらためてブログで記事にしたいと思います。
再現方法もばっちりですか!!
記事になるのを心待ちにしておきます。