1.概述
《Vision-based User Interface Programming in Java》这本书介绍了如何用java做摄像头程序和游戏,可以作为一个计算机视觉的启蒙读物。
作者是泰国的Dr. Andrew Davison,这本书的在线浏览网址是
[url]http://fivedots.coe.psu.ac.th/~ad/vbi/index.html[/url]
不过计算机视觉对数学要求很高,里面还有许多理论,要想完全吃透还是需要参考一些别的书籍和论文。
这本书依赖于OpenCV和JavaCV早期版本,所以要想运行书中的程序,请注意软件的版本如下。
[url=http://opencv.org/]OpenCV[/url] 2.4.5
[url=https://code.google.com/p/javacv/]JavaCV[/url] 0.5
2. 各章简单介绍
Chapter 1. What is a VBI?
VBI介绍,没有网络版本
Chapter 2. Webcam Snaps Using JavaCV
使用JavaCV实现摄像头拍照
一上来简单介绍了OpenCV,JavaCV
然后一个简单的HelloWorld程序用JavaCV显示一张图片
最后实现摄像头拍照
并且介绍了3个测试摄像头的工具
[url=http://batchloaf.wordpress.com/commandcam/]CommandCam[/url]
[url=http://support.microsoft.com/kb/311272]DevCon[/url]
[url=http://www.ffmpeg.org/]FFmpeg[/url]
Chapter 3. Webcam Snaps Using VLC
使用[url=http://caprica.github.io/vlcj/]vlcj[/url]实现摄像头拍照
首先一个简单的程序介绍如何用vlcj播放各种格式的视频
然后实现摄像头拍照
Chapter VBI-3.5. Webcam Snaps Using JMF
使用JMF实现摄像头拍照
JMF比较老了,所以参考参考就行。
Chapter 4. Motion Detection
解释了如何用摄像头来检测场景的变化或移动。因为这是视频系统的基本需求,所以作者介绍了3种不同的方法来实现这个功能。
第一种方法,基于连贯的视频帧的图像差异比较
第二种方法,使用背景前景分割
第三种方法,光流法
Chapter VBI-4.5. A Motion-tracking Missile Launcher
一个程序实现了导弹发射器瞄准人的头部,并发射导弹。当然这个导弹只是一个玩具。
Chapter 5. Blobs Drumming
击鼓游戏。需要使用颜色鲜艳的方形道具(塑料片)来触碰鼓达到击鼓的效果。屏幕被分为9个鼓,当道具的中心点落入9个鼓中的一个时,PC的音箱会发出相应的鼓声。本人用一本全天蓝色封面的大词典试验成功。
首先介绍轮廓寻找技术,如何检测出道具的轮廓。需要用到HSVSelector程序先将道具的颜色识别出来。
Chapter 6. Hand and Finger Detection
手掌与5根手指检测
需要一副纯色的手套作为道具。
同样首先需要用到HSVSelector程序先将道具的颜色识别出来。
这个程序在我的电脑上没有试验成功,手指的识别率比较低。
Chapter 7. Finger Tracking with TopCodes
手指追踪。把TopCodes贴在手指上,达到鼠标的移动和点击效果。
[url=http://users.eecs.northwestern.edu/~mhorn/topcodes/]TopCodes[/url]可以识别出多达99种图案。
Chapter 8. Fingerprint Recognition
指纹识别
用到[url=http://sourceforge.net/projects/biometricsdk/]biometricsdk[/url]来建立指纹模板,作指纹比对。
Chapter 9. Face Detection and Tracking
人脸检测与跟踪
这个功能是OpenCV自带的,用到哈尔算法来检测人脸,用到人脸数据库文件haarcascade_frontalface_alt.xml
Chapter 10. Face Recognition
人脸识别,这一章比上一章更进了一步,用特征脸(eigenfaces)技术识别人脸,包含三个部分:
第一部分,Colt PCA
PCA(Principal Components Analysis)主成分分析,是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。
[url=http://acs.lbl.gov/software/colt/]colt[/url]是一组高性能的科学和数学计算的 Java 库。不过有点老了。
作者用colt实现了一个简单的PCA算法。
第二部分,JavaFaces2
重构了[url=http://code.google.com/p/javafaces/]javafaces[/url]代码,为特征脸生成一个cache文件
第三部分,最后的成果,可以人脸识别了
Chapter 11. Eye Tracking
眼睛跟踪
也是用哈尔算法来检测眼睛,用到眼睛数据库文件
Chapter 12. Facial Features Recognition
第一部分,用哈尔算法来检测脸、眼睛、鼻子、嘴
第二部分,用[url=http://www.luxand.com/facesdk/]FaceSDK[/url]检测脸部的66个坐标
FaceSDK很强大,遗憾的是需要注册才能试用,且有试用期限制。
Chapter 13. OCR and Sudoku
光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。
这章讲了一个例子,识别数独图片,转换成文字,并且将这个数独解答出来。
[url=https://code.google.com/p/tesseract-ocr/]tesseract[/url]是一个老牌的文字识别组件,可能是最好的文字识别工具。
[url=http://tess4j.sourceforge.net/]tess4j[/url]是对tesseract的java封装
[url=http://jocr.sourceforge.net/]gocr[/url]是简单的文字识别,可以命令行调用
Chapter 14. QR Codes
这章讲了如何把网址转换成二维码,以及反向操作。
QR码(全称为快速响应矩阵码;英语:Quick Response Code)是二维条码的一种,于1994年由日本DENSO WAVE公司发明。
[url=https://github.com/zxing/zxing]zxing[/url] 不仅支持二维码,还支持多种条形码
Chapter 15. Augmented Reality with NyARToolkit
增强现实(Augmented Reality, AR), 是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,目标是在屏幕上把虚拟世界套在现实世界并进行互动。
这种技术估计由1990年提出。随着随身电子产品运算能力的提升,预期增强现实的用途将会越来越广。
首先可以在线观赏2个例子(番羽土啬)
[url=https://www.layar.com/]Layar[/url]
[url=http://www.wikitude.com/]Wikitude[/url]
然后介绍了[url=http://www.hitl.washington.edu/artoolkit/]ARToolKit[/url]以及[url=http://nyatla.jp/nyartoolkit/wp/?page_id=198]NyARToolkit[/url]
最后用这些类库实现了一个demo,可以识别一张海报,并在海报上加上虚拟3D图像。
Chapter 16. Depth Processing
这章首先讲了3D电影的简单原理,就是需要2个摄像头来拍摄,左右各一个。这样可以辨识出物体距离屏幕的距离。
然后分别用红色和蓝色过滤,配合3D红蓝眼镜观看,就成了3D电影了。
PLY是一种电脑档案格式,全名为多边形档案(Polygon File Format)或 史丹佛三角形档案(Stanford Triangle Format)。
史丹佛大学的 The Digital Michelangelo Project计划采用PLY格式储存极高分辨率之米开朗基罗的作品"大卫"雕塑。
该格式主要用以储存立体扫描结果的三维数值,透过多边形片面的集合描述三维物体,与其他格式相较之下这是较为简单的方法。它可以储存的资讯包含颜色、透明度、表面法向量、材质座标与资料可信度,并能对多边形的正反两面设定不同的属性。
[url=http://meshlab.sourceforge.net/]MeshLab[/url]是立体网状处理软件。此软件可管理面和处理大量的非结构化网格,并提供编辑、清理、修复及查核等功能,可对模型进行渲染及转档。
Chapter 17. Networked Cameras
介绍了网络摄像头原理。简单来说就是客户端将图像切成若干方块,每次将和上次不一样的图片发到服务端即可。服务端可以理解成监控中心了,收集各个客户端发来的信息然后还原图像。
《Vision-based User Interface Programming in Java》这本书介绍了如何用java做摄像头程序和游戏,可以作为一个计算机视觉的启蒙读物。
作者是泰国的Dr. Andrew Davison,这本书的在线浏览网址是
[url]http://fivedots.coe.psu.ac.th/~ad/vbi/index.html[/url]
不过计算机视觉对数学要求很高,里面还有许多理论,要想完全吃透还是需要参考一些别的书籍和论文。
这本书依赖于OpenCV和JavaCV早期版本,所以要想运行书中的程序,请注意软件的版本如下。
[url=http://opencv.org/]OpenCV[/url] 2.4.5
[url=https://code.google.com/p/javacv/]JavaCV[/url] 0.5
2. 各章简单介绍
Chapter 1. What is a VBI?
VBI介绍,没有网络版本
Chapter 2. Webcam Snaps Using JavaCV
使用JavaCV实现摄像头拍照
一上来简单介绍了OpenCV,JavaCV
然后一个简单的HelloWorld程序用JavaCV显示一张图片
最后实现摄像头拍照
并且介绍了3个测试摄像头的工具
[url=http://batchloaf.wordpress.com/commandcam/]CommandCam[/url]
[url=http://support.microsoft.com/kb/311272]DevCon[/url]
[url=http://www.ffmpeg.org/]FFmpeg[/url]
Chapter 3. Webcam Snaps Using VLC
使用[url=http://caprica.github.io/vlcj/]vlcj[/url]实现摄像头拍照
首先一个简单的程序介绍如何用vlcj播放各种格式的视频
然后实现摄像头拍照
Chapter VBI-3.5. Webcam Snaps Using JMF
使用JMF实现摄像头拍照
JMF比较老了,所以参考参考就行。
Chapter 4. Motion Detection
解释了如何用摄像头来检测场景的变化或移动。因为这是视频系统的基本需求,所以作者介绍了3种不同的方法来实现这个功能。
第一种方法,基于连贯的视频帧的图像差异比较
第二种方法,使用背景前景分割
第三种方法,光流法
Chapter VBI-4.5. A Motion-tracking Missile Launcher
一个程序实现了导弹发射器瞄准人的头部,并发射导弹。当然这个导弹只是一个玩具。
Chapter 5. Blobs Drumming
击鼓游戏。需要使用颜色鲜艳的方形道具(塑料片)来触碰鼓达到击鼓的效果。屏幕被分为9个鼓,当道具的中心点落入9个鼓中的一个时,PC的音箱会发出相应的鼓声。本人用一本全天蓝色封面的大词典试验成功。
首先介绍轮廓寻找技术,如何检测出道具的轮廓。需要用到HSVSelector程序先将道具的颜色识别出来。
Chapter 6. Hand and Finger Detection
手掌与5根手指检测
需要一副纯色的手套作为道具。
同样首先需要用到HSVSelector程序先将道具的颜色识别出来。
这个程序在我的电脑上没有试验成功,手指的识别率比较低。
Chapter 7. Finger Tracking with TopCodes
手指追踪。把TopCodes贴在手指上,达到鼠标的移动和点击效果。
[url=http://users.eecs.northwestern.edu/~mhorn/topcodes/]TopCodes[/url]可以识别出多达99种图案。
Chapter 8. Fingerprint Recognition
指纹识别
用到[url=http://sourceforge.net/projects/biometricsdk/]biometricsdk[/url]来建立指纹模板,作指纹比对。
Chapter 9. Face Detection and Tracking
人脸检测与跟踪
这个功能是OpenCV自带的,用到哈尔算法来检测人脸,用到人脸数据库文件haarcascade_frontalface_alt.xml
Chapter 10. Face Recognition
人脸识别,这一章比上一章更进了一步,用特征脸(eigenfaces)技术识别人脸,包含三个部分:
第一部分,Colt PCA
PCA(Principal Components Analysis)主成分分析,是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。
[url=http://acs.lbl.gov/software/colt/]colt[/url]是一组高性能的科学和数学计算的 Java 库。不过有点老了。
作者用colt实现了一个简单的PCA算法。
第二部分,JavaFaces2
重构了[url=http://code.google.com/p/javafaces/]javafaces[/url]代码,为特征脸生成一个cache文件
第三部分,最后的成果,可以人脸识别了
Chapter 11. Eye Tracking
眼睛跟踪
也是用哈尔算法来检测眼睛,用到眼睛数据库文件
Chapter 12. Facial Features Recognition
第一部分,用哈尔算法来检测脸、眼睛、鼻子、嘴
第二部分,用[url=http://www.luxand.com/facesdk/]FaceSDK[/url]检测脸部的66个坐标
FaceSDK很强大,遗憾的是需要注册才能试用,且有试用期限制。
Chapter 13. OCR and Sudoku
光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。
这章讲了一个例子,识别数独图片,转换成文字,并且将这个数独解答出来。
[url=https://code.google.com/p/tesseract-ocr/]tesseract[/url]是一个老牌的文字识别组件,可能是最好的文字识别工具。
[url=http://tess4j.sourceforge.net/]tess4j[/url]是对tesseract的java封装
[url=http://jocr.sourceforge.net/]gocr[/url]是简单的文字识别,可以命令行调用
Chapter 14. QR Codes
这章讲了如何把网址转换成二维码,以及反向操作。
QR码(全称为快速响应矩阵码;英语:Quick Response Code)是二维条码的一种,于1994年由日本DENSO WAVE公司发明。
[url=https://github.com/zxing/zxing]zxing[/url] 不仅支持二维码,还支持多种条形码
Chapter 15. Augmented Reality with NyARToolkit
增强现实(Augmented Reality, AR), 是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,目标是在屏幕上把虚拟世界套在现实世界并进行互动。
这种技术估计由1990年提出。随着随身电子产品运算能力的提升,预期增强现实的用途将会越来越广。
首先可以在线观赏2个例子(番羽土啬)
[url=https://www.layar.com/]Layar[/url]
[url=http://www.wikitude.com/]Wikitude[/url]
然后介绍了[url=http://www.hitl.washington.edu/artoolkit/]ARToolKit[/url]以及[url=http://nyatla.jp/nyartoolkit/wp/?page_id=198]NyARToolkit[/url]
最后用这些类库实现了一个demo,可以识别一张海报,并在海报上加上虚拟3D图像。
Chapter 16. Depth Processing
这章首先讲了3D电影的简单原理,就是需要2个摄像头来拍摄,左右各一个。这样可以辨识出物体距离屏幕的距离。
然后分别用红色和蓝色过滤,配合3D红蓝眼镜观看,就成了3D电影了。
PLY是一种电脑档案格式,全名为多边形档案(Polygon File Format)或 史丹佛三角形档案(Stanford Triangle Format)。
史丹佛大学的 The Digital Michelangelo Project计划采用PLY格式储存极高分辨率之米开朗基罗的作品"大卫"雕塑。
该格式主要用以储存立体扫描结果的三维数值,透过多边形片面的集合描述三维物体,与其他格式相较之下这是较为简单的方法。它可以储存的资讯包含颜色、透明度、表面法向量、材质座标与资料可信度,并能对多边形的正反两面设定不同的属性。
[url=http://meshlab.sourceforge.net/]MeshLab[/url]是立体网状处理软件。此软件可管理面和处理大量的非结构化网格,并提供编辑、清理、修复及查核等功能,可对模型进行渲染及转档。
Chapter 17. Networked Cameras
介绍了网络摄像头原理。简单来说就是客户端将图像切成若干方块,每次将和上次不一样的图片发到服务端即可。服务端可以理解成监控中心了,收集各个客户端发来的信息然后还原图像。