简体   繁体   English

OpenCV 2.3:如何从Android相机捕获帧?

[英]OpenCV 2.3: how to capture frames from Android camera?

I'm trying to use new OpenCV feature on Android: native camera access. 我正在尝试在Android上使用新的OpenCV功能:本机摄像头访问。 According to this document, it's quite easy, but I only get the error without success. 根据文档,这很容易,但是我只会得到错误而没有成功。

There is DDMS log: 有DDMS日志:

08-26 03:28:56.825: DEBUG/CAMERA_ACTIVITY(12613): Library name: libopencv_java.so 08-26 03:28:56.825: DEBUG/CAMERA_ACTIVITY(12613): Library base address: 0x81800000 08-26 03:28:56.835: DEBUG/CAMERA_ACTIVITY(12613): Libraries folder found: /data/data/com.viactivity.ar/lib/ 08-26 03:28:56.835: DEBUG/CAMERA_ACTIVITY(12613): CameraWrapperConnector::connectToLib: folderPath=/data/data/com.viactivity.ar/lib/ 08-26 03:28:56.835: ERROR/CAMERA_ACTIVITY(12613): ||libnative_camera_r2.2.2.so 08-26 03:28:56.835: ERROR/CAMERA_ACTIVITY(12613): ||libnative_camera_r2.3.3.so 08-26 03:28:56.835: DEBUG/CAMERA_ACTIVITY(12613): try to load library 'libnative_camera_r2.2.2.so' 08-26 03:28:56.835: DEBUG/CAMERA_ACTIVITY(12613): CameraWrapperConnector::connectToLib ERROR: cannot dlopen camera wrapper library /data/data/com.viactivity.ar/lib/libnative_camera_r2.2.2.so, dlerror="Cannot load library: find_library[1223]: 11258 'libnative_camera_r2.2.2.so' failed to load previously" 08-26 03:28:56.835: DEBUG/CAMERA_ 08-26 03:28:56.825:DEBUG / CAMERA_ACTIVITY(12613):库名称:libopencv_java.so 08-26 03:28:56.825:DEBUG / CAMERA_ACTIVITY(12613):库基本地址:0x81800000 08-26 03:28: 56.835:DEBUG / CAMERA_ACTIVITY(12613):找到库文件夹:/data/data/com.viactivity.ar/lib/ 08-26 03:28:56.835:DEBUG / CAMERA_ACTIVITY(12613):CameraWrapperConnector :: connectToLib:folderPath = /数据/数据/com.viactivity.ar/lib/ 08-26 03:28:56.835:错误/ CAMERA_ACTIVITY(12613):|| libnative_camera_r2.2.2.so 08-26 03:28:56.835:ERROR / CAMERA_ACTIVITY(12613) :|| libnative_camera_r2.3.3.so 08-26 03:28:56.835:DEBUG / CAMERA_ACTIVITY(12613):尝试加载库“ libnative_camera_r2.2.2.so” 08-26 03:28:56.835:DEBUG / CAMERA_ACTIVITY(12613) :CameraWrapperConnector :: connectToLib错误:无法dlopen相机包装库/data/data/com.viactivity.ar/lib/libnative_camera_r2.2.2.so,dlerror =“无法加载库:find_library [1223]:11258'libnative_camera_r2.2.2.so '之前无法加载”“ 08-26 03:28:56.835:DEBUG / CAMERA_ ACTIVITY(12613): try to load library 'libnative_camera_r2.3.3.so' 08-26 03:28:56.835: DEBUG/CAMERA_ACTIVITY(12613): CameraWrapperConnector::connectToLib ERROR: cannot dlopen camera wrapper library /data/data/com.viactivity.ar/lib/libnative_camera_r2.3.3.so, dlerror="Cannot load library: find_library[1223]: 11258 'libnative_camera_r2.3.3.so' failed to load previously" 08-26 03:28:56.835: ERROR/CAMERA_ACTIVITY(12613): CameraWrapperConnector::connectToLib ERROR: cannot dlopen camera wrapper library 08-26 03:28:56.835: ERROR/CV_CAP(12613): Native_camera returned opening error: 4 08-26 03:28:56.835: ERROR/AR_code(12613): Capture Error! 活动(12613):尝试加载库'libnative_camera_r2.3.3.so'08-26 03:28:56.835:DEBUG / CAMERA_ACTIVITY(12613):CameraWrapperConnector :: connectToLib错误:无法dlopen相机包装器库/ data / data / com。 viactivity.ar/lib/libnative_camera_r2.3.3.so,dlerror =“无法加载库:find_library [1223]:11258'libnative_camera_r2.3.3.so'之前无法加载”” 08-26 03:28:56.835:ERROR / CAMERA_ACTIVITY( 12613):CameraWrapperConnector :: connectToLib错误:无法dlopen相机包装库08-26 03:28:56.835:ERROR / CV_CAP(12613):Native_camera返回打开错误:4 08-26 03:28:56.835:ERROR / AR_code(12613) ):捕获错误!

There are two variants of code: 有两种代码变体:

CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANDROID + 0 ); 
IplImage* frame = cvQueryFrame( capture );
cvReleaseCapture(&capture);

.

cv::VideoCapture capture(CV_CAP_ANDROID + 0);
cv::Mat frame;

capture >> frame;

Both of them produce the same errors. 他们两个都产生相同的错误。 Does somebody was able to get native camera access on Android? 有人能够在Android上获得本机摄像头访问权限吗? Thanks a lot! 非常感谢!

UPD: The story above is about Android 3.2. UPD:上面的故事是关于Android 3.2的。 According to the words of Andrey Kamaev, Android 3.2 isn't supported. 根据Andrey Kamaev的说法,不支持Android 3.2。 I tried to test the same code on HTC Wildfire, but got another error: 我尝试在HTC Wildfire上测试相同的代码,但又遇到另一个错误:

08-26 19:49:06.856: DEBUG/OpenCV_NativeCamera(1337): CameraHandler::initCameraConnect(0x813e65a1, 0, 0x285a20, 0x0) 08-26 19:49:06.856: DEBUG/CameraService(72): CameraService::connect E (pid 1337, client 0x693d8) 08-26 19:49:06.856: DEBUG/CameraService(72): CameraService::connect X (pid 1337, new client 0x693d8) rejected. 08-26 19:49:06.856:DEBUG / OpenCV_NativeCamera(1337):CameraHandler :: initCameraConnect(0x813e65a1,0,0x285a20,0x0)08-26 19:49:06.856:DEBUG / CameraService(72):CameraService :: connect E (pid 1337,客户端0x693d8)08-26 19:49:06.856:DEBUG / CameraService(72):CameraService :: connect X(pid 1337,新客户端0x693d8)被拒绝。 (old pid 1337, old client 0x18728) 08-26 19:49:06.856: ERROR/OpenCV_NativeCamera(1337): initCameraConnect: Unable to connect to CameraService 08-26 19:49:06.856: ERROR/CAMERA_ACTIVITY(1337): CameraWrapperConnector::connectWrapper ERROR: the initializing function returned false 08-26 19:49:06.856: ERROR/CV_CAP(1337): Native_camera returned opening error: 6 (旧pid 1337,旧客户端0x18728)08-26 19:49:06.856:ERROR / OpenCV_NativeCamera(1337):initCameraConnect:无法连接到CameraService 08-26 19:49:06.856:ERROR / CAMERA_ACTIVITY(1337):CameraWrapperConnector: :connectWrapper错误:初始化函数返回的错误为08-26 19:49:06.856:ERROR / CV_CAP(1337):Native_camera返回了打开错误:6

Any ideas? 有任何想法吗?

At the moment OpenCV native camera does not support Android 3.2 (because its sources are not publicly available.) 目前,OpenCV本机摄像头不支持Android 3.2(因为其来源不公开)。

I'll post an update as soon as version compatible with Android 3.2 become available. 与Android 3.2兼容的版本发布后,我会立即发布更新。

Update: 更新:

OpenCV trunk already has solution for Android 3.x and 4.0.x. OpenCV干线已经具有适用于Android 3.x和4.0.x的解决方案。 It will be included into the next major release of OpenCV. 它会包含在OpenCV的下一个主要版本中。

The above two methods what u had described cannot be worked out, instead of that ... 您所描述的以上两种方法无法解决,而是...

use Camera.Preview callback to get the raw YUV frames , then convert the YUV Frames to RGB , then construct IPlImage* from the data available , 使用Camera.Preview回调获取原始YUV帧,然后将YUV帧转换为RGB,然后根据可用数据构造IPlImage *,

Then use the constructed IplImage for further processing 然后使用构造的IplImage进行进一步处理

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM