导语
作为计算机视觉库,OpenCV一直被广泛应用于各种图像和视频相关的项目中,更在推动人工智能和神经网络的发展中发挥了重要作用。但是学习和使用OpenCV并不简单,总是需要些时间选择合适的类库、合适的编译工具、合适的编译配置等。
由Clojure封装Origami的愿景是用令人愉悦的语法,直截了当地发挥OpenCV的巨大威力。小编希望本文能帮助你集中更多的时间和精力在项目本身而非工具上。
作者:Nicolas Modrzyk
来源:华章计算机(ID:hzbook_ jsj)
Origami库诞生的动机是使得计算机视觉相关的编程更易于开展、运行,并且便于实验。
最近,人工智能和神经网络风靡一时,我需要完成一项任务,为几个不同的神经网络准备并且生成数据。显而易见的是,我不可能仅仅通过将所有种类的图像或者视频数据输入到一个网络里就期待它们产生效果。我需要将这些图像或视频按照尺寸、颜色或者内容组织起来,并且尽可能地自动化处理这些图像,因为手动将这十亿张图像分类确实很耗时。
因此,在本文中,我们将介绍Origami,它是为基于JavaVM的OpenCV库所设计的Clojure封装、项目模板以及工作环境样本,所有这些都使用了简洁明了的编程语言。
本文的案例将会使用Origami完成,即你将通过Clojure学习OpenCV代码。我们将从Origami库的角度学习OpenCV的一些概念。
开始Origami编程
生活本身是简单的……但这并不意味着生活是容易的。
Steve Marabol
问题定义
现在,你已经听说了名为Origami的库,它将OpenCV封装成轻量级的特定领域语言(Domain Specific Language,DSL),你想要在你的机器上安装Origami并且尝试使用它。
解决方法
如果你已经阅读或翻阅了本书的第一章,你会记得使用了Leiningen来创建一个工项目模板并且在一个简单的项目层面布局文件。
现在,你将使用一个名为clj-opencv的项目模板,这个模板将会为你下载依赖关系并且复制需要的文件。
你将看到在这个新的设置中可以使用不同的编程风格。
工作原理
如果Leiningen一直安装在你的机器上,同建立基于OpenCV的java项目一样,你可以基于模板建立一个新的项目。
使用Leiningen模板进行项目设置
项目模板叫做clj-opencv,在终端或控制台通过Leiningen使用下面的一行命令调用:
lein new clj-opencv myfirstcljcv
执行该命令将下载新的模板并且建立包含如下内容的myfirstcljcv文件夹:
├── notes
│ ├── empty.clj
│ └── practice.clj
├── output
├── project.clj
├── resources
│ ├── XML
│ │ ├── aGest.xml
│ │ ├── closed_frontal_palm.xml
│ │ ├── face.xml
│ │ ├── fist.xml
│ │ ├── haarcascade_eye_tree_eyeglasses.xml
│ │ ├── haarcascade_frontalface_alt2.xml
│ │ └── palm.xml
│ ├── cat.jpg
│ ├── minicat.jpg
│ ├── nekobench.jpg
│ ├── souslesoleil.jpg
│ └── sunflower.jpg
└── test
└── opencv3
├── ok.clj
├── simple.clj
├── tutorial.clj
└── videosample.clj
你会看到6个文件夹,19个文件。在上述文件结构中:
notes文件夹包含了为gorilla和lein-gorilla建立的注释形式的代码。我们稍后将会讲解如何使用这两只“野兽”。
project.clj在Leiningen项目文件里已经出现过。
resources包含了样本图像、练习用的XML文件以及OpenCV识别特征。
test包含了样本Clojure代码,该代码实现了如何开始使用OpenCV和Origami。
如同你所记得的样子,project.clj文件包含了几乎所有项目元数据。这一次我们将使用一个同第一章相比稍作更新的版本。
同前一章不同的主要地方在下面加粗显示,这样可以使我们快速审阅代码。
(defproject sample5 "0.1-SNAPSHOT"
:injections [
(clojure.lang.RT/loadLibrary org.opencv.core.Core/NATIVE_
LIBRARY_NAME)]
:plugins [[lein-gorilla "0.4.0"]]
:test-paths ["test"]
:resource-paths ["rsc"]
:main opencv3.ok
:repositories [
["vendredi" "https://repository.hellonico.info/repository/
hellonico/"]]
:aliases {"notebook" ["gorilla" ":ip" "0.0.0.0" ":port" "10000"]}
:profiles {:dev {
:resource-paths ["resources"]
:dependencies [
; used for proto repl
[org.clojure/tools.nrepl