用 Golang 开发 Android 应用(七)—— OpenCV 使用

用 Golang 开发 Android 应用 -- OpenCV 使用

      • 计划按以下的内容更新
      • OpenCV 在 Android 上的配置
        • FaceDetect 例子
        • 关于仿真演示/调试
        • 应用名和图标
        • 总结

计划按以下的内容更新

  • 基本环境配置
  • 简单 UI
  • Storage 使用
  • Sensor 使用
  • Audio(openAL) 使用
  • Camera 使用
  • OpenCV 使用

OpenCV 在 Android 上的配置

OpenCV 是什么就不在这说了,怎么在 Golang 里调用 OpenCV 请看这里,如果对 OpenCV 不太了解的,先在 PC 上把例子跑一跑,初步了解一下。

还是直接从FaceDetect例子 (人脸检测不是人脸识别,这两个是有区别的)来说明 OpenCV 在 Android 中的使用入门吧。

用 Golang 开发 Android 应用(七)—— OpenCV 使用_第1张图片

FaceDetect 例子

这个例子是从 Camera Demo 修改出来的,lib 下多放了 libopencv_java3.so 。同样这个例子受限于平台,是因为 Camera 的限制。如果不用 Camera ,比如做成运行库,那么 OpenCV 在 android 各平台都能跑。

其实单就人脸检测来说,用 OpenCV 只有几行代码,但是真正用于项目,哪怕就象这个简单 Demo 要做的工作不少,象边一类型的应用性能是首先要考虑的问题,因为检测只能异步进行,其状态的维护,结果的绘制,都有比较多的工作要做。

这里列出一些 log ,直观的看下效率问题:

I/GoLog   (16612): DetectYuv: 500.208µs 100.818125ms 377.475835ms 1m20.421008681s
I/GoLog   (16612): DetectYuv: 476.459µs 114.195208ms 377.952294ms 1m20.535203889s
I/GoLog   (16612): DetectYuv: 1.429583ms 279.589166ms 379.381877ms 1m20.814793055s
I/GoLog   (16612): DetectYuv: 1.167083ms 265.318542ms 380.54896ms 1m21.080111597s

上面的数据分别是分辨率为 320x240;640x480 时检测所需的时间大概是 100ms,300ms,由此可看出来,这台手机要达到好一点的效果处理的分辨率为 320x240 较合适。

这个并不代表着需要把分辨率国定为 320x240 而是可以在 func (s *faceDetectStat) detect(gray *core.Mat) 中先把 gray 缩小到320x240左右,再进行接下来的处理,最后记得把坐标放大回来。这样就能在不同分辨率下保持较快的检测速度,达到较好的效果。

代码还是比较好理解的,因为各种硬件差异,在运行的时候需调整显示的旋转角度参数。按正常竖着拿手机的状态,调整角度参数使图象“正”过来,这样才能正确检测人脸。

关于仿真演示/调试

建议用 Android 4.4 以及 ABI 为 arm 的模拟器,在 Windows 下可以装个 《VCam 虚拟摄像头》之类的软件模拟摄像头,这样在仿真配置的时候可选择虚拟摄像头,这样就能在电脑上直接看到运行效果了。

另外就是查看Log,可以用一个叫 Android Log Viewer 的软件。

应用名和图标

如果有编译并运行这个例子,会发现它有自己的应用名和图标了。这可能一直是大家心里的最大疑问。
标准做法当然是用 Android Studio 生成一个项目,然后修改好应用用名和图标等,然后把后成的apk里的 resources.arsc 文件和 res 文件夹直接拷过来。象本例目录下:

│  AndroidManifest.xml
│  resources.arsc
│
└─res
    └─drawable
            ic_launcher.png

修改 AndroidManifest.xml

<application android:hasCode="false" android:debuggable="true" android:label="@string/app_name" android:icon="@drawable/ic_launcher" >

看到 android:label="@string/app_name"android:icon="@drawable/ic_launcher" 这样和 Android Studio 生成应用里的 id 相同就行了。

当然也可以直接用本例中的 resources.arsc 只要把 res/drawable/ic_launcher.png 内容改成自定义的(名字不要改),然后用二进制编辑器把 resources.arsc 中的应用名改成自己的(UTF8格式)。就好了!!(不建议这么做,同时不要说是我教你这么做的^_^ )。

总结

把计划中要写的都完成了,基本也涵盖了开发 Android 应用常用的功能或模块。可能有些大线条,主要是我认为很多时候代码已经能说明问题了。如果有什么问题欢迎留言讨论。最后谢谢所有读者!!!

你可能感兴趣的:(Golang,Android,OpenCV,Face,detect,dnn,Golang,Android)