【问题标题】:How to mock a picture in Android Emulator Camera?如何在 Android Emulator Camera 中模拟图片?
【发布时间】:2011-05-29 02:29:43
【问题描述】:

有没有办法将静态图片设置为模拟器相机拍摄的照片?我想在模拟器上用 zxing 条码阅读器测试 ir。

【问题讨论】:

  • 您最终实施了哪种解决方案或哪种解决方案对您有用?

标签: android mocking camera emulation


【解决方案1】:

如果您在 linux 上运行模拟器,您可以使用 v4l2loopback 和 gstreamer 创建一个显示图像(例如 QRcode)的模拟网络摄像头。

安装 v4l2loopback:

$ wget https://github.com/umlaeute/v4l2loopback/archive/master.zip
$ unzip master.zip
$ cd v4l2loopback
$ make
$ sudo make install

检查你已经有多少个摄像头(我只有 /dev/video0)并初始化下一个:

$ sudo modprobe v4l2loopback video_nr=1 card_label="mockCam"

将图像(例如来自 googlecharts 的 QR)流式传输到 mockCam。这要求:

$ wget "https://chart.googleapis.com/chart?chs=600x340&cht=qr&chl=testing" -O qr.png
$ gst-launch-0.10 filesrc location=qr.png ! pngdec ! freeze ! v4l2sink device=/dev/video1

您可以检查您的模拟相机是否被模拟器拾取:

$ ./emulator -avd yourAVD -webcam-list

如果是这样,您可以使用模拟网络摄像头启动模拟器:

$ ./emulator -avd yourAVD -camera-back webcam1

您还可以将 AVD 设置更改为 webcam1。希望这会有所帮助。

【讨论】:

  • 如果有人试图将其与gst-launch-1.0 一起使用,则freeze 更改为imagefreeze
  • 今天是“cd v4l2loopback-master”,后来是 modprobe 之前的“sudo depmod -a” :)
  • 在使用 gst-launch 进行流式传输时遇到问题,可以使用 ffmpeg:ffmpeg -loop 1 -stream_loop -1 -framerate 10 -i binary-file.png -pix_fmt yuv420p -s 320x240 -f v4l2 /dev/video1
【解决方案2】:

这可以通过添加一个经典的抽象层来解决,例如这位先生在此示例源代码中所做的:
http://www.tomgibara.com/android/camera-source

具体来说,听起来您可能想要一些测试图片并使用BitmapCamera

【讨论】:

  • 你能详细说明一下吗?我不明白 CameraSource 是如何实现的。
  • CameraSource 只是一个抽象类 (tomgibara.com/android/CameraSource.java)。在模拟器中进行测试期间,您可以实例化位图相机,以便使用您提供的特定图像进行测试。但是,为了在实际设备上运行,您可以实例化一个 GenuineCamera 类,该类使用设备的摄像头:tomgibara.com/android/GenuineCamera.java
  • 在 Google IO Session 中说它可以使用网络摄像头。但我没有找到如何做到这一点:developers.google.com/events/io/sessions/gooio2012/104 也许他们在谈论下一个版本?!
  • 这可能适用于基本的“拍照”用例,但不实现 Camera.PreviewCallback。
  • 是的,那是正确的......通过这种方式,您可以进行所有测试,本质上是一个提供静态位图而不是使用相机 API 的模拟类。
【解决方案3】:

您还可以使用 Android 版 MockCamera。请参阅详细参考答案。 https://stackoverflow.com/a/38456086/1053097

【讨论】:

  • 我尝试了模拟相机,它正在显示视频。工作。但是如果我想要一张静态图片呢?
  • 虽然晚了,但是每一帧视频都会转换成纹理加载到表面上。同样,您可以将图像作为纹理传递并加载。
猜你喜欢
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 2017-06-08
  • 2021-06-02
相关资源
最近更新 更多